查询对象
JDO规范要求开发商必须提供使用JDOQL的查询能力,JDOQL是一种面向围绕被持久化对象的查询语言。PersistenceManager类定义了构造Query实现类的实例的方法。一个查询过滤器可以被指定为一个布尔表达式,就像SQL的布尔操作符。
生命周期开发:在你的应用程序中使用JDO
可以通过以下六个步骤建立一个JDO应用:
1. 设计你的范围内的将会正常使用的类。对一个要求持久化的类的唯一要求就是它要有一个默认构造函数,访问权限可能是private。
2. 使用元数据定义持久化定义:在这个步骤中,你编写元数据,指定那些类和字段应该被持久化等等。这个文件可以包含对于一个类或一个或者多个包含持久类的包的持久化信息。一个类的元数据文件的名称是这个类的名字加上“.jdo”后缀,注意,这个文件必须放在和.class文件相同的目录中。对于整个包的元数据文件的必须包含在一个称作package.jdo的文件中。元数据文件可以使用XDoclet或手动开发。下面是一个简单的对于两个类的元数据文件:
<!DOCTYPE jdo SYSTEM "jdo.dtd">
<jdo>
<package name="com.xyz.hr">
<class name="Employee" identity-type="application" objectidclass="EmployeeKey">
<field name="name" primary-key="true">
<extension vendor-name="sunw" key="index" value="btree"/>
</field>
<field name="salary" default-fetch-group="true"/>
<field name="dept">
<extension vendor-name="sunw" key="inverse" value="emps"/>
</field>
<field name="boss"/>
</class>
<class name="Department" identity-type="application" objectidclass="DepartmentKey">
<field name="name" primary-key="true"/>
<field name="emps">
<collection element-type="Employee">
<extension vendor-name="sunw" key="element-inverse" value="dept"/>
</collection>
</field>
</class>
</package>
</jdo>
3. 编译这些类,并且使用JDO加强器来加强它们。任何persistence-capable类的实例在被JDO持久化引擎管理之前必须被加强。JDO字节码加强器通过对类定义特定的改变来装换这个类,使得任何持久实例可以和数据存储中的数据描述保持同步。和参考实现一起发行的JDO加强器,能够从Sun微系统得到,可以使用如下的方式运行:
%JDO-HOME%\lib\jdo.jar;%JDO-HOME%\lib\jdori.jar;
%JDO-HOME%\jdori-enhancer.jar com.sun.jdori.enhancer.Main -d
\enhanced -s . -f path\tp\package.jdo path\to\theclasses.class
注意:对JDO加强器最重要的参数是一个.jdo文件的名字和.class文件的名字。另外,
·-d选项指定输出文件的目标文件夹;
·-s选项指定jdo和class文件的源文件夹;
·-f选项强制重写输出文件。
如果忽略这个步骤,那么当你运行应用程序和持久化一个对象时将会抛出ClassNotPersistenceCapableException异常。
4. 为被持久化的类建立数据库表。如果你已经有了一个数据库方案,那么这一步是可选的。基本上,你必须建立表、索引和在JDO元数据文件中为类定义的外键。有些JDO实现包含一个方案工具,可以根据JDO元数据文件产生所有的这些东西。
5. 编写代码来持久化你的对象。在这个步骤中,你要指定那些类在什么时间被实际持久化。正如前面提到的,最初的步骤是获得一个PersistenceManager的使用权。
6. 运行你的应用程序。使用java命令,并且包含必要的.jar文件在你的classpath中。
结束
JDO提供了基于接口的数据存储定义和事务处理,以及持久存储的数据到本地java技术对象的转换和选择。它致力于三种情况的需求:
(1)一种持久保存Java技术对象到事务性数据存储的标准。
(2)一种对待关系性数据库数据像Java技术对象一样的标准方式。
(3)一种联合那些对象定义事务性语义的标准方式。
JDO API,仅仅是由一些接口组成,非常便于学习和使用,但是更重要的是它为对象持久化定义了一种标准。今后将会有很多JDO实现供选择,其中有些将是免费的。JDO允许你通过使用POJO来获得它的简便性,并非使用私有的API。
JDO有一个充满活力的社区。所以如果你正在为你的POJO寻找持久化解决方案,JDO是一个通过JCP项目开发的标准。JDO为POJO持久化提供了一个丰富和具有全部特征的JSR规范,并且很多开发商正在提供竞争性的JDO实现。EJB3.0,正由Sun微系统和来自于不同的持久化开发商的专家创建,将是未来持久化模型的选择。
