我正在用javaEE構建一個REST API。我使用TomEE作爲應用程序服務器。我有一個Singleton
JPA DAO來處理Postgres數據庫和Stateless
服務,以提供方法給我的RESTfull類,它有GET
,POST
和DELETE
方法。到現在爲止,我使用rest assured來測試我的網址路線。一切工作正常,但我想強調我的系統,所以我這樣做:如何正確處理併發?
Runnable r1 =() -> {
for (int i = 0; i < 10; i++) {
RegisterAndLogService service = new RegisterAndLogService();
//lots of service calls
}
};
Runnable r2 =() -> {
for (int i = 0; i < 10; i++) {
RegisterAndLogService service2 = new RegisterAndLogService();
//lots of service calls
}
};
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
但是,當我的一個線程第二次迭代將開始,我得到這個:
java.lang.IllegalStateException: Transaction already active
哪有我一直在等待當前的交易完成,並且正確地處理它們,並將它們堆積起來? EJB/JPA能以某種方式參與進來嗎?進入保存請求並儘快處理它們?
謝謝你的回答。我相信我的案例是第一個(嘗試使用具有多個線程的單個JPA事務管理器)。有沒有任何設計模式可以讓你保持單一的jpa事務管理器,同時有很多無狀態bean的實例被請求? – GabrielRado