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

Compare with Current View Page History

« Previous Version 13 Next »

Overview

Error formatting macro: snippet: java.lang.NullPointerException

If your goal is simply to unit test beans with remote interfaces, this is not the right example for you. The LocalInitialContextFactory completely supports remote interfaces and all spec required pass-by-value (serialization) semantics without the need for network sockets. This example shows the use of OpenEJB in an embedded environment where connection outside the
vm is required.

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.

[OPENEJB:INFO] Scanning for projects...
[OPENEJB:INFO] ----------------------------------------------------------------------------
[OPENEJB:INFO] Building OpenEJB :: Examples :: Telephone Stateful Pojo
[OPENEJB:INFO]    task-segment: [OPENEJB:clean, install]
[OPENEJB:INFO] ----------------------------------------------------------------------------
[OPENEJB:INFO] [clean:clean]
[OPENEJB:INFO] Deleting directory /Users/dblevins/work/openejb3/examples/telephone-stateful/target
[OPENEJB:INFO] Deleting directory /Users/dblevins/work/openejb3/examples/telephone-stateful/target/classes
[OPENEJB:INFO] Deleting directory /Users/dblevins/work/openejb3/examples/telephone-stateful/target/test-classes
[OPENEJB:INFO] [resources:resources]
[OPENEJB:INFO] Using default encoding to copy filtered resources.
[OPENEJB:INFO] [compiler:compile]
Compiling 2 source files to /Users/dblevins/work/openejb3/examples/telephone-stateful/target/classes
[OPENEJB:INFO] [resources:testResources]
[OPENEJB:INFO] Using default encoding to copy filtered resources.
[OPENEJB:INFO] [compiler:testCompile]
Compiling 1 source file to /Users/dblevins/work/openejb3/examples/telephone-stateful/target/test-classes
[OPENEJB:INFO] [surefire:test]
[OPENEJB: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
23:04:39,658 WARN  [OPENEJB:OpenEJB] Auto-deploying ejb TelephoneBean: EjbDeployment(deployment-id=TelephoneBean, container-id=Default Stateful Container)
23:04:39,659 WARN  [OPENEJB: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

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