kodo是bea公司收购solarmetric公司后获得的持久层框架项目,以前只是支持jdo标准,2006年2月13日,bea公司宣布发布kodo项目的最新版本--kodo 4.0.0 early access 4,kodo 4.0.0 ea4支持ejb3和jdo2两个标准,本文中,我们将首先学习和了解kodo ejb, 了解如何使用kodo ejb完成开发工作。
我们将按照两种不同的情况讲述如何使用kodo ejb进行开发,一种是通过命令行工具,另外一种是在eclipse中使用ant任务。
关于ejb3和jdo2的更多内容请大家查看文章最后参考资源中的相关内容。
为什么使用kodo ejb在kodo ejb框架中,对象和关系数据库之间的映射(对象-表,对象属性-字段等)都是使用jdk5.0中的最新特性—注释(annotation)来提供,不再需要提供额外的配置文件。
根据ejb3规范的要求,kodo ejb除了支持在ejb容器中使用满足重量级企业应用的需求之外,也支持在普通java应用中采用,提供轻量级的持久层框架。只不过当我们在ejb容器中使用kodo ejb时我们需要更多的工作以便满足ejb容器的要求。
下载、安装kodo由于kodo是基于注释机制的框架,我们必须使用jdk5.0完成开发工作。所以下载、安装kodo之前,请确保您已经下载和安装了jdk5.0。
为了演示的需要,我们选择mysql数据库作为持久化的目标数据库,请大家自己到www.mysql.com下载最新的mysql数据库后安装。
下载、安装kodokodo的最新版本是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的安装目录。
kodo ejb实例上面的工作完成以后,我们就可以开发kodo ejb应用了,下面的例子将主要讲述如何开发一个轻量级的kodo ejb例子,支持在java应用中的调用,而不依赖于ejb容器,关于如何在ejb容器中配置使用kodo ejb是一个大的课题,作者将另外撰文详细论述。
下面我们将用一个简单的例子来说明创建kodo ejb应用的典型步骤,实例中我们将创建名为book的持久化对象,该对象将被持久化到本地的mysql数据库中。
请大家注意的是,下面的说明都基于windows 2000操作系统,如果您使用其它操作系统,可能需要做出相应的变更。
在c:盘根目下创建名为kodoexamples的目录,我们所有的类文件和配置都放在这个目录下。
ackage org.vivianj.kodo.examples.beans; import javax.persistence.basic; import javax.persistence.column; import javax.persistence.entity; import javax.persistence.generatedvalue; import javax.persistence.generationtype; import javax.persistence.id; import javax.persistence.inheritance; import javax.persistence.inheritancetype; import javax.persistence.table; /** * book 用于表征系统中的书籍对象,他有两个属性id - 书籍编号,书籍编号将由mysql数据库自动生成name - 书名 */ /* entity注释表示该类是持久化类,的name属性是该实体在查询中对应的唯一名称,默认是类名 */ (name = "book") /* table注释的name属性指定该持久化类对应的数据表的名称,默认数据表名和类名保持一致,为了增强代码的可移植性,建议大家在name属性中使用大写英文字母 */ (name = "books") /* inheritance注释的strategy确定了持久化对象和数据表之间的关系,可选择项包括single_table、joined和table_per_class,我们这里采用table_per_class */ (strategy = inheritancetype.table_per_class) public class book { /* id注释表示该字段是标识字段 */ /* generatedvalue注释定义了该标识字段的产生方式,我们的演示系统中id由mysql数据库字段自动生成,因此选择generationtype.identity */ (strategy = generationtype.identity) /* column注释的name属性定义了该类属性对应的数据字段的名称,为了最大限度保持系统和数据库之前的独立性,建议使用大写字符 */ (name = "id") public int id; /* basic注释表示该属性是基本属性 */ /* column注释的name属性定义了该类属性对应的数据字段的名称,为了最大限度保持系统和数据库之前的独立性,建议使用大写字符 */ (name = "name") public string name = null;
在c:kodoexamples新建meta-inf目录,随后在该目录下新建kodo.xml和persistence.xml文件。
a) kodo.xml文件中提供访问数据库所需要的细节信息、使用kodo所需要的授权(license)内容、kodo运行时的日志管理等。 <?xml version="1.0"?> <persistence> <persistence-unit name=""> <properties> <!-- kodo的序列号,请输入您下载或者购买kodo时得到的license --> <property name="kodo.licensekey" value="093d-bf3f-c10e-0f8f-0f00" /> <!-- 以下是访问数据库时需要提供的信息 --> <property name="kodo.connectionurl" value="jdbc:mysql://localhost/kodo" /> <property name="kodo.connectiondrivername" value="org.gjt.mm.mysql.driver" /> <property name="kodo.connectionusername" value="root" /> <property name="kodo.connectionpassword" value="root" /> <!-- 设置kodo运行过程中的日志级别 --> <property name="kodo.log" value="defaultlevel=warn, runtime=info, tool=debug" /> </properties> </persistence-unit> </persistence> b) persistence.xml提供ejb实体管理所需要的信息,比如确定使用哪种持久化管理器和需要被管理的持久化类。 <?xml version="1.0"?> <persistence> <persistence-unit name=""> <provider>kodo.persistence.persistenceproviderimpl</provider> <!-- 需要被kodo ejb管理的持久化类 --> <class>org.vivianj.kodo.examples.beans.book</class> </persistence-unit> </persistence>
打开一个命令行窗口,进入%kodo_home%/bin目录下,执行kodocmd.cmd命令,然后将mysql的驱动文件使用set classpath=%classpath%;c:/mysql-connector-java-3.1.8-bin.jar这样的方式加入到classpath中。
执行javac c:kodoexamplesorgvivianjkodoxampleseans*.java编译持久化类。
kodo中使用加强工具(enhancer)对持久化类进行调整,支持性能优化、懒惰式装载等特性。
我们可以使用kodoc c:kodoexamplesorgvivianjkodoxampleseans*.java这样的命令来完成持久化类的加强工作。
kodo中提供了专门的mappingtool工具,能够自动的根据持久化类及他们之间的关系为我们生成创建数据库所需要的sql语句或者直接创建数据表。
演示实例中,我们使用kodoc c:kodoexamplesorgvivianjkodoxampleseans*.java完成数据表的创建,命令执行完成后,我们访问mysql中的kodo数据库,可以看到里面已经创建了名为books的数据表。
现在,所有的工作都已经完成,我们可以编写一段代码测试一下上面的工作是否有效,在c:kodoexamples目录下新建test.java,然后输入如下内容:
import javax.persistence.entitymanager; import javax.persistence.entitymanagerfactory; import javax.persistence.persistence; import javax.persistence.persistencecontexttype; import org.vivianj.kodo.examples.beans.book; public class test { public static void main(string[] args) { /* 获得ejb的实体管理器 */ entitymanagerfactory emf = persistence.createentitymanagerfactory(null); entitymanager em = emf .createentitymanager(persistencecontexttype.extended); /* 开始事务 */ em.gettransaction().begin(); /* 创建新的持久化对象 */ book book = new book(); /* 设置book对象的name属性 */ book.name = "kodo入门"; /* 持久化对象 */ em.persist(book); /* 结束事务 */ em.gettransaction().commit(); em.close(); emf.close(); } }
执行test类,执行完后会发现books表中已经增加了一条新的记录。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器