首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有Java 6的Hibernate

没有Java 6的Hibernate
EN

Stack Overflow用户
提问于 2012-12-25 12:50:48
回答 4查看 1.3K关注 0票数 2

我有Websphere 7服务器,它不支持JPA2.0。所以我不能在WAS 7 JPA2.0应用程序上运行。

但是我想知道Spring用户是如何在Tomcat或Jetty上运行Hibernate的?这个servlet容器(如7)也不支持Java 6。

这意味着我可以在WAS7上运行Hibernate,其结果与Tomcat或Jetty相同。

如果是,为JPA使用应用服务器有什么好处?为什么所有开发人员都不使用servlet容器而不是应用服务器?

我还听说过“容器管理”之类的东西,它允许一些额外的特性和功能。因此,这意味着许多开发人员(在Jetty和Tomcat上使用Spring )并不能从使用应用服务器的容器管理特性中获益?

我知道WAS 7支持JPA2.0的可用Feature Pack补丁,但问题不是它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-25 15:04:34

应用服务器提供了一组“开箱即用”的服务,因此,如果所提供的服务是您需要的服务,它们就更容易使用。您只需打包和部署您的应用程序,它就能工作了。此外,大多数技术都是由应用服务器实例化的,因此您避免了很多类加载器问题。

应用程序服务器的问题是,有时(实际上),您需要选择与应用服务器提供的特定版本不兼容的特定框架、服务等的特定版本。在这些情况下,您通常需要修改应用程序服务器,在某些情况下,您想要做的事情甚至可能无法在应用程序服务器上完成。

例如,Weblogic 10.x是一个Java 5应用服务器,因此默认情况下它将提供JSF 1.2和JPA 1。如果您想使用更新的东西,您需要手动部署一些附加库(JSF 2.0),或者修补服务器(JPA2.0)。

另一个例子:在Glassfish 3.1中,我无法使用Tomcat整数的Glassfish EL。Tomcat支持varargs方法调用,而Glassfish EL不支持。

Java应用程序服务器的僵化使许多人更喜欢为独立的servlet容器(如Tomcat或Jetty )开发,在这种容器中,除了Servlet和JSP之外,什么都没有,但是您可以手动将所有东西放入其中。您也可以将它与您的应用程序一起打包,这在开发时更舒适,但如果每个容器部署多个应用程序(浪费资源、类加载问题、类加载程序泄漏、.),则会出现问题。

更新:

与在Java容器中使用JPA相比,在SE环境(如Tomcat)中使用JPA有一些不同。基本上:

  • 您必须手动管理EntityManagerFactoryEntityManager实例。
  • Tomcat不执行注入,所以@PersistenceContext注释和类似的注释不起作用。

请注意,可以配置一些容器(如Spring)来隐藏这些细节,这样您就可以完全像在Java容器中一样工作。

有关在SE环境中运行而不是在EE环境中运行的详细信息,请参阅JPA规范

对于另一个库,通常您会发现一些细微的差异。例如,JAX需要为您的WS应用程序注册一个servlet和一个侦听器,但是其他任何东西都应该是相同的。通常,您可以在文档中搜索有关如何在独立servlet容器中运行该功能的说明。

票数 2
EN

Stack Overflow用户

发布于 2012-12-25 13:04:27

您可以通过在WEB/lib文件夹中包含适当的jars来引入许多功能,但是servlet容器无法以任何方式帮助您完成该功能,而且它很可能无法与容器实际提供的功能很好地集成。一个典型的例子是您自己的JSF2.0库。

在容器中使用实现的真正优点是,容器可以帮助跨多个主机进行集群,提供JDBC连接池等。

因此,在包含Hibernate时,您需要更加小心,并且在您自己的部署中执行所有的配置,但这是可以完成的。

票数 5
EN

Stack Overflow用户

发布于 2012-12-25 13:05:28

您还可以问一个完全相反的问题:“既然JPA 2包含在所有Java 6服务器中,为什么要使用裸露的servlet容器呢?”

基本上可以归结为:

  • 有一个重量轻的容器,然后是一个很重的应用程序( Spring方式),
  • 有一个轻量级的应用程序,然后是一个很重的容器( Java 6)。

经过多年的发展,使用Spring和Java 6构建应用程序的模型已经趋同到这样的程度:有时,仅仅通过查看类,无论是Spring还是CDI,您都无法真正判断。所以真正的区别主要是在配置上。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14030790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档