2012-05-30 79 views
1

我正在使用Spring-AMQP監視Play應用程序中的RabbitMQ消息隊列。Play Framework:爲Spring RabbitMQ監聽器手動打開JPA上下文

問題是我無法從偵聽器代碼訪問數據庫,因爲JPA上下文在此範圍內未打開。

我知道Play Framework管理JPA上下文,以便它在處理HTTP請求時處於打開狀態,但有沒有辦法從外部控制器/作業使用JPA?

回答

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); 
    } 
}