既に公開されているデプロイ済みアプリを使用してアプリケーション サーバーを初めて起動すると、特定のモジュールで宣言された永続性ユニットを注入しようとすると、それを宣言する Bean が初めて呼び出されたときに失敗します。アプリケーションを再起動することで問題を解決できますが、これは再公開するたびに一貫して発生します。
私は WebSphere v8.0.4.2 を使用しており、Rational Application Developer v8 を使用して開発しています (ただし、それは関係ないと思います)。
注:にはABCBean
が含まれ、EntityManager
に存在しますABC.jar
。OTHERMODULE.jar
は、例外が関連するコードです。モジュールは 1 つの EAR ファイルの一部です。
それで:
ABC
\__ ABCBean
\__ META-INF/persistence.xml
OTHERMODULE
\__ beans that call above bean and cannot resolve persistence unit.
永続化 Bean を呼び出すときに発生する例外は次のとおりです。
javax.ejb.EJBTransactionRolledbackException: nested exception is: javax.ejb.EJBException: The ABCBean/em reference of type javax.persistence.EntityManager for the ABCBean component in the XYZ.jar module of the MYAPP application cannot be resolved.
javax.ejb.EJBException: The ABCBean/em reference of type javax.persistence.EntityManager for the ABCBean component in the OTHERMODULE.jar module of the MYAPP application cannot be resolved.
at com.ibm.wsspi.injectionengine.InjectionBinding.getInjectionObject(InjectionBinding.java:1100)
at com.ibm.wsspi.injectionengine.InjectionBinding.getInjectableObject(InjectionBinding.java:1013)
at com.ibm.wsspi.injectionengine.InjectionTarget.inject(InjectionTarget.java:198)
at com.ibm.ws.injectionengine.AbstractInjectionEngine.inject(AbstractInjectionEngine.java:947)
at com.ibm.ejs.container.StatelessBeanO.initialize(StatelessBeanO.java:300)
at com.ibm.ejs.container.BeanOFactory.create(BeanOFactory.java:147)...
ここに私のpersistence.xmlがあります:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" ...>
<persistence-unit name="ABC_EJB">
<jta-data-source>jdbc/***</jta-data-source>
...
</persistence-unit>
</persistence>
そして、例外のクラス:
@Stateless
@LocalBean
public class ABCBean {
...
@PersistenceContext(unitName = "ABC_EJB")
private EntityManager em;
...
}