在WAS V7上进行EJB 3.0开发和部署的最佳实践

电脑杂谈  发布时间:2020-05-15 03:15:33  来源:网络整理

ejb开发_ejb开发 tomcat_ejb开发

朱志清和王伟

2009年12月31日发布

IBM WebSphere Application Server正式从7.0版开始支持EJB 3.0(用于EJB 3.0的功能包已在以前的6.1版本中发布). 当前基于WAS V7构建的EJB 3.0应用程序并不常见. 在实际的项目中,作者总结了使用WAS V7部署EJB 3.0应用程序时遇到的一些问题(开发细节的一部分)和最佳实践,并试图通过一些简单的例子将这些经验展示给在WAS V7环境中开发EJB的需求. 示例3.0应用程序开发人员.

本文基于以下条件:

接口,业务对象和实现逻辑是分开的:

建议将EJB客户端和所有定义的业务对象(业务对象)放在与依赖库相似的项目中,以便将来可以在其他项目中轻松调用它. 此外,这还提高了接口和业务对象的可维护性. 因此,在创建项目时,我们选择“创建EJB客户端JAR模块以保存客户端接口和类”选项(以便RAD自动生成的客户端将放置在客户端项目中,将来我们可以自定义业务对象也放置在项目中.

图 1. 创建客户端 JAR 模块

图 1. 创建客户端 JAR 模块

使用可视化工具生成界面代码:

如果在添加无状态会话bean时选择“将bean添加到类图”,则可以在类图中对bean执行基本操作. 如果选择bean的方法,然后在右键菜单中单击“ Java EE工具”->“升级方法”,则可以将该方法添加到bean的客户端接口代码中.

图 2. 生成接口代码

图 2. 生成接口代码

在开发企业应用程序时,不可避免地需要与其他组件进行交互. 下一节讨论EJB 3.0组件与其他一些组件的交互.

使用EJB客户端调用在应用程序服务器上发布的会话Bean通常具有某些限制(需要容器上下文-Context). 因此,在许多情况下,我们希望将其发布为Web服务,以使其易于调用.

ejb开发 tomcat_ejb开发_ejb开发

从下到上生成Web服务:

右键单击需要作为Web服务发布的无状态会话bean,选择“ Web服务”->“创建Web服务”,选择“自下而上的EJB Web Service”(自下而上的EJB Web Service)和EJB. 实现Bean(SLBSampleBean),将自动选择实现Bean. 确认Web Service源项目和EAR项目后,单击“下一步”.

在下一个配置中,我们需要注意名为“ HTTP router”的配置项. 当我们通过IBM导出工具将会话bean作为Web服务发布时,该工具实际上会生成一个接受Web服务请求的代理类. 在运行期间,它将接收到的Web服务调用请求转换为实际的会话bean. 调用并以Web服务响应的形式返回调用结果. 由于此代理是Servlet,因此必须将其放置在Web应用程序中. IBM导出工具可以帮助我们生成这样的Web应用程序并将代理Servlet放入其中,“ HTTP路由器”配置项的值就是Web应用程序的项目名称.

图 3. EJB 3.0 Web Service 的架构

图 3. EJB 3.0 Web Service 的架构

使用激活规范代替侦听器端口:

激活规范是一组消息属性的配置. 通过此配置,可以通过JCA-Java EE连接器体系结构1.5规范Integrate连接Websphere Application Server和企业信息系统. 在WebSphere Application Server V7(V6)之前的版本中,仅侦听器端口用于连接Message Queue和消息驱动的Bean,并且自版本7起,激活规范用于连接至Message Queue,并且侦听器端口不再推荐的. 因此,在将来的开发中,我们将使用更多的激活规范来替换以前的侦听器端口.

您需要创建一个激活规范才能连接到Message Queue. 单击管理控制台左侧的“资源”“ JMS”“激活规范”. 在右侧页面上,我们可以看到所有JMS激活规范的列表. 点击“新建”按钮. 在下一种形式中,选择WebSphere MQ消息传递提供程序,这意味着创建连接到MQ的激活规范. 设置JNDI名称,然后输入目标队列的类型(队列). 目标队列是MDB消息的来源.

选择“在此向导中输入所有必需的信息”以设置连接详细信息. 输入MQ服务器上队列管理器的名称. 设置连接详细信息,请特别注意确保连接通道(Connection Channel)配置正确,该值可以在MQ服务器上查看.

图 4. MQ 激活规范的连接配置

图 4. MQ 激活规范的连接配置

以上操作在管理控制台中完成. 为了提高环境配置的自动化程度,以提高实际项目中的部署和测试效率,我们还可以使用JACL脚本来完成上述配置(以方便批处理操作). 以下是使用JACL脚本的示例:

 $AdminTask createWMQActivationSpec [$AdminConfig getid /Server:server1] 
 {-name "ActSpecSample" -jndiName "ActSpecSample" -destinationJndiName "QSample"
  -destinationType javax.jms.Queue -qmgrName QueueSample -qmgrHostname localhost
   -wmqTransportType CLIENT -qmgrPortNumber 1414 
   -qmgrSvrconnChannel SYSTEM.DEF.SVRCONN} 
 $AdminConfig save

如果您想进一步了解JACL脚本语法和其他详细信息,请参阅相关文档.

ejb开发 tomcat_ejb开发_ejb开发

在消息驱动的bean和激活规范之间建立绑定关系:

在创建消息驱动bean(MDB)和相应的激活规​​范之后,您需要将两者绑定. 您可以使用绑定文件来实现MDB和MQ激活规范之间的绑定: 该文件的文件名必须命名为ibm-ejb-jar-bnd.xml并放置在项目的META-INF目录中.

图 5. 手动创建 MDB 绑定文件

图 5. 手动创建 MDB 绑定文件

以下是绑定文件的示例. 我们需要配置要绑定的MDB的名称和要使用的MQ激活规范的JNDI名称.

 <?xml version="1.0" encoding="UTF-8"?> 
 <ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee 
 http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" 
 version="1.0"> 
 <message-driven name="MDBSampleBean"> 
 <jca-adapter activation-spec-binding-name="ActSpecSample" /> 
 </message-driven> 
 </ejb-jar-bnd>

请注意上面示例中的标记,该标记完成了将MDBSampleBean绑定到激活规范ActSpecSample的功能.

但是,我们还有另一种替换绑定文件的方法: 将EJB项目部署到WAS V7时,可以在管理控制台中配置绑定. 如果相应的EJB项目不包含绑定文件,则在部署过程中ejb开发,我们可以看到一个额外的步骤(如下图3所示)为消息驱动的bean绑定侦听器,在这一步中,我们可以指定需要的激活规范. 绑定.

图 6. 部署过程中绑定激活规范

类似于配置绑定文件,我们还需要设置要在控制台中绑定的激活规范的JNDI名称.

图 7. 激活规范的配置

图 7. 激活规范的配置

完成部署步骤后,我们创建的MDB可以正常工作(省略测试过程).

在EJB 3.0中ejb开发,我们使用JPA(Java持久性API)来处理与持久性相关的操作. 作者无意在本章中对JPA进行深入讨论. 如果您需要更多有关JPA的技术细节的信息,请参考相关的文献或用户手册.

ejb开发_ejb开发 tomcat_ejb开发

请勿使用ORM文件:

在创建项目之前,您应该首先在RAD环境中建立到目标的连接(在“数据源资源管理器视图”中创建连接). 创建JPA项目时,请选择先前建立的连接并配置默认方案(架构). 为了简化开发,EJB 3.0添加了对Java批注的支持. 因此,作者建议不要为项目指定ORM(对象关系映射)文件,而应使用Java注释(注释). orm.xml“选项.

图 8. JPA 工程的配置

图 8. JPA 工程的配置

使用IDE辅助代码生成:

在创建的JPA项目中,我们可以在“ JPA Content”中看到一个名为persistence.xml的文件,该文件是整个持久性环境的配置文件,并维护大多数JPA项目的配置信息. ,右键单击它,然后选择“配置项目以进行JDBC部署”以设置JDBC相关的配置项. 完成设置后,与连接有关的信息将添加到persistence.xml文件中.

接下来,我们使用JPA工具从表生成实体. 右键单击JPA项目,然后选择“ JPA工具”“生成实体”,然后选择已配置的连接和方案(). 选择需要生成的表. 在这里,我们选择已创建的表TABLESAMPLE并指定要生成的目标目录和包.

图 9. 选择需要生成实体的表

图 9. 选择需要生成实体的表

该过程完成后,将在相应的包下生成一个实体类,并将生成的实体类注册到persistence.xml文件中,如下所示:

 <class>com.ibm.gbsc.entity.Tablesample</class>

EntityManager是JPA的重要概念. EntityManager实例与持久性上下文相关联,并且持久性上下文是唯一标识的持久性实体(实例)的实例的集合. 将实体实例(Entity Instance)及其生命周期移交给持久性上下文进行维护. EntityManager定义了用于与持久性上下文进行交互的接口方法,并通过主键或其他条件来查找实体实例(Entity Instance),向上层提供API以创建或删除持久实体实例(Entity Instance).

获取EntityManager实例:

我们可以通过注释在会话bean中注入一个EntityManager对象,代码如下:

ejb开发_ejb开发 tomcat_ejb开发

 @PersistenceContext(unitName = "JPASample") 
    private EntityManager em;

避免使用DAO模型:

当然,我们也可以使用RAD提供的JPA工具来生成一个名为“ JPA Manager Bean”的对象来管理实体. 该管理bean使用我们众所周知的DAO模型来构建管理系统,该系统一次封装在EntityManager上,并提供基本的CRUD方法. 但是,不建议使用JPA来管理企业应用程序中的bean. 而是,使用先前的方法并依靠容器来注入EntityManger. 这样做的好处是,容器可以帮助我们更好地管理和维护EntityManager,并可以轻松地将其添加到全局事务中(JPA管理Bean不能用于全局事务中). 以下方法(会话bean的方法)举例说明了EntityManager对象的使用:

 public void insertDB(long id) { 
        Tablesample bo=new Tablesample(); 
        bo.setId(id); 
        bo.setName("test"+id); 
        em.persist(bo);       
 }

事务是企业应用程序中非常重要的一部分. 通常,存在三种事务处理模型: 本地事务处理模型,程序化事务处理模型和声明性事务处理模型.

本地交易模式:

在本地事务模型中,事务由基础(DBMS)或消息提供程序(Message Provider)管理和维护. 从开发人员的角度来看,仅需要管理连接,而不需要连接. 例如,我们通常会开发简单的JDBC应用程序.

本地事务模型可以在小型项目的简单更新操作中很好地工作,但是在更复杂的应用程序场景中,该模型将使开发人员面临许多问题. 一个问题是,当处理复杂的逻辑时,面向连接的编程很容易导致程序错误. 另一个问题是,在XA全局事务中很难协调各种资源的工作.

通常,EJB项目不使用这种事务模型. 让我们关注其他两个交易模型:

程序化交易模型:

在程序化交易模型中,开发人员不再面对联系,而是开发面向交易的对象. 在EJB项目中,这种事务模型体现为由Bean管理的事务(Bean-Managed Transactions-BMT).

我们可以如下开发使用程序化交易模型:

 UserTransaction txn = sessionCtx.getUserTransaction(); 
        txn.begin(); 
        try { 
            // Some operation 
 // ... 
            txn.commit(); 
        } catch (Exception e) { 
            log.error(e); 
            txn.rollback(); 
            throw e; 
        }

代码中的sessionCtx是Bean的私有字段,可以通过注释@Resource从容器中注入它. 另外,我们还需要在Bean的实现类的定义中(再次通过注释)告诉容器Bean的事务模式是Bean管理的:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-210551-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...