1

コンストラクターでJPAにアクセスするBeanがあります。たとえば、データベースからキャッシュをプリロードします。

アプリケーションが起動すると、私は受け取ります

Caused by: java.lang.IllegalStateException: Unable to create Guice injector

Guiceインジェクションの原因でアプリケーションの起動に失敗する

1) Error injecting constructor, play.exceptions.JPAException: The JPA context is not initialized.
 JPA Entity Manager automatically start when one or more classes annotated with the @javax.persistence.Entity annotation are found in the application.

この問題の根本的な原因は、GuiceがJPAエンティティマネージャーを再生する前に私のBeanのインスタンスを作成していることです。残りのJPAコードは正常に機能します。BeanのコンストラクターでJPA呼び出しにコメントすると、それも正常に機能します。

次のコードスニペットを使用して、Beanを構成します。

public class MainGuiceModule extends AbstractModule {
    @Override
    protected void configure() {
             bind(UserManager.class).to(UserManagerImpl.class).in(Singleton.class);
              ...
        }
}

問題は、Play!を使用してコンストラクターからJPAにアクセスする方法です。とGuice?

4

1 に答える 1

3

最後に、この例外を回避する方法を見つけました。インジェコールの作成を次のようにラップする必要があります。

play.Play.plugin(JPAPlugin.class).startTx(true);

play.Play.plugin(JPAPlugin.class).closeTx(false);

よりエレガントな解決策で答えを受け入れます

于 2012-12-31T17:46:03.807 に答える