You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Overview

Error formatting macro: snippet: java.lang.NullPointerException

The Code

For this example we have a simple Stateful bean called TelephoneBean as defined below. As a simple way of demonstrating the state we have to methods: speak and listen. You call speak and pass in some text, then you call listen to get your answer.

bean
Error formatting macro: snippet: java.lang.NullPointerException
business interface
Error formatting macro: snippet: java.lang.NullPointerException

EJB3 Notes

The bean class uses the annotation @Remote but does not specify a list of interfaces as is normally required. Per EJB3 rules, if the bean implements exactly one business interface it may use @Remote with no other values and that business interface is then implied to be a remote business interface. The same rule applies to identical usage of @Local.

The critical thing to know is that if you add another interface the rules change and require that you specify both interfaces in the @Remote annotation as in @Remote({Telephone.class, SecondInterface.class}).

Embedding

We're going to embed OpenEJB3 into a plain JUnit TestCase as a simple means of demonstrating the remote capabilities. We'll do the embedding in our test setUp method, then will make two test methods:

  • one for invoking the bean's remote interface via the LocalInitialContextFactory which goes straight against the embedded container system
  • one for invoking the bean's remote interface via the RemoteInitialContextFactory which connects to a Socket and communicates to the embedded container system over the ejbd protocol.

setUp

Error formatting macro: snippet: java.lang.NullPointerException

LocalInitialContextFactory: making in-vm calls to a remote business interface

Error formatting macro: snippet: java.lang.NullPointerException

RemoteInitialContextFactory: making networked calls to a remote business interface

This is the part you would want to do in apps that are running a different VM than the one in which the ejb container is embedded. These "client" VMs need only have the the openejb-client jar in their classpath and connect to OpenEJB via the RemoteInitialContextFactory like any other remote EJB client.

Error formatting macro: snippet: java.lang.NullPointerException

Maven setup

Error formatting macro: snippet: java.lang.NullPointerException
Error formatting macro: snippet: java.lang.NullPointerException

Running

Running the example is fairly simple, just run:

$ cd telephone-stateful
$ mvn clean install

Which should create output like the following.

[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------------
[INFO] Building OpenEJB :: Examples :: Telephone Stateful Pojo
[INFO]    task-segment: [clean, install]
[INFO] ----------------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] Deleting directory /Users/dblevins/work/openejb3/examples/telephone-stateful/target
[INFO] Deleting directory /Users/dblevins/work/openejb3/examples/telephone-stateful/target/classes
[INFO] Deleting directory /Users/dblevins/work/openejb3/examples/telephone-stateful/target/test-classes
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
Compiling 2 source files to /Users/dblevins/work/openejb3/examples/telephone-stateful/target/classes
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
Compiling 1 source file to /Users/dblevins/work/openejb3/examples/telephone-stateful/target/test-classes
[INFO] [surefire:test]
[INFO] Surefire report directory: /Users/dblevins/work/openejb3/examples/telephone-stateful/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.apache.openejb.examples.telephone.TelephoneTest
log4j:WARN No appenders could be found for logger (OpenEJB).
log4j:WARN Please initialize the log4j system properly.
Apache OpenEJB 3.0-incubating-SNAPSHOT    build: 20061228-01:59
http://incubator.apache.org/openejb
23:04:38,699 INFO  [startup] Found EjbModule in classpath: /Users/dblevins/work/openejb3/examples/telephone-stateful/target/classes
23:04:39,625 WARN  [startup] No ejb-jar.xml found assuming annotated beans present: module: /Users/dblevins/work/openejb3/examples/telephone-stateful/target/classes
23:04:39,658 WARN  [OpenEJB] Auto-deploying ejb TelephoneBean: EjbDeployment(deployment-id=TelephoneBean, container-id=Default Stateful Container)
23:04:39,659 WARN  [OpenEJB] Auto-creating a container for bean TelephoneBean: Container(type=STATEFUL, id=Default Stateful Container)
23:04:39,678 INFO  [startup] Loaded Module: /Users/dblevins/work/openejb3/examples/telephone-stateful/target/classes
23:04:40,140 INFO  [startup] OpenEJB ready.
OpenEJB ready.
  ** Starting Services **
  NAME                 IP              PORT  
  ejbd                 0.0.0.0         4201  
  admin thread         0.0.0.0         4200  
-------
Ready!
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.899 sec

Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar]
[INFO] Building jar: /Users/dblevins/work/openejb3/examples/telephone-stateful/target/telephone-stateful-1.0-SNAPSHOT.jar
[INFO] [install:install]
[INFO] Installing /Users/dblevins/work/openejb3/examples/telephone-stateful/target/telephone-stateful-1.0-SNAPSHOT.jar to /Users/dblevins/.m2/repository/org/apache/openejb/telephone-stateful/1.0-SNAPSHOT/telephone-stateful-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11 seconds
[INFO] Finished at: Thu Dec 28 23:04:41 PST 2006
[INFO] Final Memory: 19M/254M
[INFO] ------------------------------------------------------------------------
  • No labels