`
happmaoo
  • 浏览: 4472692 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何定义无状态会话类型EJB组件

阅读更多
定义EJB组件的Home接口



EJB2.0规范规定无状态会话类型EJB组件的Home接口继承EJBHome接口对象,用于定义客户端创建、查找和删除EJB组件对象实例的方法。该接口中只能包含一个没有任何参数的创建组件对象实例的create方法。遵循EJB2.0规范定义的该组件对象Home接口如下面代码所示:

<ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="550" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>//TaxRateHome.java import javax.ejb.*; import java.rmi.RemoteException; public interface TaxRateHome extends EJBHome { TaxRate create() throws RemoteException,CreateException; }</ccid_code></pre></td></tr></tbody></table></ccid_nobr>

在该接口中定义的用于创建EJB组件对象实例的create方法必须返回该EJB组件对象的Remote接口并且该方法能够抛出RemoteException异常和CreateException异常。

定义EJB组件的Remote接口



EJB组件的Remote接口用于定义组件能够提供的商务方法,该接口继承EJBObject接口对象。

就本讲要创建的获取税率的无状态会话类型EJB组件而言,在Remote接口中需要定义返回税率值的getTaxRate方法。定义TaxRateEJB组件对象的Remote接口如下面代码所示:

<ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="550" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>//TaxRate.java import javax.ejb.*; import java.rmi.RemoteException; public interface TaxRate extends EJBObject { float getTaxRate() throws RemoteException,UserException; }</ccid_code></pre></td></tr></tbody></table></ccid_nobr>

在TaxRateEJB组件对象的Remote接口中定义的getTaxRate方法用于客户端应用或其它EJB组件获取用于计算纳税额的税率。另外,在Remote接口中定义的组件商务方法除了抛出RemoteException异常外,还可以抛出用户定义类型异常UserException。该异常的定义代码如下:

<ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="550" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>//UserException.java public class UserException extends Exception { private int errorNum; public UserException(){super();} public UserException( int errorNum ) { super(); this.errorNum = errorNum; } }</ccid_code></pre></td></tr></tbody></table></ccid_nobr>

由上面的用户异常类型定义代码可以看出:在创建EJB组件过程中定义的用户异常与通常JDK应用程序中创建的用户类型异常方式相同。

定义EJB组件类



无状态会话类型EJB组件的组件类用于定义在Home接口中定义的创建组件对象实例方法、在Remote接口中定义的组件商务方法以及SessionBean接口中的组件生命期控制方法。

实现Home接口中定义的create方法

为了将Home接口中定义的创建组件对象实例的create方法和该方法在组件类中映射的方法名称区分开,按照EJB规范的定义,在Home接口中定义的create方法在组件类中映射的方法名称为ejbCreate。EJB组件类中ejbCreate方法定义如下:

<ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="550" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>public void ejbCreate(){}</ccid_code></pre></td></tr></tbody></table></ccid_nobr>

由该方法的定义可以看出:ejbCreate方法中没有任何实现代码,其原因何在呢?原因在于当EJB服务器启动后,EJB服务器根据部署其中的EJB组件类型和数量,在EJB容器中自动创建了无状态会话类型EJB组件对象实例。客户端应用调用无状态会话类型EJB组件对象Home接口中的create方法创建的不是组件对象实例,是在EJB容器中创建了用于和客户端应用之间进行交互的RMI远程对象。相对而言,客户端应用在调用有状态会话类型EJB组件对象Home接口中的create方法时,在EJB容器中除了创建RMI远程对象外,还创建有状态会话类型EJB组件对象实例。

当然,在无状态会话类型EJB组件类的ejbCreate方法中仍然可以定义获取TCP/IP连接或者利用JDBC进行数据库连接的代码。

实现Remote接口中定义的商务方法

在无状态会话类型EJB组件对象TaxRateEJB的Remote接口中定义了获取税率的商务方法getTaxRate。客户端应用或者其它EJB组件调用该方法获取用于计算纳税额的税率。GetTaxRate方法的实现代码如下:

<ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="550" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>float getTaxRate() { return 0.10f; }</ccid_code></pre></td></tr></tbody></table></ccid_nobr>

由该方法的实现代码可以看出:该方法只是返回浮点数0.1作为税率而没有在该方法中定义其它保持客户端应用状态的代码。

实现SessionBean接口中定义的方法

从上一讲的SessionBean接口定义可以看出:该接口的定义中包括组件生命期控制方法以及设置组件实例对象的上下文方法。在组件生命期控制方法中,ejbRemove方法用于EJB容器调用该方法删除由ejbCreate方法创建的组件对象实例,ejbActivate方法和ejbPassivate方法用于将EJB组件在激活或关闭状态之间进行转换。

SessionBean接口中的SetSessionContext方法用于将EJB容器当前的上下文状态记录在会话类型EJB组件实例的会话上下文(SessionContext)对象实例中,当EJB容器再次调用该组件对象实例中的方法时能够获取该EJB组件的运行环境状态。

本讲创建的无状态会话类型EJB组件只是用于客户端应用或者其它EJB组件获取计算纳税额的税率,没有占用数据库连接等系统资源,因而不需要在EJB服务器端维护任何客户端应用状态。因此,在EJB组件类中只需编写上述方法的定义框架即可,不需要为这些方法编写任何实现代码,如下面代码所示:

<ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="550" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>public void ejbRemove(){} public void ejbActivate(){} public void ejbPassivate(){} public void setSessionContext(SessionContext ctx){}</ccid_code></pre></td></tr></tbody></table></ccid_nobr>

EJB组件类的定义框架

在TaxRateEJB组件对象的组件类定义中,包括3.1-3.3节中定义的各个方法以及一个该类的构造方法。该类定义的框架代码如下:

<ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="550" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6"><pre><ccid_code>//TaxRateBean.java public class TaxRateBean implements SessionBean { //3.1节中实现Home接口中定义的create方法 … … //3.2节中实现Remote接口中定义的商务方法 … … //3.3节中实现javax.ejb.SessionBean接口中定义的方法 … … //构造方法 public TaxRateBean(){} }</ccid_code></pre></td></tr></tbody></table></ccid_nobr>

通过前面的讲解,您是否对EJB的无状态会话组件有个比较深入的了解呢?您可以在下面留下对此次系列讲座的看法和意见,也可以到开发者联盟与网友讨论。接下来,我们将开始进入有状态会话类型EJB组件及EJB实体组件的介绍,敬请关注

分享到:
评论

相关推荐

    EJB3 示例有状态和无状态会话bean

    在EJB3中,我们通过在接口上添加`@Stateless`注解来定义一个无状态会话Bean。 ### 4. 测试EJB3会话Bean 在给定的描述中提到的`Test.jsp`是一个用于测试远程无状态会话bean的页面。这个页面通常会被包含在Web应用...

    面向对象方法EJB组件.pdf

    会话Bean代表业务过程,可以是有状态的(即保持客户会话状态)或无状态的(不保存状态)。消息驱动Bean则是监听JMS(Java消息服务)消息的组件,通常用于处理异步消息。 文档还提到了EJB组件中的引用计数器原则,这...

    EJB3开发第一个无状态会话bean

    无状态会话 Bean 是 EJB 的一种类型,它为每个请求创建一个新的实例,不保留任何客户端的上下文信息。这使得它们非常适合执行计算密集型任务或事务操作,而不涉及持久化状态。 3. **EJB3 的简化** EJB3 相比于...

    基于EJB组件的分布式应用开发

    有状态会话Bean能够记住客户端的会话信息,而无状态会话Bean不保存会话信息,每次客户端请求都视为新的会话。 - **实体Bean**:实体Bean代表持久化的业务对象,通常映射到数据库表。它们可以是容器管理的持久性(CMP...

    无状态会话Bean实验指导.doc

    2. **编写Java文件**:创建EJB组件的核心部分,包括无状态会话Bean的实现类(如`HelloBean.java`)和它的接口(如`Hello.java`)。接口定义了Bean提供的服务,而实现类则包含具体的服务逻辑。 3. **部署描述文件**...

    有状态和无状态EJB之间的差异;

    EJB分为两种主要类型:有状态会话bean(Stateful Session Bean,SFSB)和无状态会话bean(Stateless Session Bean,SSB)。它们的主要区别在于如何管理对象的状态。 1. **有状态会话bean(SFSB)** - **状态管理**...

    Jboss下开发ejb应用之一会话bean的应用

    - 创建无状态会话Bean时,需要定义一个接口(Local或Remote),并实现该接口的类。接口定义了业务方法,实现类提供了具体实现。 2. **有状态会话Bean**: - 有状态会话Bean保存了客户端的会话状态,可以跟踪多个...

    实战EJB之三 开发会话Bean(有状态会话Bean).doc

    实战EJB之三开发会话Bean(有状态会话Bean) ...有状态会话Bean是EJB中的一个重要组件,可以在客户引用期间维护Bean中的所有实例数据的状态值,开发有状态会话Bean需要正确地理解其生命周期和开发过程。

    ejb3.0 第2,3讲-开发第一个无状态会话bean和客户端

    无状态会话Bean是EJB的一种类型,它不保存任何客户端特定的信息。这意味着每个客户端调用的实例都是独立的,不会在不同的调用之间保持数据。这对于执行一次性操作或提供计算服务非常有用。 在EJB 3.0中,我们可以...

    JavaEE 7规范的EJB项目,用于身份证号码验证及查询的无状态会话Bean组件+用来调用的Java应用程序和Web应用程序

    利用NetBeans中的向导创建一个遵循JavaEE 7规范的EJB项目,其中编写了一个用于我国身份证号码验证及查询的无状态会话Bean组件,该会话Bean具有一个远程接口,其中包含如下的商业方法:boolean validateIdentity...

    EJB 会话BEAN PPT

    1. **无状态会话Bean**:无状态会话Bean不会持久保存任何客户端特定的信息,每次调用都独立,适合执行一次性、无关联的操作。例如,它们可以用于计算或验证不依赖于用户会话状态的业务逻辑。 2. **有状态会话Bean**...

    Eclipse+Jboss EJB技术 会话Bean

    在EJB中,会话Bean分为两种类型:无状态会话Bean(Stateless Session Bean)和有状态会话Bean(Stateful Session Bean)。无状态会话Bean不保留任何客户端特定的信息,每次调用都是独立的。而有状态会话Bean则可以...

    关于有状态和无状态会话bean的解释

    在本文提供的ejb_02_Client和ejb_02这两个文件夹中,可能包含了演示如何使用EJB创建和调用有状态和无状态会话Bean的示例代码。通过研究这些代码,你可以更深入地了解这两种类型的Bean如何工作,以及如何在实际项目中...

    ejb有状态bean和无状态bean

    EJB主要分为三种类型:无状态会话Bean(Stateless Session Beans)、有状态会话Bean(Stateful Session Beans)以及实体Bean(Entity Beans)。本篇将深入探讨有状态Bean和无状态Bean的概念、区别以及它们的应用场景...

    实战EJB 实战EJB 实战EJB

    无状态会话Bean是一种EJB组件类型,它不保留客户端之间的任何状态信息。每次客户端请求都会创建一个新的实例,这意味着每个请求都是独立的。 **无状态SessionBean寿命周期** 无状态会话Bean的实例是由容器根据需要...

    EJB基础应用开发可分布式部署的组件

    EJB组件作为业务层的核心部分,负责处理业务逻辑,而Web组件包括Servlet和JSP,处理用户界面和交互。客户层组件则包括应用程序客户端和Applet。这些组件分别运行在对应的容器中,如EJB容器、Web容器、应用程序客户端...

    MyEclipse开发会话EJB详细步骤

    在向导中,为bean命名,选择bean的接口类型(无状态或有状态),并提供接口和实现类的名字。点击`Finish`。 ### 5. 编写bean逻辑 在生成的接口和实现类中,编写业务逻辑。无状态bean通常用于处理独立的请求,而有...

    EJB服务器端组件模型

    无状态Session Bean适用于短期、一次性处理任务,而有状态Session Bean则可以维护与客户端的会话状态,适用于需要持续跟踪的业务场景。 2. **Entity Bean**:用于表示持久化数据的对象,映射数据库表与对象之间的...

Global site tag (gtag.js) - Google Analytics