2012-12-25 92 views
2

我有Websphere 7服務器,它不支持JPA 2.0。所以我無法運行WAS 7 JPA 2.0應用程序。沒有Java EE的休眠6

但我不知道春天的用戶運行的Hibernate如何在Tomcat或Jetty?這個servlet容器(如WAS 7)不支持Java EE 6.

所以這意味着我可以在WAS 7上運行Hibernate,其結果與Tomcat或Jetty相同?

如果是,有哪些應用程序使用的服務器的JPA的好處是什麼?爲什麼所有開發人員都不使用servlet容器來代替應用程序服務器?

我也聽說了「容器管理」的東西,它允許一些額外的特性和功能。所以這意味着許多開發者(在Jetty和Tomcat上使用Spring)沒有得到使用應用程序服務器的容器管理功能的好處?

P.S.我知道關於WAS 7的可用Feature Pack補丁以支持JPA 2.0,但問題與此無關。

+0

爲什麼不能在WAS 7中運行JPA2應用程序?您是否遇到與舊版Hibernate有關的命名或庫衝突? JPA本身並不要求你在一個容器中運行它,那麼遺留代碼發生的集成問題呢? – Perception

+0

@Per:WAS7是一個Java EE 5容器,隨JPA1提供。您不能完美地通過webapp提供的庫將其升級到JPA2。 – BalusC

+0

@MyTitle - 試試[this](http://forum.springsource.org/showthread.php?124644-JPA2-with-spring-data-deployed-on-Websphere-7-WITHOUT-Websphere-JPA2-feature-pack ) – Perception

回答

2

應用程序服務器提供了一組「開箱即用」的服務,所以它們更容易使用如果提供的服務是您需要的服務。你只是打包和部署你的應用程序,這個東西就可以工作而且,大多數技術都是由應用程序服務器實例化的,因此可以避免很多類加載器問題。

與應用程序服務器的問題是,有時(很多時候,其實),你需要挑選特定的框架,服務等符合這些應用程序服務器提供不兼容的特定版本。在這些情況下,您通常需要擺弄應用程序服務器,並且在某些情況下,您的應用程序服務器甚至可能無法執行您想做的事情。例如,Weblogic 10.x是一個Java EE 5應用程序服務器,因此它將默認提供JSF 1.2和JPA 1.如果您想使用更新的東西,則需要手動部署一些額外的庫(JSF 2.0 )或修補服務器(JPA 2.0)。

另一個例子:在Glassfish 3.1中,我還沒有能夠使用Glassfish EL的Tomcat EL intead。 Tomcat EL支持可變參數方法調用,而Glassfish EL則不支持。

那的Java EE應用服務器的剛性使得很多人喜歡爲一個獨立的servlet容器,如Tomcat或碼頭,在那裏你有什麼開箱但Servlet和JSP的API的開發,但您可以手動把一切都在裏面。您也可以將它與您的應用程序打包在一起,這對您開發時更加舒適,但如果您爲每個容器部署多個應用程序(資源浪費,分類加載問題,類加載程序泄漏......),則可能會給您帶來問題

UPDATE:

當相比於使用JPA在Java EE容器內的一些在一個SE環境中使用JPA(如Tomcat)的差異。基本上:

  • 您必須手動管理EntityManagerFactoryEntityManager實例。
  • Tomcat不做注射,所以@PersistenceContext註解和類似的不起作用。

請注意,某些容器(例如Spring)可以配置爲隱藏這些細節,因此您可以像在Java EE容器中一樣工作。

閱讀the JPA spec瞭解有關在SE環境而不是EE環境中運行的詳細信息。

關於另一個圖書館,一般來說你會發現一些細微的差異。例如,JAX-WS需要爲您的webapp註冊一個servlet和一個監聽器,但其他任何內容都應該是相同的。通常您可以搜索文檔以獲取有關如何在獨立的servlet容器內運行該東西的說明。

+0

謝謝,非常喜歡你的答案。所以我沒有區別在哪裏把JPA 2.0實現庫:到WAS7或Tomcat?我的意思是int在這種情況下,功能之間沒有區別,即我可以在Tomcat中使用JPA 2.0(Hibernate)執行的所有事情,以及可以使用WAS 7執行的_same_結果嗎? – MyTitle

5

您可以通過在WEB-INF/lib文件夾中包含適當的jar來引入很多功能,但是servlet容器無法以任何方式幫助您使用該功能,並且很可能不會很好地集成與容器實際提供的功能。一個典型的例子是帶來你自己的JSF 2.0庫。

容器使用實現真正的優點是,容器可然後在多個主機集羣幫助,提供JDBC連接池等

所以,你需要包括什麼時候要多加小心如休眠自己,然後在自己的部署中完成所有配置,但可以完成。

3

你也可以同樣問了完全相反的問題:「因爲它包含在所有的Java EE 6服務器爲什麼要用裸servlet容器與JPA 2?」。

基本上它歸結爲任一:

  • 具有重量輕的容器中,然後重應用(春方式),
  • 具有重量輕的應用程序,然後重容器(在Java EE 6方式)。

經過多年的發展,使用Spring和Java EE 6構建應用程序的模型已經趨於一致,有時通過查看某個類(無論是Spring還是CDI bean),您無法真正瞭解。所以真正的區別主要在配置上。

0

有一個WAS 7.0的JPA 2.0功能包,可以幫助你。