2013-01-16 57 views
0

我已經將我的公共類(域對象,實用程序和JPA2 - 持久性服務)打包到一個jar中。我將這個jar包裝到我的libs中,用於其他兩個應用程序,併爲每個應用程序獨立配置持久性單元和實體管理器。這兩個應用程序都在同一個tomcat上作爲servlet進行部署。但是,如果一個應用程序操縱MySQL-DB的數據,另一個應用程序不會使用更新的數據。實體管理器可以由兩個servlet共享嗎?

如何使用集中式持久性服務並允許所有應用程序訪問最新數據?我必須使用JNDI還是將所有東西都打包成EAR而不是單個WAR?

+0

您需要爲JPA共享L2緩存。這個問題與servlet無關。 – BalusC

+0

提到servlet只是爲了描述一個特定的用例。 – Franatique

+0

好的。僅僅指出這不能/不應該使用Servlet API工具來解決。 – BalusC

回答

0

這與使用2個不同的JPA應用程序碰到相同的數據庫類似。在這種情況下,每個應用程序使用自己的二級高速緩存將加劇該問題。如評論中所述,您可以讓應用程序同步他們的L2緩存。或者您可以評估EntityManager的使用情況,並確保它們不會持續很長時間,或者偶爾會被清除。只有在需要時才能獲得EM,並在完成此過程時關閉或清除它。如果不使用L2緩存,這將確保根據需要更多地根據事務操作從數據庫讀入數據。

即使在單個應用程序使用情況下也會出現過時的數據,因此強烈建議使用樂觀鎖定以避免用陳舊數據覆蓋。

相關問題