Title: EJB 2.1 Compatibility Example
# 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](openejb:download.html)
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=code|url=openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java|lang=java|id=remotehome}
# Running it
Running the example is fairly simple. In the "component-interfaces"
directory of the [examples zip](openejb:download.html)
, 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