| Title: EJB Refs |
| <a name="EJBRefs-Referencingabeaninanotherjar(withannotations)"></a> |
| ## Referencing a bean in another jar (with annotations) |
| |
| When using annotations to reference a bean from another ejb in your ear you |
| have to supplement the @EJB reference with a small chunk of xml in the |
| ejb-jar.xml of the referring bean. |
| |
| So in ejb app A colorsApp.jar you have this bean: |
| |
| |
| package com.foo.colors; |
| |
| import javax.ejb.Stateless; |
| |
| @Stateless |
| public class OrangeBean implements OrangeRemote { |
| } |
| |
| |
| Then in ejb app B shapesApp.jar you have this bean with a reference to |
| OrangeRemote: |
| |
| |
| package com.foo.shapes; |
| |
| import javax.ejb.Stateless; |
| import com.foo.colors.OrangeRemote; |
| |
| @Stateless |
| public class SquareBean implements SquareRemote { |
| @EJB OrangeRemote orangeRemote; |
| } |
| |
| |
| To hook this reference up you need to override this ref and add more info |
| in the ejb-jar.xml of shapesApp.jar as follows: |
| |
| |
| <ejb-jar> |
| <enterprise-beans> |
| |
| <session> |
| <ejb-name>SquareBean</ejb-name> |
| <ejb-ref> |
| <ejb-ref-name>com.foo.shapes.SquareBean/orangeRemote</ejb-ref-name> |
| <ejb-link>colorsApp.jar#OrangeBean</ejb-link> |
| </ejb-ref> |
| </session> |
| |
| </enterprise-beans> |
| </ejb-jar> |
| |
| |
| <a name="EJBRefs-Referencingabeaninanotherjar(xmlonly,noannotations)"></a> |
| ## Referencing a bean in another jar (xml only, no annotations) |
| |
| The same basic approach applies and dependency injection is still possible, |
| however more information must be described in the xml. |
| |
| |
| In ejb app A colorsApp.jar you have this bean: |
| |
| |
| package com.foo.colors; |
| |
| import javax.ejb.Stateless; |
| |
| @Stateless |
| public class OrangeBean implements OrangeRemote { |
| } |
| |
| |
| Then in ejb app B shapesApp.jar -- note there is no @EJB annotation: |
| |
| |
| package com.foo.shapes; |
| |
| import javax.ejb.Stateless; |
| import com.foo.colors.OrangeRemote; |
| |
| @Stateless |
| public class SquareBean implements SquareRemote { |
| OrangeRemote orangeRemote; |
| } |
| |
| |
| Here's how you would hook this reference up, injection and all, with just |
| xml. The following would be added to the ejb-jar.xml of shapesApp.jar: |
| |
| |
| <ejb-jar> |
| <enterprise-beans> |
| |
| <session> |
| <ejb-name>SquareBean</ejb-name> |
| <ejb-ref> |
| <ejb-ref-name>com.foo.shapes.SquareBean/orangeRemote</ejb-ref-name> |
| <ejb-ref-type>Session</ejb-ref-type> |
| <remote>com.foo.colors.OrangeRemote</remote> |
| <ejb-link>colorsApp.jar#OrangeBean</ejb-link> |
| <injection-target> |
| |
| <injection-target-class>com.foo.shapes.SquareBean</injection-target-class> |
| <injection-target-name>orangeRemote</injection-target-name> |
| </injection-target> |
| </ejb-ref> |
| </session> |
| |
| </enterprise-beans> |
| </ejb-jar> |
| |
| |
| Note that the value of <ejb-ref-name> could actually be anything and the |
| above example would still work as there is no annotation that needs to |
| match the <ejb-ref-name> and no one will likely be looking up the EJB as |
| it's injected. |