企业javabean到底是什么?

企业javabean到底是什么?,java,tomcat,ejb-3.0,enterprise,javabeans,Java,Tomcat,Ejb 3.0,Enterprise,Javabeans,在Tomcat常见问题解答中,它说:“Tomcat不是EJB服务器,Tomcat不是完整的J2EE服务器。” 但如果我: 使用Spring提供应用程序上下文 用JPA注释我的实体 注释(并将Hibernate用作 (JPA提供商) 将C3P0配置为连接池数据 来源 注释我的服务方法 使用@Transactional(并使用Atomikos) 作为JTA提供商) 使用JAXB进行编组和解编组 并可能添加我自己的JNDI功能 那么,我不是有一个JavaEE应用服务器吗?那么我的bean不是EJB

在Tomcat常见问题解答中,它说:“Tomcat不是EJB服务器,Tomcat不是完整的J2EE服务器。”

但如果我:

  • 使用Spring提供应用程序上下文
  • 用JPA注释我的实体 注释(并将Hibernate用作 (JPA提供商)
  • 将C3P0配置为连接池数据 来源
  • 注释我的服务方法 使用@Transactional(并使用Atomikos) 作为JTA提供商)
  • 使用JAXB进行编组和解编组
  • 并可能添加我自己的JNDI功能
那么,我不是有一个JavaEE应用服务器吗?那么我的bean不是EJB吗?还是有其他的定义特征


兼容Java EE的应用程序服务器为您提供了哪些您无法通过Tomcat和某些第三方子系统轻松/轻松获得的功能?

EJB实现将是编写并打包在任何兼容EJB服务器上运行的bean。如果您按照您所描述的做,它可能会工作,但它不能移植到其他供应商的应用服务器

所以EJB是一个遵循特定规范的标准,因此是可移植的

实际上,许多EJB并不完全兼容或与应用程序服务器无关。但是,总的来说,它们是不兼容的,因此,如果您更改了应用程序服务器供应商,那么解决这些小的不兼容问题将比尝试将您描述的体系结构移动到GlassFish、JBoss或Weblogic服务器要容易得多

编辑:为了响应您的评论,您将不会通过XML对EJB进行适当的注释和/或配置,以使以符合EJB的方式访问它的代码能够在不进行更改的情况下使用它

你的评论有两个角度。一个问题是,在JBoss或其他任何一个而不是Tomcat上部署时,您会失去哪些功能?如果您带来了所有依赖的框架,那么可能什么都没有。然而,如果您想将代码移动到Weblogic,例如,使用它的一些特性,那么您的代码可能需要一些重要的更改才能跟上


我不是说您不能通过其他方式复制所有EJB功能(当然是您关心的子集),只是它不是规范,因此不是独立于实现的。

EJB是符合
javax.EJB
API的JavaEE组件

JavaEE是API的集合,您不需要全部使用它们

Tomcat是一个“部分”JavaEE服务器,因为它只实现一些JavaEE API,比如servlet和JNDI。它没有实现EJB和JMS,因此它不是完整的JavaEE实现

如果您添加了一些额外的部分(例如OpenEJB、HornetQ),您将添加缺少的部分,最终将得到一个完整的JavaEE服务器。但是开箱即用,Tomcat不是这样,也不是试图这样。

1)你把JPA实体和EJB混淆了。虽然JPA属于EJB3规范,但它始终是一种独立的技术

2) EJB包括:无状态bean、有状态bean和消息驱动bean。虽然这些功能中的每一项都可以使用spring轻松实现,但spring并不使用这个术语。在Spring中,您没有EJBs中的POJO+“魔力”,在Spring中,POJO+是您自己的配置(有时感觉也很神奇)。主要区别在于spring做的更多,而应用服务器做的更少,这就是为什么spring应用程序喜欢tomcat,而ejb3应用程序需要“真正的”应用服务器

在我看来,90%的应用程序可以使用spring+tomcat进行部署,很少需要ejb3

那么我不是有一个JavaEE吗 应用服务器?那我的朋友不是吗 豆子的?还是有其他原因 定义特征

快速响应EJB实际上必须遵循JavaEE规范。Tomcat是一个JavaEE容器,而不是应用服务器

什么是符合JavaEE的应用程序 服务器提供了您无法提供的信息 轻松/容易地从Tomcat获得 一些第三方子系统

快速回答第二个问题。在你的情况下,很可能什么都没有


EJB往往是非常沉重的对象,人们最终使用它们来解决问题,而实际上它们是过度使用的。创建Spring之类的框架是为了解决这些问题,而不使用EJB。我认为第一本介绍Spring的书甚至被称为“没有EJB的J2EE开发”。

除了严格定义什么是EJB和什么不是EJB之外,您正在向Tomcat添加很多东西。即使您拥有的是EJB服务器,它也不再是真正简单的Tomcat


FAQ是正确的:Tomcat不是EJB服务器。然而,如果你有足够多的额外库和代码,它可以是这样或其他许多东西。

事实上,如果你付出足够的努力,你几乎可以把Tomcat/Spring变成一个成熟的重量级应用服务器:)你甚至可以嵌入一个可移植的EJB3容器

什么是符合JavaEE的应用程序 服务器提供了您无法提供的信息 轻松/容易地从Tomcat获得 一些第三方子系统

第三方模块仍有一些难以获得的功能:

  • 有状态会话bean(SFSB)
  • 扩展持久性上下文
  • 应用程序客户端容器/JavaWebStart
  • 群集取决于应用程序。服务器
  • CORBA互操作性
  • JCA集成~
  • 远程处理~
  • 容器管理的事务~
  • 分布式事务的合理管理(例如恢复)
Spring也支持带有~的条目,但至少据我所知,这并不是那么简单

在这个答案中还有一些细节:

但是,如果我添加了(…),那么我不是有效地拥有了一个JavaEE应用服务器吗?那么我的bean不是EJB吗?还是有其他的定义特征

不,您没有JavaEE应用服务器,一个成熟的JavaEE应用服务器不仅仅是