1

Spring-AMQP を使用して、Play アプリケーションで RabbitMQ メッセージ キューを監視しています。

問題は、JPA コンテキストがこのスコープで開かれていないため、リスナー コードからデータベースにアクセスできないことです。

Play フレームワークが JPA コンテキストを管理して、HTTP リクエストを処理するときにそれが開かれることは理解していますが、Play コントローラー/ジョブの外部から JPA を使用する方法はありますか?

4

1 に答える 1

3

答えは JPAPlugin を使用することでした。

リスナーメソッドの例:

public void process(Message message) {
    JPAPlugin.startTx(false);
    boolean rollBack = false;
    try {
        // work with your models
        JPA.em().flush();
    } catch (RuntimeException e) {
        rollBack = true;
        // throw exception to prevent msg ACK, need to refine error handling :)
        throw e;
    } finally {
        JPAPlugin.closeTx(rollBack);
    }
}
于 2012-05-30T00:41:44.267 に答える