无应用服务器的javaee

无应用服务器的javaee,java,tomcat,jakarta-ee,application-server,cdi,Java,Tomcat,Jakarta Ee,Application Server,Cdi,因为EJB3我们有可嵌入的EJB容器,所以JPA实现可以在没有应用服务器的情况下使用,还有上下文和依赖注入等。由于在许多系统上只有Tomcat可用,我想知道JavaEE是否可以在没有应用服务器的情况下使用,而使用类似Tomcat的Servlet容器 设置Java环境需要做什么?您看到了哪些缺点?您通常需要某种容器,即使该容器不提供与Java EE相关的服务。毕竟,您确实需要一个长寿命的JVM进程来承载您正在执行的代码。Tomcat和Jetty将很好地完成这项工作,除了基本的servlet服务外,

因为EJB3我们有可嵌入的EJB容器,所以JPA实现可以在没有应用服务器的情况下使用,还有上下文和依赖注入等。由于在许多系统上只有Tomcat可用,我想知道JavaEE是否可以在没有应用服务器的情况下使用,而使用类似Tomcat的Servlet容器


设置Java环境需要做什么?您看到了哪些缺点?

您通常需要某种容器,即使该容器不提供与Java EE相关的服务。毕竟,您确实需要一个长寿命的JVM进程来承载您正在执行的代码。Tomcat和Jetty将很好地完成这项工作,除了基本的servlet服务外,还提供一些有用的相关附加功能,如连接池。

如果我理解得很好,您希望在servlet容器中使用EJB3/JPA

不仅有独立的JPA实现,还有可嵌入的EJB3容器,如或Glassfish。因此,没有什么可以阻止您从Servlet容器启动这样一个可嵌入容器来使用EJB3

(注意:我不知道关于事务的所有细节。在一个成熟的app.server中,您有JTA和分布式事务管理器。在像Tomcat.JPA这样的Servlet容器中没有。JPA与JTA和普通JDBC一起工作,但我不知道没有JTA的可嵌入容器是如何工作的。尽管如此,我想在这样的情况下,这是可行的。)可嵌入容器也适用于单元测试,我想这里没有JTA分布式事务管理器。)

另一种方法是使用Spring。Spring和EJB3确实变得非常相似。您可以在Servlet容器中启动Spring DI容器,并或多或少受益于与EJB3(声明性事务等)相同的功能。请参阅这篇关于


所有这些技术都变得非常模块化,特别是在Java EE配置文件中。您可以使用Sevlets、EJB3、JMS、JPA,甚至JTA,以某种方式彼此独立。您还可以创建一个环境,在其中您可以选择您想要的技术,无论是使用Spring还是使用Java EE。问题是什么时候它才有意义,而不是我们我认为Servlet/EJB3/JPA是一个极限,如果一个应用程序服务器需要更多的话。

注意Tomcat是一个应用程序服务器。也就是说,我们在10月份发布了一个Tomcat,添加了缺少的JavaEE部分,然后使用Oracle的官方TCK认证了JavaEE6


该堆栈是从过去简单称为“OpenEJB/Tomcat”的堆栈演变而来的,这是一个有用的堆栈,但有一个坏名字:)因为“EJB”部分而经常被忽略,同时它还向Tomcat提供事务、JMS、web服务等。这个新名字好得多,现在像JBoss或GlassFish一样获得了官方认证。我们对它的未来感到非常兴奋。

几年前,我(Guy Preference,来自Atomikos)介绍了没有应用服务器的J2EE,并发表了这篇具有开创性的文章:-当时主要关注JMS和JDBC


一般来说,由于Spring和Hibernate,设置起来很容易。事实上,我是在做了一个JavaEE项目并遇到了与应用服务器和EJB相关的XML地狱之后受到启发而这样做的。没有应用服务器,事情突然变得简单多了,而且更容易测试

如果您需要安装Tomcat,那么配置起来可能会有点麻烦,但最近Atomikos已经将开箱即用的Tomcat集成作为其商业产品的一部分


HTH

是,基于Servlet容器。我已经添加了这一点,还可以看到这个问题,“我在做了一个JavaEE项目之后,受到了这样做的启发,并且遇到了与应用服务器和EJB相关的XML地狱”->这不再是事实。可以说J2EE是“不推荐的”,这个问题提到的是JavaEE,而不是J2EE。自JavaEE5以来,有接近0的配置。现在我们有了JavaEE6和JavaEE7,它们在大多数情况下都需要0配置。测试也是可能和容易的。看看