| 风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› Java EJB | 登录 -> 注册 |
|
1F Java EJB 唧唧 Post by : 2008-07-27 03:12:29.0
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序,类似微软的.com技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。 EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。 1.Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。 2.Entity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。 3.MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。 EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理... 一.什么是 EJB? 一个技术规范:EJB 从技术上而言不是一种"产品" 二.Sun 对 EJB 的期望 提供一个标准的分布的、基于 OO 的组件架构 三.为什么选择 EJB? EJB 服务器完成"繁杂"的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于 4GL 语言设计的目标) 四.EJB 架构 为了满足架构的目标,规范中描述了 五. 简化的编程模型 关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ... EJB( 业务逻辑代码 ) 表示了与特定商业领域(例如银行、零售等行业)相适应的逻辑。它由运行在业务逻辑层的 enterprise bean 处理。一个 enterprise bean 可以从客户端接受数据,对它进行处理,并将其发送到企业信息系统层以作存储;同时它也可以从存储器获取数据,处理后将其发送到客户端应用程序。 有三种类型的 enterprise beans:session beans、entity beans 和 message-driven beans。 Session bean 描述了与客户端的一个短暂的会话。当客户端的执行完成后,session bean 和它的数据都将消失; 与之相对应的是一个 entity bean 描述了存储在数据库表中的一行持久稳固的数据,如果客户端终止或者服务结束,底层的服务会负责 entity bean 数据的存储。 Message-driven bean 结合了 session bean 和 Java 信息服务(JMS)信息监听者的功能,它允许一个商业组件异步地接受 JMS 消息。 |
|
2F EJB技术概论 唧唧 Post by : 2008-07-27 03:13:39.0
Enterprise JavaBean (EJB) 1.1 规范定义了开发和部署基于事务性、分布式对象应用程序的服务器端软件组件的体系结构。企业组织可以构建它们自己的组件,或从第三方供应商购买组件。这些服务器端组件称作 Enterprise Bean,它们是 Enterprise JavaBean 容器中驻留的分布式对象,为分布在网络中的客户机提供远程服务。
两层和三层环境 在两层客户机/服务器环境中,程序员编写与供应商特定软件紧密结合的应用程序。通常,两层应用程序直接从客户机访问数据库服务或事务服务。有时这种应用程序称作胖客户机,因为应用程序逻辑驻留在客户机上,这使客户机变得庞大和复杂。下图描绘了这一特性: 三层客户机/服务器应用程序使用一个中间或中间层,应用程序服务器,它在客户机应用程序和后端数据库之间操作。中间层存储了系统的商业逻辑,并协调客户机上与后端数据库交互的显示。 在两层模型上使用三层体系结构是出于以下两个动机: 改进的可伸缩性、可用性和性能 改良的商业系统灵活性和可扩展性 由于两层系统利用了客户机的处理能力,因而它具有良好的性能,但许多客户机对单一后端资源(如数据库)的特性会产生瓶颈,随着客户机数量逐渐增大,这会抑制可伸缩性、可用性和性能。三层系统试图通过更有效地管理后端资源来消除这个瓶颈。利用资源管理技术,如合用和集群中间层服务器,可以实现这个目标。合用允许许多客户机共享不充足的资源(如数据库连接),这样可以减少后端服务器的工作负荷,从而使三层系统更有效。由于多个服务器和资源可以支持故障恢复并均衡不断增加的客户机数量的负载,因此集群可以使三层系统变得更具可用性和可伸缩性。 三层系统比相应的两层系统更灵活且更可扩展,这是因为商业逻辑和服务(如安全性和事务)都驻留在中间层,并且基本上独立于客户机应用程序。如果正确实现了三层系统,那么在使用 Enterprise JavaBean 的情况下,服务会自动应用于客户机请求,因此服务是看不见的。由于服务对于客户机不可见,因此对服务的更改也不可见。如果正确实现了三层系统,那么中间层上对商业逻辑的更改和增强也可对客户机应用程序隐藏。 另外,如果客户机与中间件组件是以 Java 编程语言实现的,那么它们极有可能具有可移植性。可以非常容易地将实现客户机和应用程序服务器的类文件重新安置到当前最合适的主机上。 在最近二、三年中,一些供应商发布了基于 Java 的三层应用程序服务器,这些服务器全都可以与后端服务器操作交互,并管理这些操作。尽管这些中间件产品支持分布式体系结构,这些体系结构在两层设计上(以及 Java 之前的应用程序服务器)做了非常重大的改进。它们的主要限制是编程模块越来越趋向于特定于某个供应商。这意味着公司必须大量购买一家供应商的型号,而且系统是不可移植的,从而导致了供应商锁定。 随着面向对象编程范例日益普及,分布式对象系统已经逐渐壮大。现在已经存在一些分布式对象技术。最流行的是由 Object Management Group 创建的 CORBA、Sun Microsystems 的 Java RMI (JRMP) 和 Microsoft 的 DCOM 和 MTS(又名 COM+)。每种都有其自身的优缺点。Sun Microsystems 的 Enterprise JavaBean 是最新加入这个圈子的技术。在某些方面,它既是这些技术的竟争者,同时也是合作者。 由于在三层计算中使用了其它开放标准(如 LDAP),CORBA(公共对象请求中介体系结构)在解决供应商垄断问题方面取得了成功。不幸的是,虽然 CORBA 根本改变了分布式计算,但经验证编程模块太复杂,而且供应商不能一致地遵守规范。CORBA 有高级的分布式计算,但已证明太难而无法实现,并且其可移植性也比预期差。 Enterprise JavaBean (EJB) 是 Sun Microsystems 对 CORBA 的可移植性和复杂性的解决方案。EJB 引入了比 CORBA 更简单的编程模块,它可以让开发人员创建可移植分布式组件,称作 Enterprise Bean。EJB 编程模块可以让开发人员创建安全的、事务性的和持久的商业对象 (Enterprise Bean),该对象使用非常简单的编程模块和声明属性。与 CORBA 不同,例如访问控制(授权安全性)和事务管理等设施非常易于编程。CORBA 需要使用复杂的 API 来利用这些服务,而 EJB 则根据一种称作“部署描述信息”的特性文件中的声明将这些服务自动应用到 Enterprise Bean。这个模型确保了 bean 开发人员可以集中精力编写商业逻辑,而容器会自动管理更复杂但又必要的操作。 由于 EJB 规范颁布了一组明确的 EJB 容器(供应商服务器)和 EJB 组件(商业对象)之间的契约,因此 EJB 中实现了可移植性。这些契约或规则确切规定容器必须为 Enterprise Bean 提供什么服务,bean 开发人员需要使用什么 API 和声明属性来创建 Enterprise Bean。由于详细指定了 Enterprise Bean 的生命周期,因此供应商知道如何在运行时管理 bean,bean 开发人员确切知道 Enterprise Bean 在其存在期间可以做什么。 Enterprise JavaBean 简化了分布式对象的开发、部署和访问。EJB 分布式对象(一种 Enterprise Bean)的开发人员只需依照为 Enterprise JavaBean 建立的契约和协议实现对象。支持 EJB 的应用程序服务器可以,也确实,使用任何分布式网络协议,包括本地 Java RMI 协议 (JRMP)、专有协议或 CORBA 的网络协议 (IIOP)。不管在某个特定产品中使用的基本网络协议是什么,EJB 使用相同的编程 API 和语义以 Java RMI-IIOP 访问分布式对象。协议的细节对应用程序和 bean 开发人员隐藏;对于所有供应商来说,定位和使用分布式 bean 的方法是相同的。 注:Enterprise Bean 与 JavaBean 不同。JavaBean 是使用 java.beans 包开发的,它是 Java 2 标准版的一部分。JavaBean 是一台机器上同一个地址空间中运行的组件。JavaBean 是进程内组件。Enterprise Bean 是使用 javax.ejb 包开发的,它是标准 JDK 的扩展,是 Java 2 Enterprise Edition 的一部分。Enterprise Bean 是在多台机器上跨几个地址空间运行的组件。因此 Enterprise Bean 是进程间组件。JavaBean 通常用作 GUI 窗口小部件,而 Enterprise Bean 则用作分布式商业对象。 |
|
3F EJB的专用术语解释 唧唧 Post by : 2008-07-27 03:14:14.0
Bean
Bean是Enterprise Java Bean的缩写,一个Bean扮演着应用程序素材的角色。她包含有一个functional interface,一个life-cycle interface,以及一个实做它所支援的商业方法的类别。 Bean Instance(Bean实例) 一个Bean Instance是Bean位于一个容器中的instantiation,如果把bean比作class,那么Bean Instance就是Java Object。 Bean-managed persistence(Bean自己所管理的永续性) 这个术语是用来描述Enterprise Java Bean如何来存储它们的state到数据库或者是其他的存储机制。容器将促使Bean呼叫Bean的EjbLoad()和EjbSave()方法。 Container(容器) 一个Bean的容器会实做bean的home interfaces与remote interfaces。它应该提供一组公用程序类别以便能够隐藏bean instances,介入方法调用,维持交易完整性与bean instances池的一般管理。虽然Ejb规则中规定一个容器必须管理超过一种以上的bean,不过通常每个容器只有一个bean。 Container-managed demarcation 对于一个enterprise bean,不论何时,当其中的一个商业方法被呼叫,容器便自动启动一项新的交易。商业方法完成后,交易就结束了。容器启动交易的形式由bean的交易属性来决定,或者,由商业方法本身来决定(如果有指明的话)。 Container-managed persistence(委托容器管理的永续性) Bean开发者可以委托容器来负责记录Bean的最新状态。Bean的状态必须由Bean中的许多public Fields得到。容器可以确保这些public fields在任何bean的方法被唤醒之前为正确的。public fields必须在deployment descriptor中定义,然后才产生container classes。 Entity beans Entity beans 代表可以辨认的永续物件。典型的实例就是:它可以代表关系数据库中个别的rows。当然,也可以是档案系统中的档案,或者是任何其他独一无二的可辨识资料。 Home 每一个Enterprise Bean,不论是Session或者是Entity bean,都有一个interface来让客户端能够建立与移除一个bean instance。以Entity为例,home interface 提供一些方法以允许客户端对于一个bean instance来作定位用。这个interface遵循Java RMI interface的规定。每个home interface都继承自一个远端界面,即EJBHome。 Remote 一个bean的remote interface 描述对于一个bean instance中可供客户端呼叫的方法集合。这个interface 遵循Java RMI interface的规定。每个remote interface都继承自一个远端界面,即EJBObject。 Session beans Session beans为 particular client所建立。如果经过一段被称为timeout的指定空闲时间之后,就不再存在。 Session synchronization Session beans 可选择性地实做Session Synchronization interface。这样可以允许Session beans在交易将完成之前与完成之后被通知。session bean可以使用beforeCompletion()方法来否决交易的成功完成,并且能够使用afterCompletion()来判断交易成功与否。 Transaction Attribute (交易属性) 一项transaction attribute可以用在bean与其特殊的商业方法上。其可能的值有六种,分别是TX_NOT_SUPPORTED,TX_REQUIRED,TX_SUPPORTS,TX_REQUIRES_NEW,TX_MANDATORY,TX_BEAN_MANAGED |
|
4F JavaBean与EJB有何不同 唧唧 Post by : 2008-07-27 03:14:51.0
您现在可能已在使用 JavaBean,但还不了解它。如果有支持 Java 的浏览器,那么,在桌面上使用 JavaBean 就没有限制。使用的 Web 页面可以将 bean 作为小应用程序的一部分。您很快就会和作为浏览器可视部分的 JavaBean 交互,然后,那些 JavaBean 将与服务器上的 EJB 接口。这种能力也可以扩展到因特网和内部网。
JavaBean 和 Server Bean(通常称为 Enterprise JavaBean (EJB))有一些基本相同之处。它们都是用一组特性创建,以执行其特定任务的对象或组件。它们还有从当前所驻留服务器上的容器获得其它特性的能力。这使得 bean 的行为根据特定任务和所在环境的不同而有所不同。 这开辟了巨大商机。因为 JavaBean 是与平台无关的,所以对于将来的解决方案,供应商可以轻易向不同用户推出其客户机方的 JavaBean,而不必创建或维护不同的版本。这些 JavaBean 可以与执行商业功能(例如订购、信用卡处理、电子汇款、存货分配、运输等)的 EJB 配合使用。这里有巨大潜力,而这正是组件代理(WebSphere Application Server 企业版)设计提供的那种潜力。 JavaBean 是一种组件,它在内部有接口或有与其相关的属性,以便不同人在不同时间开发的 bean 可以询问和集成。可以构建一个 bean,而在以后构造时将其与其它 bean 绑定。这种过程提供了先构建,然后重复使用的方法,这就是组件的概念。可以将这种单一应用程序部署成独立程序、ActiveX 组件或在浏览器中。 JavaBean 因其外部接口(即属性接口)而与纯对象不同。这种接口允许工具读取组件要执行的功能,将其与其它 bean 挂钩,以及将其插入其它环境。JavaBean 设计成对单一进程而言是本地的,它们在运行时通常可视。这种可视组件可能是按钮、列表框、图形或图表 - 但这不是必需的。 可执行组件 Server Bean 或 EJB 是部署在服务器上的可执行组件或商业对象。有一个协议允许对其进行远程访问或在特定服务器上安装或部署它们。有一系列机制允许它们将服务安全性、事务行为、并发性(由多个客户机同时访问的能力)和持久性(其状态可以保存多久)的主要方面授权给 EJB 服务器上其所在的容器。当安装在容器中时,它们获得各自的行为,该行为提供不同质量的服务,因此,选择正确的 EJB 服务器至关重要。这正是 IBM WebSphere 企业版的优势所在。 EJB 是设计成运行在服务器上,并由客户机调用的非可视远程对象。可通过多个非可视 JavaBean 构建 EJB。它们有一个部署描述符,其目的与 JavaBean 属性相同:它是以后可由工具读取的 bean 的描述。EJB 还独立于平台,一旦编写好,还可以在任何支持 Java 的平台(包括客户机和服务器)上使用。 因为 EJB 由诸如 IBM VisualAge for Java 这样的工具集生成,所以,它是基于服务器的对象,并用于远程调用。它们安装在 EJB 服务器上,并象调用其它 CORBA 远程对象那样获得进行调用的远程接口。 ActiveX 对象 可以将 JavaBean 部署成 ActiveX 对象,虽然 EJB 的代理也可以这样做,但是,因为 ActiveX 运行在桌面上,所以,EJB 本身不能成为 ActiveX 对象。要在与平台相关的、仅 Windows 平台上做到这一点,开发人员可以将 JavaBean 变换成 ActiveX 组件。 好处 EJB 的主要好处在于:构建 bean 时,bean 开发人员可以规定需要什么类型的行为,而不必规定如何去做。开发分为两部分:程序员开发 bean,然后验证:它可与构建工具一起工作,并包括标识所需服务质量行为种类的部署描述符。下一步,另一个程序员可以采用这个 bean,并使用读取 EJB 部署描述符的部署工具,然后将该 bean 安装到 Enterprise Java Server 上的容器中。在第二步中,部署工具采取一些操作 - 这可能意味着生成如状态保存代码,放入事务挂钩,或执行安全性检查这样的代码。所有这些操作由部署工具生成,bean 开发人员和部署人员可以是不同的人。 可以通过使用部署工具,将任何独立于平台的 JavaBean 改写成具有可靠服务质量、特定于平台的 EJB,以满足现有商业系统和应用程序的特定需求。这就是 EJB 服务器对集成系统、网络和体系结构如此重要的原因所在。 EJB 与 IBM WebSphere 企业版 在 IBM WebSphere 企业版中使用时,可以将 EJB 配置成被管理的商业对象。接受它们授权服务的容器是其安装到的容器。将 EJB 的持久性部分映射在数据或状态对象中。EJB 服务器为 EJB 提供不同的服务质量,选择正确的 EJB 服务器可能对满足完整的商业需求至关重要。“组件代理”功能极其健壮,该功能提供如负载均衡和支持服务器组中多台机器的高级功能。它还有大大超出 Enterprise Java Server (EJS) 规范所倡导的系统管理功能。因此,按照基本标准编写的 JavaBean 或 EJB 可以运行在使用“组件代理”功能的 WebSphere 企业版上,并获得那些所有的附加功能。 EJB 服务器还提供独特的特性和服务质量,而且不完全相同。IBM“组件代理”有一些强大特性 - 例如,可伸缩性,它允许开发人员将 EJB 部署到从小型系统到大型网络的不同类型服务器。开发人员可以从小处入手,例如,在一个部门中,首先在 LAN 的 Java 服务器上部署,一旦准备好,就知道可以将在那里创建的 JavaBean 和 EJB 部署到全球网络。然后,开发人员可以测试并熟悉这些 bean,试运行,制作样本等等。满意之后,开发人员可以通过将其移至高性能服务器,来大幅度扩大其规模。JavaBean 和 EJB 不受任何计算机体系结构边界的限制。它们用 Java 编写,可以运行在任何具有 Java 虚拟机的系统上,并可以使用任何 Enterprise Java Server (EJS) 来部署对象。因此,开发人员现在可以在方便的系统上构建,以后在方便的系统上部署,而不必是同一台或同样类型的机器。 IBM WebSphere 企业版支持将商业对象部署到多台服务器。EJB 作为商业对象集成到“组件代理”功能,并作为任何其它商业对象处理。因此,EJB 可以连接到所选的后端系统,并执行任何所需操作,以满足其商业需求。这就成为“组件代理”为 EJB 提供的基础设施。通过将“组件代理”用作 EJB 服务器,开发人员将能够继续使用当前旧有系统,并将其与电子商务接口一起提供。 为使 EJB 能在 WebSphere“组件代理”环境中工作,可以使用“组件代理”部署工具将其安装在一台或多台服务器上,然后将其添加到命名服务器,以便可以全局查找到它。任何可以访问公共命名服务器的人都可以找到它,找到其宿主,并可以在宿主上执行方法,同时创建 EJB。这就是“代理组件”要做的事。 示例 让我们举一个在 Web 购物站点上可以看到的电子购物车的例子。用户的购物车是一个 JavaBean。用户将货架上的商品放入购物车,这些商品本身是 JavaBean。它们全部可视,并且面向用户。结帐时,将用户购物车中的商品发送到服务器上的 EJB,该 EJB 执行一些必要的操作,如检查信用卡授权和可用额度,生成封条,或生成给发货部门的有关提什么货和发货地点的特殊指示 - 这就是商业程序已在进行的活动。 结束语 Bean 的全部意义不只是其现有能力,更在于其可以为商业提供的有竞争力的潜在能力。IT 设计师和应用开发人员现在可以将精力完全集中在商业逻辑,而将如事务、持久性和安全性的底层工作留给服务器。WebSphere 的“组件代理”功能将提供所有这些(还有后端访问)和对象事务管理器。 |
| 风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› Java EJB | 登录 -> 注册 |