| Title: EJB 2.1 Compatibility Example |
| <a name="EJB2.1CompatibilityExample-Overview"></a> |
| # 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._ |
| |
| <a name="EJB2.1CompatibilityExample-TheCode"></a> |
| # The Code |
| |
| <a name="EJB2.1CompatibilityExample-AnnotatedBeanClass"></a> |
| ## Annotated Bean Class |
| |
| {snippet:id=code|url=openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonImpl.java|lang=java} |
| |
| <a name="EJB2.1CompatibilityExample-EJB2.1HomeAndRemoteviews"></a> |
| ## 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} |
| |
| <a name="EJB2.1CompatibilityExample-TestCase"></a> |
| # Test Case |
| |
| {snippet:id=code|url=openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java|lang=java|id=remotehome} |
| |
| <a name="EJB2.1CompatibilityExample-Runningit"></a> |
| # 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 |
| |
| |