什么是EJB程序

什么是EJB程序
2024-12-25 23:02:12
推荐回答(1个)
回答1:

Enterprise bean是实现了Enterprise JavaBean (EJB)技术的J2EE组件。Enterprise bean在EJB容器这个J2EE服务器中的运行环境中运行(参见图1-5)。EJB容器提供了诸如enterprise bean的事务处理这样的系统级服务,不过这对于应用程序开发者是透明的。这些服务的存在使得你可以快速地构建和部署enterprise bean,enterprise bean构成了事务型J2EE应用程序的核心。
  Enterprise Bean是什么?
  一个enterprise bean就是一个用Java编程语言编写的服务器端的组件,其中包含了应用程序的商业逻辑。所谓商业逻辑,是指实现应用程序用途的代码。例如,在一个存货管理的应用程序中,enterprise bean可能会在名为checkInventoryLevel和orderProduct的方法中实现商业逻辑。客户端通过调用这些方法访问应用程序提供的存货管理服务。
  Enterprise Bean的优点
  enterprise bean的使用大大减轻了分布式应用程序开发的工作量。
  首先,因为EJB容器为enterprise bean提供了系统级的服务,bean的开发者可以集中精力解决商业问题。EJB容器--而不是bean的开发者--负责诸如事务管理和安全论证这样的系统级服务。
  其次,因为bean--而不是客户端--包含了应用程序的商业逻辑,客户端的开发者可以集中精力于客户端的外观。客户端的开发者不再需要编写执行商业规则或访问数据库的程序。这样的结果是,客户端是真正意义上的瘦客户端,这样做还有一个好处,就是降低了对客户端的硬件要求。
  第三,因为enterprise bean是可移植的组件,应用程序装配者可以使用已有的bean构建新的应用程序。这些应用程序可以运行在任何合适的J2EE服务器上。
  什么时候使用Enterprise Bean
  如果你的应用程序有以下几个需求之一时,你应该考虑使用enterprise bean:
  1、应用程序必须具有可伸缩性。为了适应不断增加的用户,你可能需要发布适应许多机器的应用程序组件。应用程序的enterprise bean不仅可以运行在不同的机器上,而且它们的位置对于客户端也是完全透明的。
  2、事务要求确保数据完整性。Enterprise beans支持事务这种管理对共享对象的并行访问的机制。
  3、应用程序可能会有多种客户端。只需要几行代码,远程客户端就可以很方便地定位enterprise bean。这些客户端可以只有几种,也可以有很多种。
  Enterprise Bean的类型
  表3-1概括了enterprise bean的三种不同的类型。在下面几节我们将详细讨论每一个类型。
  表3-1 Enterprise Bean的类型
  Enterprise Bean类型:用途
  Session:为客户端执行一个任务
  Entity:表现一个持久存储的商业实体对象
  Message-Driven:充当Java消息服务API中监听者的角色,以处理异步的消息
  Session Bean是什么?
  一个session bean表现了在J2EE服务器中一个单一的客户端。客户端调用session bean的方法以访问部署在服务器上的应用程序。session bean为它的客户端执行工作,通过在服务器中执行商业任务简化了客户端工作的复杂性。
  正如它的名字所暗示的那样,一个session bean和一个交互式的session很类似。一个session bean不是共享的--它可能仅仅只有一个客户端,同样的交互式的session可能也只有一个用户。和一个交互式的session一样,一个session bean也不是持久稳固的。(也就是说,它的数据没有被存储到数据库中。) 当客户端终止时,它的session bean也会终止并且不再与客户端关联。
  状态管理模式
  有两种类型的session bean:stateful和stateless。
  Stateful Session Bean
  一个对象的状态由它的实例变量的值组成。在一个stateful session bean中,实例变量表现了一个唯一的client-bean session的状态。因为在客户端和它的bean之间存在交互(“会话”),这个状态常常被称之为conversational state(会话状态)。
  状态会在client-bean session持续期间被保存。如果客户端删除了这个bean或客户端终止了,这个session会结束,它的状态也会消失。这种状态的短暂存在并不是问题,因为当在客户端和bean之间的会话结束时,保存状态也就不再有必要了。
  Stateless Session Bean
  一个stateless session bean不为一个具体的客户端维持一个会话状态。当一个客户端调用一个stateless bean的方法,bean的实例变量可能会包含一个状态,但这个状态仅仅存在于调用的过程之中。当方法结束时,这个状态将不再保留。除了在方法调用的过程中以外,一个stateless bean的所有实例是完全等价的,这就使得EJB容器可以将实例分配给任何客户端。
  因为stateless session bean可以支持许多客户端,它们可以为应用程序提供更好的可伸缩性。典型的情况是,对于相同数量的客户端,应用程序所需要的stateless session bean会比stateful session bean少得多。
  有时,EJB容器可能会将stateful session bean写入到次级存储器中。然而,stateless session bean从不需要写入到次级存储器中。因此,stateless bean与stateful bean相比可以提供更好的性能。
  什么时候使用Session Bean
  一般地说,如果有以下情况,你应该使用session bean:
  1、在任何一个给定的时间,只有一个客户端访问bean的实例。
  2、bean的状态不是持久稳固的,只存在一个很短的时间(也许是几个小时)。
  如果满足以下条件之一,你可以选用stateful session bean:
  1、bean的状态表现了bean和一个指定客户端的交互。
  2、bean需要保存有关客户端调用方法的信息。
  3、bean作为客户端和其它应用程序组件的中介,并为客户端提供一个简单的视图。
  4、bean在后台管理着几个enterprise bean的工作流。
  为了提高性能,如果有以下特性之一,你可以选择使用stateless session bean:
  1、bean的状态中不存在一个指定客户端的数据。
  2、在一个单独的方法调用中,bean执行为所有客