从 EJB 3 开始,我们有了可嵌入的 EJB 容器,JPA 实现可以在没有应用服务器的情况下使用,还有 Weld 用于上下文和依赖注入等等。由于在许多系统上只有 Tomcat 可用,我想知道是否可以在没有应用程序服务器的情况下使用 Java EE,但可以使用像 Tomcat 这样的 Servlet 容器。
我需要做什么来设置 Java 环境?你看到什么缺点?
从 EJB 3 开始,我们有了可嵌入的 EJB 容器,JPA 实现可以在没有应用服务器的情况下使用,还有 Weld 用于上下文和依赖注入等等。由于在许多系统上只有 Tomcat 可用,我想知道是否可以在没有应用程序服务器的情况下使用 Java EE,但可以使用像 Tomcat 这样的 Servlet 容器。
我需要做什么来设置 Java 环境?你看到什么缺点?
请注意,Tomcat 是一个应用程序服务器。也就是说,在 10 月,我们发布了Apache TomEE,它是 Tomcat,添加了缺少的 JavaEE 部分,然后使用 Oracle 的官方 TCK 认证了 Java EE 6。
该堆栈是从过去简单地称为“OpenEJB/Tomcat”的堆栈演变而来的,这是一个有用的堆栈但名字却很糟糕:) 由于“EJB”部分而经常被忽视,同时它还向 Tomcat 提供了 Transactions、JMS、WebServices 等. 新名称要好得多,现在它像 JBoss 或 GlassFish 一样获得了官方认证。我们对它的未来感到非常兴奋。
如果我理解得很好,您想在 servlet 容器中使用 EJB3/JPA。
不仅有 JPA 的独立实现,还有可嵌入的EJB3 容器,例如OpenEJB或 Glassfish可嵌入容器。因此,没有什么能阻止您从 Servlet 容器启动这样的可嵌入容器以使用 EJB3。
(注意:我不知道有关事务的所有细节。在成熟的应用程序服务器中,您有 JTA 和分布式事务管理器。在 Tomcat 等 Servlet 容器中没有。JPA 与 JTA 一起使用和普通的 JDBC,但我不知道没有 JTA 的可嵌入容器是如何工作的。不过,我想这会起作用,因为这样的可嵌入容器也用于单元测试,我猜没有 JTA 分布式事务管理器。)
另一种方法是使用 Spring。Spring 和 EJB3 确实变得非常相似。您可以在 Servlet 容器中启动 Spring DI 容器,并或多或少地从与 EJB3 相同的功能(声明性事务等)中受益。请参阅这篇关于Spring 与 EJB3 的文章。
所有这些技术都变得非常模块化,尤其是在 Java EE 配置文件中。您可以以某种方式相互独立地使用 Sevlets、EJB3、JMS、JPA 甚至 JTA。您还可以使用 Spring 或 Java EE 创建一个环境,在其中挑选您想要的环境。问题是它什么时候才有意义,而是使用应用程序。服务器,一切可用且易于管理。我认为 Servlet/EJB3/JPA 是限制,如果需要更多的应用程序。服务器。
您通常需要某种容器,即使该容器不提供与 Java EE 相关的服务。毕竟,您确实需要一个长期存在的 JVM 进程来托管您正在执行的代码。Tomcat 和 Jetty 可以很好地完成这项工作,并且除了基本的 servlet 服务之外,还提供了一些相关的有用附加功能,例如连接池。
没有应用服务器的 J2EE 是几年前由我(Guy Pardon,来自 Atomikos)介绍的,这篇开创性的文章:http ://www.onjava.com/pub/a/onjava/2006/02/08/j2ee-without-application -server.html - 当时专注于 JMS 和 JDBC。
一般来说,由于 Spring 和 Hibernate,它很容易设置。实际上,在完成了一个 Java EE 项目并遇到了与应用服务器和 EJB 相关的 XML 地狱之后,我得到了这样做的灵感。没有应用服务器,事情突然变得简单多了,也更容易测试了。
如果您需要 Tomcat 安装,那么配置起来可能会有点麻烦,但最近 Atomikos 在http://www.atomikos.com上推出了开箱即用的 Tomcat 集成作为其商业产品的一部分。
高温高压