Inject EJB 2.1 Entity Home into EJB 3.0 session beans using
benwalker_vf Mar 5, 2008 12:24 PMHi,
Has anyone been able to inject a 2.1 entity bean home into 3.0 session bean using the @EJB annotation in jboss-5.0.0.Beta4?
I have tried the following (fairly sure it should work according to EJB3 spec)
Session Fragment: -
@Stateless(name="ExampleService") @Local(ExampleService.class) @Remote(ExampleServiceRemote.class) @TransactionAttribute(REQUIRED) public class ExampleServiceBean implements ExampleService,ExampleServiceRemote,Serializable { private static final long serialVersionUID = -7533521006618484580L; @EJB private Example21EntityHome example21EntityHome; private static Logger logger = Logger.getLogger(ExampleServiceBean.class); /** * Does what ever you tell it too * @param whatToDo request text * @return string response text */ public String doSomething(String whatToDo) { String doing = "doing " + whatToDo; try { example21EntityHome.create(doing); } catch (CreateException e) { logger.error("Unable to create 2.1 entity bean",e); } logger.info(doing); return doing; } }
Entity Fragment : -
public abstract class Example21EntityBean extends EntityAdapter implements Serializable { public abstract Integer getPk(); public abstract void setPk(Integer pk); public abstract String getData(); public abstract void setData(String data); public Integer ejbCreate(String data) throws CreateException { // dummy, pk set by auto-generated-pk setPk(0); setData(data); return null; } public void ejbPostCreate(String data) { // empty implementation } }
2.1 Entity Bean Deployment Descriptor
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <display-name>Example 21 Legacy</display-name> <enterprise-beans> <entity> <ejb-name>Example21Entity</ejb-name> <local-home>com.entitybean21.Example21EntityHome</local-home> <local>com.entitybean21.Example21Entity</local> <ejb-class>com.entitybean21.Example21EntityBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Integer</prim-key-class> <reentrant>false</reentrant> <abstract-schema-name>Example21Entity</abstract-schema-name> <cmp-field> <description>This is the PK</description> <field-name>pk</field-name> </cmp-field> <cmp-field> <field-name>data</field-name> </cmp-field> <primkey-field>pk</primkey-field> </entity> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>Example21Entity</ejb-name> <method-name>create</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>Example21Entity</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Supports</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
However, on deployment I get the following stack trace: -
17:13:58,517 ERROR [ProfileServiceBootstrap] Failed to load profile: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS): *** CONTEXTS MISSING DEPENDENCIES: Name -> Dependency{Required State:Actual State} jboss.j2ee:ear=example.ear,jar=example-ejb.jar,name=ExampleService,service=EJB3 -> <UNKNOWN>{Described:** UNRESOLVED Demands 'Class:com.entitybean21.Example21EntityHome **} -> <UNKNOWN>{Described:** UNRESOLVED Demands 'jboss.ejb:service=EJBTimerService **} *** CONTEXTS IN ERROR: Name -> Error <UNKNOWN> -> ** UNRESOLVED Demands 'jboss.ejb:service=EJBTimerService **
NB Packaged as two ejb jar files in the same ear to get around issue posted @ http://www.jboss.org/?module=bb&op=viewtopic&t=103268
Has anyone tried to do something similar? Is this supported functionality?
Thanks
Ben