シンプルなJEEアプリケーションを開発し、@ localインターフェイスの実装を選択するためにtryngしています。 私は、インターフェイス階層を持っています:ParentLocal
、ChildALocal
、ChildBLocal
と対応する実装:ChildABean
,ChildBBean
。注釈を使用してChildALocal/ChildBLocal
の実装ParentLocal
を選択できます。 ejb-jar.xmlを使って同じことをするにはどうすればいいですか?
ParentLocal.java親インターフェイスでEJBを挿入する方法は?
@Local
public interface ParentLocal {
public String getName();
}
ChildALocal.java
@Local
public interface ChildALocal extends ParentLocal {
}
ChildBLocal.java
@Local
public interface ChildBLocal extends ParentLocal {
}
ChildABean.java
@Stateless
public class ChildABean implements ChildALocal {
@Override
public String getName() {
return "ChildA";
}
}
ChildBBean.java
@Stateless
public class ChildBBean implements ChildBLocal {
@Override
public String getName() {
return "ChildB";
}
}
ManagerBean.java
@Stateless
public class ManagerBean implements ManagerLocal {
/**works fine, servlet prints "ChildA", so I would like to get the same result using DD
@EJB(beanInterface = my.package.model.ChildALocal.class)
ParentLocal annotatedChildBean;*/
/**doesn`t work!*/
@EJB
ParentLocal childBeanUsingDeploymentDesrciptor;
//....
}
リソース/ META-INF/EJB-jar.xmlの
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar>
<description>IBM WAS test application </description>
<display-name>Test Manager</display-name>
<enterprise-beans>
<session>
<ejb-local-ref>
<ejb-ref-name>my.package.manager.ManagerBean/childBeanUsingDeploymentDesrciptor</ejb-ref-name>
<local>my.package.model.ParentLocal</local>
//doesn`t work
<!--<local>my.package.model.ChildBLocal</local>-->
//doesn`t work
<ejb-link>ChildBBean</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
</ejb-jar>
の
リソース/ META-INF/IBM-EJB-JAR-bnd.xml WebServletで
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
<session name="ManagerBean">
//doesn`t work
<ejb-ref name="my.package.manager.ManagerBean/childBeanUsingDeploymentDesrciptor" binding-name="ejb/session/ChildBBean"/>
</session>
</ejb-jar-bnd>
私はManagerBeanを注入し、MainServlet
インナーBean名を印刷するにはそれ `sメソッドを呼び出します。 java
私のすべての子の実装は、私が耳に入れた別々のモジュールです。私は、サーブレットを起動しようとすると IBM WebSpehere 8.5.5は私に次のエラーが表示されます。
Error 500: javax.ejb.EJBException: The EJB reference in the war-main-servlet.war module of
the earManager application could not be resolved; nested exception is:
com.ibm.ejs.container.EJBNotFoundException: EJB with interface my.package.model.ChildBLocal
not present in application earManager.
UPD
beanInterface
でejb-jar.xmlで重複しない方法
Error 500: javax.ejb.EJBException: The EJB reference in the war-main-servlet.war module of
the earManager application could not be resolved; nested exception is:
com.ibm.ejs.container.EJBNotFoundException: EJB with interface my.package.model.ParentLocal
not present in application earManager.
または(および)ibm-ejb-jar-bnd.xml?
エラーを修正しました。私は、ParentLocalの代わりにChildBLocalインターフェイスを指摘しました。何も変わっていない。とにかく、私は、IBM-EJB-JAR-bnd.xml取り出して、今、私のejb-jar.xmlのは、次のとおりです。 '' <エンタープライズビーン> ManagerBean の の my.package.manager.ManagerBean/childBeanUsingDeploymentDesrciptor EJB-REF-名> my.package.model.ChildBLocal my.package.children.ChildBBean EJB-ローカル-REF > '' エラーがまだあります –
' 'が正しくない場合は、クラスではなくEJB名にする必要があります。同じエラーを ''および/または ''の –
Tracy
は、私はどちらかそれを試してみました、ありがとう 'ですBeanはサーブレットと同じEARにあります。このようにパッケージされていない可能性はありますか?また、Beanが起動していることを確認する必要があります。ログに次のようなメッセージがあるはずです。 CNTR0167I:サーバーがChildBBean Enterprise BeanのChildBLocalインターフェイスをxyxアプリケーションのabc.jarモジュールにバインドしています。バインディングの場所は次のとおりです。java:global/xyz/abc/ChildBBean!ChildBLocal –