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

{snippet:id=code|url=openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonImpl.java|lang=java}

EJB 2.1 Home And Remote views

{snippet:id=code|url=openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonEjbHome.java|lang=java} {snippet:id=code|url=openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonEjbObject.java|lang=java}

Test Case

{snippet:id=remotehome|url=openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java|lang=java}

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