如何定义无状态会话类型EJB组件
来源:互联网 发布:淘宝店铺阶层有什么用 编辑:程序博客网 时间:2024/05/16 06:34
EJB2.0规范规定无状态会话类型EJB组件的Home接口继承EJBHome接口对象,用于定义客户端创建、查找和删除EJB组件对象实例的方法。该接口中只能包含一个没有任何参数的创建组件对象实例的create方法。遵循EJB2.0规范定义的该组件对象Home接口如下面代码所示:
在该接口中定义的用于创建EJB组件对象实例的create方法必须返回该EJB组件对象的Remote接口并且该方法能够抛出RemoteException异常和CreateException异常。
EJB组件的Remote接口用于定义组件能够提供的商务方法,该接口继承EJBObject接口对象。
就本讲要创建的获取税率的无状态会话类型EJB组件而言,在Remote接口中需要定义返回税率值的getTaxRate方法。定义TaxRateEJB组件对象的Remote接口如下面代码所示:
在TaxRateEJB组件对象的Remote接口中定义的getTaxRate方法用于客户端应用或其它EJB组件获取用于计算纳税额的税率。另外,在Remote接口中定义的组件商务方法除了抛出RemoteException异常外,还可以抛出用户定义类型异常UserException。该异常的定义代码如下:
由上面的用户异常类型定义代码可以看出:在创建EJB组件过程中定义的用户异常与通常JDK应用程序中创建的用户类型异常方式相同。
无状态会话类型EJB组件的组件类用于定义在Home接口中定义的创建组件对象实例方法、在Remote接口中定义的组件商务方法以及SessionBean接口中的组件生命期控制方法。
实现Home接口中定义的create方法
为了将Home接口中定义的创建组件对象实例的create方法和该方法在组件类中映射的方法名称区分开,按照EJB规范的定义,在Home接口中定义的create方法在组件类中映射的方法名称为ejbCreate。EJB组件类中ejbCreate方法定义如下:
由该方法的定义可以看出: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方法的实现代码如下:
由该方法的实现代码可以看出:该方法只是返回浮点数0.1作为税率而没有在该方法中定义其它保持客户端应用状态的代码。
实现SessionBean接口中定义的方法
从上一讲的SessionBean接口定义可以看出:该接口的定义中包括组件生命期控制方法以及设置组件实例对象的上下文方法。在组件生命期控制方法中,ejbRemove方法用于EJB容器调用该方法删除由ejbCreate方法创建的组件对象实例,ejbActivate方法和ejbPassivate方法用于将EJB组件在激活或关闭状态之间进行转换。
SessionBean接口中的SetSessionContext方法用于将EJB容器当前的上下文状态记录在会话类型EJB组件实例的会话上下文(SessionContext)对象实例中,当EJB容器再次调用该组件对象实例中的方法时能够获取该EJB组件的运行环境状态。
本讲创建的无状态会话类型EJB组件只是用于客户端应用或者其它EJB组件获取计算纳税额的税率,没有占用数据库连接等系统资源,因而不需要在EJB服务器端维护任何客户端应用状态。因此,在EJB组件类中只需编写上述方法的定义框架即可,不需要为这些方法编写任何实现代码,如下面代码所示:
EJB组件类的定义框架
在TaxRateEJB组件对象的组件类定义中,包括3.1-3.3节中定义的各个方法以及一个该类的构造方法。该类定义的框架代码如下:
通过前面的讲解,您是否对EJB的无状态会话组件有个比较深入的了解呢?您可以在下面留下对此次系列讲座的看法和意见,也可以到开发者联盟与网友讨论。接下来,我们将开始进入有状态会话类型EJB组件及EJB实体组件的介绍,敬请关注。
- 如何定义无状态会话类型EJB组件
- EJB 有状态会话bean无状态会话bean详解
- EJB有状态和无状态会话Bean的区别
- 无状态会话bean(1)---定义
- EJB会话bean,无状态会话bean和有状态会话bean
- 精通EJB(3) 无状态会话bean基础
- EJB循序渐进,手把手创建简单的无状态会话BEAN
- EJB 介绍 开发第一个无状态会话bean
- JBoss+Ant实现EJB无状态会话bean实例
- EJB基础一 无状态会话BEAN使用
- EJB中有状态会话Bean 和 无状态会话Bean 的区别
- EJB中有状态会话Bean与无状态会话Bean
- EJB中有状态会话Bean 和 无状态会话Bean 的区别
- EJB编程中有状态会话Bean和无状态会话Bean
- EJB有状态的会话Bean和无状态的会话Bean的区别
- EJB-无状态会话Bean与有状态会话Bean对比
- 【EJB学习笔记】——有状态的会话Bean和无状态的会话Bean
- EJB——有状态的会话bean和无状态的会话bean
- EJB概述:分布式多层体系结构
- Frankie Live CD版linux直接安装于Windows上面的方法。
- 修炼一名程序员的职业水准
- EJB组件:基本结构解析
- EJB会话组件分析
- 如何定义无状态会话类型EJB组件
- linux改物理ip
- 2005-2-24 情况不妙
- 解决Frankie Live CD-linux发行版中ADSL的问题。
- Webservice 的设计和模式
- 如何定制Yahoo! Store 购物车的HTML
- 一些常用的辅助代码 (网络收藏)
- 学习xml的简明教程
- Eclipse项目中的GMT项目