JDO示例 - JPOX

JDO 示例 JPOX

(ALin 2006-12-27 00:28)

 
第一部分:相关概念
[JDO 的实现版本之一: JPOX]
JPOX JDO 的一个具体实现版本。其官方主页为: http://www.jpox.org/index.jsp
JDO 现在是 2.0 版,以前的 1.0 版的 Sun 官方有具体的实现,不过后来移交给 Apache 了,所以 Apache 网站上也有 JDO 的实现。这种标准的 API 加上具体的实现的方式在 Java 相关技术中很常见。下载 JPOX1.1.4 版。
 
[ 可持久化类 ]
JDO 规范定义了作为 Java 接口的可持久约定,称之为 PersistenceCapable ,同时还定义了类实现必须遵守的编程风格。遵守该约定的类被定义为是“可持久的”。 JOD 作为一种 ORM 解决方案,使用 JDO 可以有 3 种方法生成可持久类:

1.     源代码生成,即是实现相关的接口,自己编写相关的方法,在点类似于BMP EJB

2.     源代码处理。

3.     字节码增强(使用字节码增强工具:byte-code enhancer)

JDO 要求可持久类必须有一个不带参数的构造函数,可以是 public, protected, private, 只要保证定义的类及其潜在的子类能够访问即可。
 
[JDO 元数据 ]
JDO 无数据即是描述可持久化类与数据库相互关系的文件,是以 jdo 为扩展名 XML 文件。假如有一个类为:
alin.scut.jdo.Author ,则描述该类的元数据可以在以下文件中:

Ø         package.jdo

Ø         alin/package.jdo

Ø         alin/scut/package.jdo

Ø         alin/scut/jdo/package.jdo

Ø         alin/scut/jdo/Author.jdo

按以上顺序搜索元数据,并使用第一个发现的定义。
 
[JDO 配置文件 ]
和其他的 ORM 框架一样, JDO 也有一个配置文件,具体的实现可能有不同的配置文件。 JPOX 的配置文件为: jpox.properties ,作用和 Hibernate hibernate.cfg.xml 文件类似。同时,还应该为 JPOX 提供一个 Log4j 的配置文件,用来输出日志。
 
 
第二部分:示例
这个例子只简单地示范可持久化类的创建、删除、更新和查询,不涉及关系部分。当然,为了直观起见,照样不使用 IDE ,而使用简单的文本编辑器和相关的命令行工具。
 
一、 建立本项目的目录结构,本项目中一共只有一个可持久类, alin.demo.Author 。项目的根文件夹下面一共 3 个文件夹: bin, src, lib 。具体各个目录放置什么地球人都知道吧!?
lib 目录下的 JAR 文件就是 JDO2.0 的标准 API JPOX 的实现,由于使用到 Log4j ,因此还要把 Log4j JAR 文件也放到此目录下。最终的目录结构如下:
<Project>
lib
jdo.jar( 或者叫 jdo2-api.jar)
JDO2.0 AIPI
 
jpox.jar
JPOX1.1.4 实现
jpox-enhancer.jar
JPOX 的字节码增强器
log4j.jar
Log4j
bcel.jar
(jboss-4.0.2\server\default\lib 目录下面有 )
Byte Code Engineering Library
 (BCEL) ,这是 Apache Software
 Foundation Jakarta 项目的一部分。
src
alin/demo/Author.java
 
 
alin/main/ …… .java
这个包下面的源文件是示例应用程序
 
alin/demo/Author.jdo
 
jpox.properties
注意数据库 URL 后面部分的作用:
SelectMethod=cursor( 后面会说明 )
log4j.properties
 
bin
alin/demo/Author.class
 
 
alin/main/ …… .class
 
alin/demo/Author.jdo
这些文件都是直接从 src 目录下面复制过来的。
jpox.properties
log4j.properties
 
二、各文件具体内容:
(1) 可持久类 Author.java

代码1 Author.java

// Author.java -- Demostrate JDO.
// 2006-11-25 20:55
 
package alin.demo;
 
//import javax.jdo.spi.PersistenceCapable;
//import javax.jdo.JDOHelper;
public class Author {

   private int books;

   private String name;

  

   public Author(String name, int books) {

       this.name = name;

       this.books = books;

   }
  

   protected Author() {

   }
 

   public String getName() {

       return name;

   }
 

   public void setName(String name) {

       this.name = name;

   }
 

   public int getBooks() {

       return books;

   }
 

   public void setBooks(int books) {

       this.books = books;

   }
}
 
(2) 元数据文件
代码 2 Author.jdo

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE jdo PUBLIC

    "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN"

    "http://java.sun.com/dtd/jdo_2_0.dtd">

<jdo>

   <package name="alin.demo">

       <class name="Author" identity-type="datastore">

           <field name="books" persistence-modifier="persistent">

            </field>

           <field name="name" persistence-modifier="persistent">

                <column length="50" jdbc-type="VARCHAR"/>

            </field>

       </class>
   </package>
</jdo>
 
(3)JPOX 配置文件,注意这个属性: javax.jdo.PersistenceManagerFactoryClass ,代表的是 JDO PersistenceManagerFactory 的具体实现,这个值依赖于具体的实现。前面的一组属性是 JDO 的标准属性,任何实现都必须支持的,后面的是 JPOX 的扩展属性。
代码 3 jpox.properties
# jpox.properties -- jpox configuration.
# 2006-11-28 19:24
 
# -- Standard JDO properties. --
javax.jdo.PersistenceManagerFactoryClass=org.jpox.PersistenceManagerFactoryImpl
javax.jdo.option.ConnectionDriverName=com.microsoft.jdbc.sqlserver.SQLServerDriver
javax.jdo.option.ConnectionURL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JDO;SelectMethod=cursor
javax.jdo.option.ConnectionUserName=sa
javax.jdo.option.ConnectionPassword=sqlserversaps
 
# -- JPOX properties. --
org.jpox.autoCreateSchema=true
org.jpox.validateTables=false
org.jpox.validateConstraints=false
 
(4) log4j 配置文件
代码 4 log4j.properties
# LOG4J Configuration
# ===================
 
# Basic logging goes to "jpox.log"
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=jpox.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} (%t) %-5p [%c] - %m%n

#log4j.appender.A1.Threshold=INFO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值