一尘不染

真正的Enterprise Java Bean是什么?

tomcat

在Tomcat FAQ上说:“ Tomcat不是EJB服务器。Tomcat不是完整的J2EE服务器。”

但是如果我:

  • 使用Spring提供应用程序上下文
  • 使用JPA批注注释我的实体(并将Hibernate用作JPA提供程序)
  • 将C3P0配置为连接池数据源
  • 使用@Transactional注释我的服务方法(并使用Atomikos作为JTA提供程序)
  • 使用JAXB进行编组和解组
  • 并可能添加我自己的JNDI功能

那我是否没有有效的Java EE应用服务器?然后不是我的bean EJB吗?还是还有其他一些定义性特征?

符合Java EE的应用程序服务器为您提供了什么,使您无法轻松地/容易地从Tomcat与某些第三方子系统之间获得信息?


阅读 234

收藏
2020-06-16

共1个答案

一尘不染

但是,如果我添加(…),那么我是否没有有效的Java EE应用程序服务器?然后不是我的bean EJB吗?还是还有其他一些定义性特征?

不,您没有Java EE应用程序服务器,成熟的Java EE应用程序服务器不仅仅是Tomcat + Spring
+独立的事务管理器。而且,即使添加了JMS提供程序和EJB容器,您仍将没有Java EE服务器。所有部件之间的粘合对IMO很重要,并且是Java
EE容器附加值的一部分。

关于EJB,EJB规范比JPA还要多,并且还规范了会话Bean和消息驱动的Bean(实际上,即使出于历史原因,即使JPA是Java EE 5中EJB
3.0规范的一部分,我也不认为JPA实体是EJB。 -在Java EE 6中不再是这样,JPA 2.0和EJB
3.1是单独的规范。我还应该提到一个带有注释的Spring Bean @Transactional不等同于Session Bean。Java
EE容器可以对会话Bean进行更多操作(请参见下文)。尽管您可能不需要它们,但它们并不是严格等同的。

最后,Java EE容器实现一个标准,Spring容器没有实现,它是专有的。

符合Java EE的应用程序服务器为您提供了什么,使您无法轻松地/容易地从Tomcat与某些第三方子系统之间获得信息?

正如我所说,我认为“胶水”是附加值的一部分,对整体的坚固性有很大贡献。然后,ewernli的答案很好地强调了难以实现的目标。我只是添加:

  • 群集和 故障转移 (以实现容错)
  • 行政设施

是的,一个好的Java
EE服务器将做得很整洁,以提高容错能力(连接池,JNDI树,JMS目标,对等豆的自动重试,智能EJB客户端,事务恢复,服务迁移等)。对于“关键任务”应用程序-
绝大多数不是-这很重要。在这种情况下,Servlet API之上的库不能替代IMO。

2020-06-16