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

Compare with Current View Page History

« Previous Version 10 Next »

Overview

In EJB 3.0, your bean's interfaces are not required to extend any specific set of interfaces and generally have no requirements on them at all. These are referred to in EJB spec lingo as Business Interfaces.

In EJB 2.1 and prior, however, there were some pretty strict requirements on interfaces. Namely, you had to have a "home" interface that extended javax.ejb.EJBHome or javax.ejb.EJBLocalHome. This interface served as a sort of factory to create your bean's interface which itself had to extend either javax.ejb.EJBObject or javax.ejb.EJBLocalObject. These legacy styles of interfaces in EJB spec lingo are referred to as Component Interfaces.

In this example we see how one can support both business interfaces and component interfaces on the same bean. You may choose to do this for backwards compatibility with older clients or to maintain an older EJB 2.x API still being used. The advantage is that you can turn EJB 2.1 beans into EJB 3.0 beans without having to update any code consuming that EJB.

The source for this example is in the "component-interfaces" directory located in the openejb-examples.zip available on the download page.

The Code

Annotated Bean Class

Error formatting macro: snippet: java.lang.NullPointerException

EJB 2.1 Home And Remote views

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

Test Case

Error formatting macro: snippet: java.lang.NullPointerException

Running it

Running the example is fairly simple. In the "component-interfaces" directory of the examples zip, just run:

$ mvn clean install

Which should create output like the following.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.FriendlyPersonTest
Apache OpenEJB 3.0    build: 20080408-04:13
http://openejb.apache.org/
INFO - openejb.home = /Users/dblevins/work/openejb-3.0/examples/component-interfaces
INFO - openejb.base = /Users/dblevins/work/openejb-3.0/examples/component-interfaces
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Configuring Service(id=Default JDK 1.3 ProxyFactory, type=ProxyFactory, provider-id=Default JDK 1.3 ProxyFactory)
INFO - Found EjbModule in classpath: /Users/dblevins/work/openejb-3.0/examples/component-interfaces/target/classes
INFO - Configuring app: /Users/dblevins/work/openejb-3.0/examples/component-interfaces/target/classes
INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
INFO - Auto-creating a container for bean FriendlyPerson: Container(type=STATEFUL, id=Default Stateful Container)
INFO - Loaded Module: /Users/dblevins/work/openejb-3.0/examples/component-interfaces/target/classes
INFO - Assembling app: /Users/dblevins/work/openejb-3.0/examples/component-interfaces/target/classes
INFO - Jndi(name=FriendlyPersonRemoteHome) --> Ejb(deployment-id=FriendlyPerson)
INFO - Jndi(name=FriendlyPersonLocalHome) --> Ejb(deployment-id=FriendlyPerson)
INFO - Jndi(name=FriendlyPersonLocal) --> Ejb(deployment-id=FriendlyPerson)
INFO - Jndi(name=FriendlyPersonRemote) --> Ejb(deployment-id=FriendlyPerson)
INFO - Created Ejb(deployment-id=FriendlyPerson, ejb-name=FriendlyPerson, container=Default Stateful Container)
INFO - Deployed Application(path=/Users/dblevins/work/openejb-3.0/examples/component-interfaces/target/classes)
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.741 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
  • No labels