2014-07-17 89 views
3

我有一個現有的客戶端服務器項目,它使用普通JDBC與單個MySQL實例進行通信。現在我想擴展它來支持使用任何JPA實現的多個(分片)MySQL實例,並且支持支持XA事務的JTA實現。如何將JPA和JTA與事務管理器一起使用?

我的問題是我應該如何繼續?經過幾個小時的谷歌搜索,我明白我可能無法使用沒有任何應用服務器容器的JTA實現,這是真的嗎?

爲了我的目的,如果可以使用任何ORM層抽象應用程序邏輯 - JPA實現(如EclipseLink分區或OpenJPA Slice),然後使用事務管理器(如BTM)執行提供的XA事務ACID保證了底層的MySQL實例。

到目前爲止,我嘗試了YouTube上的視頻教程(https://www.youtube.com/watch?v=Vmr6GAlbG10),嘗試使用EclipseLink和單個數據庫實例。現在我打算將它擴展到多個實例,但不知道如何。

任何類型的建議,鏈接和指導將是非常有益的。我對此很陌生,因此如果我誤解了任何內容,請接受任何不便。謝謝。

回答

0

也可以在Spring應用程序的上下文中使用JTA。您可以在沒有任何框架的情況下將其用於您自己的應用程序的上下文中,但它非常複雜,因爲您必須控制注入的內容以及被調用方法的返回方式(使用異常或無)。但是,當然,這實際上取決於您想從JTA中使用什麼:事務傳播或僅在同一個JTA事務中使用不同的數據庫。

所以,我的建議是使用Spring,如果你不想使用應用程序容器(Java EE)。

+0

您能提供一些關於您的建議的更多細節,例如:一個教程或例子? –

+0

我的建議與春季?只需在因特網上搜索「spring jta」,就會發現很多例子。例如,查看[JTA上的Spring文章](http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/)。 –

+0

@Geziefer,因爲你已經有了Java EE的經驗:你只需配置事務管理器,並告訴你的EntityManagers他們是JTA(而不是資源本地),並且他們每一個被Spring注入的地方都會自動加入JTA交易。註釋與Java EE中的註釋非常相似,但只有事務傳播的註釋纔不同。(也許你必須使用'@ Transactional'註釋公共方法,與EJB相比,這是默認的) –

1

您可以使用獨立的JTA事務管理器像Atomikos公司http://www.atomikos.com/或SimpleJTA http://simplejta.sourceforge.net/ 完全不在任何容器中。

更多獨立的JTA經理: What is a good open source Java SE JTA TransactionManager implementation?

也有可能使用流行的JPA實現與具有獨立的JTA(你問)組合的獨立。這裏是Atomikos和休眠的示例 http://www.atomikos.com/Documentation/HibernateThreeStandalone

但是,這不是使用這種技術的好方法,而且您有任何機會和時間 - 移動到具有應用程序服務器的普通三層架構。

+0

@jmkam:我不知道OP,但我認爲這個答案值得賞賜,尤其是在獨立環境中使用Hibernate + JTA的例子,這個例子也可以在Java EE中使用。同樣感謝Andrei的回答,但是因爲它專注於Spring並且OP沒有在標籤或問題中使用它,所以我會選擇這個。 –

相關問題