Spring-AMQP を使用して、Play アプリケーションで RabbitMQ メッセージ キューを監視しています。
問題は、JPA コンテキストがこのスコープで開かれていないため、リスナー コードからデータベースにアクセスできないことです。
Play フレームワークが JPA コンテキストを管理して、HTTP リクエストを処理するときにそれが開かれることは理解していますが、Play コントローラー/ジョブの外部から JPA を使用する方法はありますか?
Spring-AMQP を使用して、Play アプリケーションで RabbitMQ メッセージ キューを監視しています。
問題は、JPA コンテキストがこのスコープで開かれていないため、リスナー コードからデータベースにアクセスできないことです。
Play フレームワークが JPA コンテキストを管理して、HTTP リクエストを処理するときにそれが開かれることは理解していますが、Play コントローラー/ジョブの外部から JPA を使用する方法はありますか?
答えは 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);
}
}