Castor 是ExoLab Group下面的一个开放源代码的项目,它主要实现的是O/R映射功能。它主要API和数据接口为:JDO-like, SQL, OQL, JDBC, LDAP, XML, DSML。它支持分布式目录事务处理和时间;提供处理XML、Directory、XADirectory的类库,提供从XML到JAVA类的转换机制。
上面这段是网上的一段评论,大概介绍了Castor的一些特性,我们需要注意的是,Castor所提供的是Castor JDO,而不是SUN所提供的JDO规范(JSR000012),所以在上面的评论中使用了JDO-like这样的评语,在后面我们会进一步讨论这个问题 的。
呵呵,不过在我看来,Castor对我们的意义,最重要的就是其XML映射机制和其独创的Castor JDO的机制了。下面我会分别就这两个问题加以介绍:
一、Castor XML
我 们可以认为这是一个独立的Framework,专门负责与XML打交道。在了解众多的类和API之前,我们有必要了解其整体的构建思想。在OOP中,我们 都知道,对象是类的实体化,我们也知道,在OP中所要完成的工作是将对象持久保存下来,那么相对的,我们同样可以用类似的方法将类的定义和信息也保存下 来,这是否可以称为CP呢?呵呵,不管叫什么名字,在Castor中的XML处理中,就是根据这样的思想完成了两个独立的功能块,一块负责类到XML的保 存和加载,另一块负责对象到XML的保存和加载。具体的构造我们可以参看下图:
上面这段是网上的一段评论,大概介绍了Castor的一些特性,我们需要注意的是,Castor所提供的是Castor JDO,而不是SUN所提供的JDO规范(JSR000012),所以在上面的评论中使用了JDO-like这样的评语,在后面我们会进一步讨论这个问题 的。
呵呵,不过在我看来,Castor对我们的意义,最重要的就是其XML映射机制和其独创的Castor JDO的机制了。下面我会分别就这两个问题加以介绍:
一、Castor XML
我 们可以认为这是一个独立的Framework,专门负责与XML打交道。在了解众多的类和API之前,我们有必要了解其整体的构建思想。在OOP中,我们 都知道,对象是类的实体化,我们也知道,在OP中所要完成的工作是将对象持久保存下来,那么相对的,我们同样可以用类似的方法将类的定义和信息也保存下 来,这是否可以称为CP呢?呵呵,不管叫什么名字,在Castor中的XML处理中,就是根据这样的思想完成了两个独立的功能块,一块负责类到XML的保 存和加载,另一块负责对象到XML的保存和加载。具体的构造我们可以参看下图:
如 上图所描述的,marshaller和unmarshaller负责对象和XML文件间的转换。这种转换过程主要在服务器端完成。在运行中,客户端的请求 发送到服务器端后,对内存中的对象进行相应操作,然后将处理完毕的对象marshall成为XML文件,或者进一步将XML文件格式化为HTML文件发送 到客户端。如果以XML文件格式发送到客户端,那么在客户端实行unmarshall操作将XML文件还原为内存中的对象,这样就完成了交互过程。
至 于source generator则和TOPLINK中实现的相类似,不过它没有提供可视化的XML Schema的工具而已。我们编写好描述类结构的XML文件,然后运行Castor提供的source generator就可以自动生成JAVA代码了。有趣的是,它自动生成的代码和BEAN的风格很类似,很容易看懂。
对于XML而言,只要把握了这样的整体,其他的诸如代码生成中的两种模式、映射规范、数据结构问题等细节问题就很简单了,在文档中附有很实用的例子和解释,这里就不再多说了。
二、Castor JDO
要了解JDO首先要认识两个基本的问题:
1、和SUN JDO的关系
Castor JDO和SUN JDO并不相同,Castor JDO是独立于SUN JDO发展起来的,但是它们所完成的工作非常相似。虽然也可以将Castor JDO重新定制成SUN JDO那个样子,但是由于两者在锁定策略上存在的根本差异,这样做并不划算。在内部,