2011-04-20 66 views
2

我一直在做Java標準版的開發,而且框架和解決方案對我來說相當明顯(Swing for GUI等)。我最近開始根據自己的需要開發一個服務器,並託管一個網頁(服務器除了託管一個網頁外,還包括個人SVN託管以及將更多網絡功能集成到現有和未來的應用程序中)。對於只有一臺計算機進行編碼(即分佈式計算等實際上並不值得關注) - 我並不完全確定Spring,Hibernate和EJB之間的關係,並且對於每個計算機的功能都不太瞭解。信息將不勝感激。我知道Spring是EJB的替代品,Hibernate是一個對象關係映射庫,EJB是如何結合的呢?EJB,spring&hibernate

+1

你看過http://stackoverflow.com/questions/4281304/what-is-the-difference-between-ejb-hibernate-spring-and-jsf? @A Lee發佈的鏈接上的+1, – 2011-04-20 05:18:44

+0

+1。 – hooknc 2011-04-20 05:23:01

回答

8

總結EJB3由3種bean類型組成;消息驅動Bean,無狀態/有狀態會話Bean和實體Bean或JPA(Java持久體系結構)。 Hibernate可以用作JPA提供程序,但不必這樣使用。

Spring的功能與消息驅動Bean和無狀態/有狀態會話Bean大致相似,但它沒有與JPA等效的功能。相反,它允許您直接使用JPA或hibernate,但如果將Spring和JPA結合使用,則需要一個EJB容器。

另一個區別是EJB由'containers'提供,而spring是一個可以部署到java se應用程序或java servlet容器web應用程序(如jetty或tomcat)的框架。它是一個重要的區別。 Tomcat不是EJB容器,只是一個servlet容器,因此如果只使用基本的tomcat,則不能使用EJB,但可以通過在Web應用程序中包含所需的彈簧jar文件來使用spring(WEB-INF/lib )。在這種情況下,你不會使用JPA,但你可以使用休眠。一些Java容器服務器,包括weblogic,websphere,jboss,geronimo和glassfish。如果將Tomcat與OpenEJB結合使用,Tomcat可以成爲EJB容器。

在我目前正在開發的應用程序中,我使用的是tomcat + openejb,所以我有一個EJB容器,所以我可以使用JPA和OpenJPA作爲持久性提供程序。我正在使用Spring MVC進行Web應用程序開發,並且很可能會使用Spring安全以及跟蹤。我可能也會使用無狀態會話EJB封裝業務功能,但我也可以輕鬆使用Spring服務/ dao bean而不是無狀態會話ejbs。

它有時會弄清楚你應該使用哪個框架或容器的哪些部分,並且真正歸結爲偏好還是使用其他部分中不存在的功能或易用性。另一個考慮是內存利用率。一些ejb容器消耗大量內存,只是在沒有應用程序運行的情況下啓動。這是我最終使用tomcat + openejb的原因之一。希望這可以幫助。

+0

非常好,簡單的解釋 – Xorty 2011-04-20 06:57:46