1

既に公開されているデプロイ済みアプリを使用してアプリケーション サーバーを初めて起動すると、特定のモジュールで宣言された永続性ユニットを注入しようとすると、それを宣言する Bean が初めて呼び出されたときに失敗します。アプリケーションを再起動することで問題を解決できますが、これは再公開するたびに一貫して発生します。

私は WebSphere v8.0.4.2 を使用しており、Rational Application Developer v8 を使用して開発しています (ただし、それは関係ないと思います)。

注:にはABCBeanが含まれ、EntityManagerに存在しますABC.jarOTHERMODULE.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;
    ...

}
4

1 に答える 1