· 4.4. 增强我们的数据对象类代码
配置信息写完了,metadata也生成好了,下面就是用JDOGenie的类代码增强器增强我们编译生成的类代码。在这里,由于需要配置一些CLASSPATH、JDO文件路径等,我们写了一段Ant脚本来完成这些麻烦的工作。
这个Ant脚本保存在我们的项目根目录下,名为“build.xml”:
<?xml version="1.0" encoding="GB2312" ?>
<project name="creditSys" default="enhance">
<property name="src" location="src" />
<property name="build" location="classes" />
<property name="jdbc.jar" location="d:/bak/lib/mysql.jar" />
<path id="cp">
<pathelement path="${build}"/>
<pathelement path="${jdbc.jar}"/>
<fileset dir="." includes="*.jar" />
</path>
<target name="cleanup" description="清除所有编译生成的class文件">
<delete>
<fileset dir="${build}" includes="**/*.class"/>
</delete>
</target>
<target name="compile">
<javac debug="true" destdir="${build}" srcdir="${src}" classpathref="cp"/>
</target>
<target name="enhance" depends="cleanup, compile">
<taskdef classpathref="cp" resource="jdogenie.tasks"/>
<jdo-enhance project="${ant.project.name}.jdogenie" outputdir="${build}" />
</target>
<target name="run" description="运行credit.system.Main类,测试功能"> <java classname="credit.system.Main" classpathref="cp" fork="true" /> </target>
</project>
这样,我们需要增强类代码的时候,在DOS框中,在build.xml所在的目录下运行“ant”,即可完成增强过程。另外,要运行测试程序类credit.system.Main的话(后面会讲到),只需要运行“ant run”即可,这样可以解决没有类似JBuilder的IDE的问题。
· 4.5. 编写业务逻辑方法:永远不能回避的任务
业务逻辑,好象在面向对象编程中常常提到,但到底什么是业务逻辑呢?难道仅仅是为了显示自己很高深,所以张口闭口就业务逻辑?确实有这样一些人,谈论开发的分析与设计时,脱口而出就是“业务逻辑”,实际上可能他们自己也不知道到底什么才是业务逻辑。
我个人的理解可能也不是很充分。我是这样理解的:在应用中与存储无关的对象之间的协作(即属性的关联性的变化)就是业务逻辑,一般体现为一些规则,比如:当新生成一个交易时,就将信用卡的总交易次数加1,将系统的总交易次数也加1。类似这样的规则就是业务逻辑,这些是每个应用特定的,是工具无法自动为你实现的,必须在你自己的应用代码中体现,不论是作为Java代码,还是作为数据库存储过程,总之,必须有一段代码来体现这些业务逻辑。
采用JDO解决了存储的问题之后,我们就可以编写工具类(独立于数据类的包含业务逻辑方法的类)来完成需求中描述的功能了。注意我们在下面的代码中用到的JDO API。具体API的使用参见JDO文档以及本文末的参考文章中的《Java Data Objects第一章翻译》。
在完成第一个功能需求之前,我们先建立一些基础代码以将JDO集成起来。我们写一个名为“credit.system.Main”的工具类(也可称为控制类),来提供这些基础的方法:
package credit.system;
import javax.jdo.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("开始测试功能……");
}
/**
* 本方法专用于获取JDO API的核心对象:存储管理器PersistenceManager
*/
public static PersistenceManager getPersistenceManager() {
if(pmf == null) {
java.util.Properties p = new java.util.Properties();
try {
//从配置文件读入配置信息
p.load(Main.class.getClassLoader().getResourceAsStream("/creditSys.jdogenie"));
} catch(IOException ex) {
throw new RuntimeException(ex);
}
pmf = JDOHelper.getPersistenceManagerFactory(p);
}
return pmf.getPersistenceManager();
}
private static PersistenceManagerFactory pmf;
}
为能让我们的代码能够编译并运行,我们还需要JDO的API包和JDOGenie的支持包,这些支持包都被合成到JDOGenie的lib目录下的“jdogenie.jar”文件中,还有一个JTA包也是JDOGenie运行时必须的,即其lib目录下的jta.jar。我们将这两个jar文件拷贝到我们的项目目录下,以便与JDOGenie的目录划清界限,另外,还需要将JDOGenie的license目录下的“jdogenie.license”文件(也就是通过邮件获取的license文件),放到我们的CLASSPATH中。当然,也可以将该license文件和JTA包一并压缩到jdogenie.jar中,我就喜欢这样做,这样可以使对JDOGenie的依赖浓缩到一个jar文件中,方便在不同JDO产品间切换(因为我一般会让一个应用在不同的JDO产品下工作,以保证规范性和兼容性)。
(未完待续)
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/