热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->java 
站内搜索:
在JAVA EE环境下使用Kodo EJB(1)
作者:肖菁 来源:唯J族 整理日期:2007-8-7

 肖菁
 软件工程师
 king@vivianj.org
   BEA dev2dev长沙UserGroup Leader,开源项目BuildFileDesigner、V-SuperMedia创始人,IBM developerWorks/BEA dev2dev/Sun技术社区撰稿人,主要研究J2EE编程技术、Web Service技术以及他们在 WebSphere、WebLogic、 Apache平台上的实现,拥有 IBM 的 Developing With Websphere Studio证书。
 
 
[文章摘要]  Kodo EJB不仅可以在一般Servlet容器或者Application中使用,而且能够在JAVA EE环境中运行,充分利用JAVA EE容器中提供的优越特性如声明式安全等。本文中作者通过一个简单的例子,讲解和演示如何在JAVA EE环境下使用Kodo EJB。
[关键词]:  Kodo EJB3 Annotation JAVA EE Weblogic
 
  Kodo EJB 是一个支持对象 / 关系映射的框架,根据 EJB3 规范的要求, Kodo EJB 除了支持在普通 Java 应用中提供轻量级的持久层框架之外,也支持在 JAVA EE 容器中使用满足重量级企业应用的需求,充分利用 JAVA EE 容器中提供的优越特性如容器管理事务、远程 (Remote) 访问。

  基于 Kodo EJB 开发的应用支持使用 EJB 或者 JCA 标准接入到 JAVA EE 环境中:

•  JCA

  Kodo EJB 支持 JCA1.0 标准,因此基于 Kodo EJB 开发的应用可以和其他 JCA 资源一样轻松的发布到 JAVA EE 应用服务器上。

•  JNDI

  另外一种方式是将 kodo.persistence.EntityManagerFactoryImpl 的一个实例绑定到 JNDI ,然后通过查找 JNDI 的方式使用 Kodo EJB 应用。虽然这种方式需要开发者根据不同的 JAVA EE 容器编写代码才能完成,但是这种方式能够保持最大限度的 JAVA EE 容器可移植性,而且为在那些不支持 JCA 标准的 JAVA EE 容器中使用 Kodo EJB 创造可能。

  本文中们将以通过一个简单的例子,简单的讲解和演示如何在 Weblogic9 上通过 JNDI 方式来访问 Kodo EJB 应用。


环境准备

  由于 Kodo 是基于注释机制的框架,们必须使用 JDK5.0 完成开发工作。所以下载、安装 Kodo 之前,请确保您已经下载和安装了 JDK5.0 。

  为了演示的需要,们选择 MySQL 数据库作为持久化的目标数据库,请大家自己到 www.mysql.com 下载最新的 MySQL 数据库后安装。


安装 Kodo

  Kodo 的最新版本是 Kodo 4.0.0 Early Access 4 ,目前大家可以到 http://www.solarmetric.com/ 去下载试用版本,下载时需要注册,你会得到 30 天的 License 。

  将下载的压缩文件解压到 c:/kodo4 目录下 ( 后面将使用 %KODO_HOME% 来引用这个目录 ) ,打开 %KODO_HOME%/bin/kodocmd.cmd 文件,将其中的 KODODIR 设置为您的 Kodo 的安装目录,将 JDKHOME 设置为 Java 的安装目录。


安装 Weblogic9

  Kodo EJB 在 JAVA EE 环境下运行时需要 EJB 容器支持 EJB3 标准, BEA 最新发布的 Weblogic9 服务器就支持 EJB3 标准,因此们选择 Weblogic9 作为演示时使用的目标服务器。大家可以到 http://www.bea.com 下载 Weblogic9 ,然后将 Weblogic9 安装到自己的机器上。

  [ 注 ] 本文中的实例是实现可远程访问的 EJB 实例,因此你可以将 Weblogic9 安装到其他机器上,不过客户端调用的时候需要增加一些环境变量,请参考后面的说明。


开发 Kodo EJB 应用

  由于篇幅的关系,们直接使用《 Kodo EJB :符合 EJB3 规范的持久层框架》一文中已经创建好的例子,包括环境准备、持久化类创建、数据库创建等工作,下面的章节中将尽量不再重复《 Kodo EJB :符合 EJB3 规范的持久层框架》一文中已经提到的步骤,而是重点描述需要额外完成的工作。

  在 EJB 开发中,们通常都采用 Session Fa?ade 设计模式,因此下面的例子也使用了这种设计模式来封装 Kodo EJB 应用。

  们使用一个无状态的 Session Bean 来封装对 Book 类的所有操作,由于 Kodo EJB 应用中需要开发者完成 kodo.persistence.EntityManagerFactoryImpl 的实例到 JNDI 的绑定,们把这部分工作访在 Session Bean 中完成,下面是 Session Bean 的接口和实现的全部代码,请注意代码中增加的注释,他们有助于您了解 Kodo EJB 如何工作的。


BookBean 类

  下面是 BookBean 类的源代码,请大家特别注意 BookBean 类中的 setSessionContext 方法,其中的代码将 kodo.persistence.EntityManagerFactoryImpl 的实例绑定到 JNDI 上。

package org.vivianj.kodo.examples.ejb.stateless;

 

import java.rmi.RemoteException;

import java.util.Collection;

 

import javax.ejb.EJBException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.PersistenceContextType;

import javax.persistence.Query;

 

import kodo.persistence.KodoPersistence;

 

import org.vivianj.kodo.examples.beans.Book;

 

/**

* BookBean 提供 Session Bean 的实现类

*/

public class BookBean implements SessionBean {

protected SessionContext ctx;

 

private EntityManagerFactory emf;

 

/**

* getBookById 根据 Book 对象的 id 属性查找、返回符合条件的 Book 对象

*

* @param id

* Book 对象的编号

* @return 编号为 id 的 Book 对象

* @throws RemoteException

*/

public Book getBookById(int id) throws RemoteException {

/* 获得 EJB 的实体管理器 */

EntityManager em = emf

.createEntityManager(PersistenceContextType.EXTENDED);

try {

/* 开始事务 */

em.getTransaction().begin();

/* 处理业务 */

Book book = em.find(Book.class, id);

/* 结束事务 */

em.getTransaction().commit();

 

return book;

} finally {

/* 关闭 EJB 实体管理器 */

em.close();

}

}

 

/**

* updateBook 更新 Book 对象的信息

*

* @param book

* 需要更新的 Book 对象

* @throws RemoteException

*/

public void updateBook(Book book) throws RemoteException {

/* 获得 EJB 的实体管理器 */

EntityManager em = emf.getEntityManager();

try {

/* 开始事务 */

em.getTransaction().begin();

/* 处理业务 */

em.merge(book);

/* 结束事务 */

em.getTransaction().commit();

} finally {

/* 关闭 EJB 实体管理器 */

em.close();

}

}

 

/**

* createBook 方法用于持久化新的 Book 对象

*

* @param book

* 被持久化的 Book 对象

* @throws RemoteException

*/

public void createBook(Book book) throws RemoteException {

/* 获得 EJB 的实体管理器 */

EntityManager em = emf.getEntityManager();

try {

/* 开始事务 */

em.getTransaction().begin();

/* 处理业务 */

em.persist(book);

/* 结束事务 */

[1]  [2]  [3]  
相关文章