2012-12-25 51 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功能包,可以帮助你。