什么是企业Java Bean?

在Tomcat FAQ中,它说:“Tomcat不是一个EJB服务器,Tomcat不是一个完整的J2EE服务器.”

但如果我:

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

那么我不是有效地拥有一个Java EE应用服务器?那么不是我的bean EJB?还是有其他定义特征?

Java EE兼容应用程序服务器是什么让您无法轻松/轻松地从某些第三方子系统获取Tomcat?

最佳答案

But if I add (…) then don’t I effectively have a Java EE application server? And then aren’t my beans EJBs? Or is there some other defining characteristic?

不,您没有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 Entities是EJB – 在Java EE 6,JPA 2.0和EJB 3.1中不再是单独的规范).
我还应该提到,用@Transactional注释的Spring bean不等同于Session Bean. Java EE容器可以使用会话Bean执行更多操作(见下文).你可能不需要他们,但仍然,他们不是严格等同的.

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

What is it that a Java EE compliant app server gives you that you can’t easily/readily get from Tomcat with some 3rd party subsystems?

正如我所说,我认为“胶”是附加值的一部分,对整体的坚固性有很大的贡献.那么,ewernli的answer强调了很难实现的.我只是补充说:

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

是的,一个好的Java EE服务器将做一些非常简单的事情,以改善容错能力(集群连接池,JNDI树,JMS目标,使用幂等bean自动重试,智能EJB客户端,事务恢复,服务迁移等).对于“关键任务”应用程序 – 绝大多数不是 – 这很重要.而在这种情况下,Servlet API之上的库就不是替代品.

转载注明原文:什么是企业Java Bean? - 代码日志