在最小的tomcat上运行完整的Java EE应用程序(不仅仅是Webprofile)

时间:2014-03-27 12:21:24

标签: java-ee tomcat jpa transactions

如果我可以运行一个完整的Java EE 6应用程序,如果我分发Java EE 6参考SDK(Glassfish附带的一个),那么我需要你的建议/意见,这个应用程序在最小的Tomcat上使用JPA,事务服务,DI等。作为我申请的一部分。

我正在尝试尝试是否可以像人们使用Spring一样使用Java EE 6。无论我走到哪里,我都会带上我测试过的应用程序和容器。

如果可行的话,你认为这种方法有什么问题吗?当然,我理解这种做法与创建Java EE规范的愿景并不一致,但有时甚至在所有承诺之后,当应用程序从应用程序服务器移植到另一个应用程序时,事情可能会变得更糟。

感谢大家花时间阅读和回复。

3 个答案:

答案 0 :(得分:1)

  

据我所知,这种做法与创建Java EE规范的愿景不一致

我不完全确定这是完全的情况。当然,Java EE定义的主要内容是清晰的配置文件,需要一组特定的技术才能全部可用。这有一个很大的优势,即针对Java EE的应用程序或库只能假设Bean Validation和CDI之类的东西只是命名两种技术就是Just There。

但另一方面,构成Java EE的几乎所有子规范也可以在Java EE之外单独使用。在许多规范(例如JPA)中,它甚至明确定义了它在Java SE中的工作方式(在这种情况下,Tomcat算作Java SE)。在其他一些情况下(例如CDI),它目前是在Java SE中工作的特定实现(例如Weld)的属性。

其他一些规范(例如JSF)根据经验,它也应该适用于Servlet规范,该规范的版本低于Java EE的Servlet规范版本,其中引入了该规范版本。例如。 JSF 2.0是Java EE 6的一部分,它有Servlet 3.0,但它也可以与Servlet 2.5一起使用。据我所知,这并没有真正完成,因此较旧的Java EE服务器只能升级JSF,但主要是针对运行较旧Tomcat版本的人。

所有这些与Java SE / Tomcat的兼容性都是由那些同时创建Java EE规范愿景以及实际编写和实现所述规范的人员完成的。

  

我试图尝试使用Java EE 6,就像人们使用Spring一样。

这里没有明确的答案,但你可以走得很远#34;简单地说#34;如果发生战争,将所有实现jar添加到WEB-INF / lib目录。例如。 CDI的Weld罐子,JPA的Hibernate罐子,JSF的Mojarra罐子,EJB的OpenEJB等等。

这种方法的问题在于 - 您将负责确保所有这些罐子一起工作而不会出现问题。

这些技术也可能无法在一起工作,因为它们可以在开箱即用的工作中发挥作用"分发" Java EE;意味着注入可能不适用于您期望它工作的所有工件,或者您可能必须提供额外的配置(例如告诉Hibernate JTA事务管理器是什么,或者配置Filter以根据请求激活CDI)和另一个激活JAX-RS的过滤器等。)

另一个问题是许多Java EE技术都会进行某种注释扫描。在Java EE实现中,这可以在一次通过中全局完成,但缺少针对每种技术的任何特定标准服务必须在" Java SE模式中单独执行此操作"。这意味着将一遍又一遍地扫描相同的罐子。这里也不是很好,根据你使用的实现,你可以在WEB-INF / lib中得到很多额外的jar。这些也将被扫描以进行注释。在Java EE实现中,只扫描每个部署的应用程序jar。

最后,一些Java EE的东西不能单独提供,例如JASPIC,据我所知,JACC和JCA不作为独立实现提供。

答案 1 :(得分:0)

我不是开发人员,但如果我是正确的,那么完整的Java EE堆栈无法在Tomcat上运行,因为它只是一个Servlet容器,而不是JBoss或WebLogic的应用服务器。

答案 2 :(得分:0)

您只需使用TomEE即可 http://tomee.apache.org/