Java开源实践(2)—EJBDoclet练习
Java开源实践(2)—EJBDoclet练习
Java开源实践(2)—EJBDoclet练习
关键词: xdoclet, ant, EJBDoclet, JbossIDE, eclipse, EJB
1, 开发前准备
下载并安装,
JDK5.0
Ant1.6.2
-----参考上一篇,了解如何设定jdk和ant的环境变量。
Xdoclet1.2.2
Jboss4.0.1 (windows)
Eclipse (windows eclipse-SDK-3.1M5a-win32.zip)
JBossIDE (Eclipse 插件JBossIDE-1.4.1-jre1.5-e31.zip)
----eclipse的插件对应的放到Plugins或features目录里。
2, 组织源码。
1) 打开eclipse,新建一个Java项目,命名为 ejbTest。
2) 在这个项目下,新增目录,(下面是这些目录与根目录的关系)
test
test/bin
test/ejb
test/ejb/src
test/ejbTest
test/ejbTest/src
lib
lib/j2ee (在Jboss目录,找到jboss-j2ee.jar,放到这个目录下。)
lib/xdoclet (在xdoclet目录,把lib目录里内容,放到这个目录下。)
使eclipse处于Resource视图可以看到如下文档结构。
3) 按以下路径新增目录,并把TestBean.java文件放到其中。
Path: test/ejb/src/com/wuder/ejb/session/beans/
文件内容为:
import java.rmi.RemoteException;
import java.util.Properties;
import junit.framework.Assert;
import junit.framework.TestCase;
import com.wuder.test.ejb.session.util.TestUtil;
import com.wuder.test.ejb.session.intf.TestHome;
import com.wuder.test.ejb.session.intf.Test;
public class TestBeanTest extends TestCase {
private Test c;
public static void main(String[] args) {
TestCase test=new TestBeanTest("testGetTestString");
junit.textui.TestRunner.run(test);
}
protected void setUp() throws Exception {
super.setUp();
Properties env = null;
try {
ClassLoader cl = this.getClass().getClassLoader();
java.io.InputStream in = cl.getResourceAsStream("ejb.properties");
env = new Properties();
env.load(in);
System.out.println("load jndi properties from ejb.properties");
} catch (Exception exc) {
System.out.println("no ejb.properties found, using default");
}
TestHome h = TestUtil.getHome(env);
c = h.create();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testGetTestString() {
try {
System.out.println(c.getTestString());
Assert.assertEquals("2005/03/30", c.getTestString());
} catch (RemoteException e) {
e.printStackTrace();
}
}
public TestBeanTest(String arg0) {
super(arg0);
}
}
4)在/test目录下,分别放入这两个文件。
1.build.xml
内容是:
<?xml version="1.0"?>
<project name="graph" default="ejb-dep">
<path id="classpath">
<fileset dir="lib/j2ee" includes="*.jar"/>
<fileset dir="lib/xdoclet" includes="*.jar"/>
</path>
<property name="ejb.name" value="testEjb"/>
<property name="ejb.client.name" value="testEjb-client"/>
<!-- ===================================================================== -->
<!-- ejb related project structure -->
<!-- ===================================================================== -->
<property file="project.properties"/>
<property name="ejb.src.dir" value="ejb/src"/>
<property name="target" value="target"/>
<property name="ejb.target" value="${target}/ejb"/>
<property name="ejb.gen.dir" value="${ejb.target}/gen"/>
<property name="ejb.gen.src.dir" value="${ejb.gen.dir}/src"/>
<property name="ejb.gen.conf.dir" value="${ejb.gen.dir}/conf"/>
<property name="ejb.compile.dest.dir" value="${ejb.target}/classes"/>
<property name="ejb.jar.dest.dir" value="${ejb.target}/dist"/>
<!-- ===================================================================== -->
<!-- ejb related targets -->
<!-- ===================================================================== -->
<taskdef name="ejbdoclet" classpathref="classpath" classname="xdoclet.modules.ejb.EjbDocletTask"/>
<!-- ===================================================================== -->
<!-- common targets -->
<!-- ===================================================================== -->
<target name="ejb.init1">
<mkdir dir="${ejb.gen.src.dir}"/>
<mkdir dir="${ejb.gen.conf.dir}"/>
<mkdir dir="${ejb.compile.dest.dir}"/>
<mkdir dir="${ejb.jar.dest.dir}"/>
</target>
<target name="ejb.gen" depends="ejb.init1">
<ejbdoclet destdir="${ejb.gen.dir}" excludedtags="@version,@author" ejbspec="2.1">
<fileset dir="${ejb.src.dir}" includes="**/*Bean.java"/>
<mdb destDir="${ejb.gen.src.dir}"/>
<deploymentdescriptor destDir="${ejb.gen.conf.dir}"/>
<homeinterface destDir="${ejb.gen.src.dir}">
<packageSubstitution packages="beans" substituteWith="intf"/>
</homeinterface>
<remoteinterface destDir="${ejb.gen.src.dir}">
<packageSubstitution packages="beans" substituteWith="intf"/>
</remoteinterface>
<localhomeinterface destDir="${ejb.gen.src.dir}">
<packageSubstitution packages="beans" substituteWith="intf"/>
</localhomeinterface>
<localinterface destDir="${ejb.gen.src.dir}">
<packageSubstitution packages="beans" substituteWith="intf"/>
</localinterface>
<entitycmp destDir="${ejb.gen.src.dir}" cmpSpec="2.x"/>
<session destDir="${ejb.gen.src.dir}"/>
<entitypk destDir="${ejb.gen.src.dir}">
<packageSubstitution packages="ejb.entity.beans" substituteWith="dto"/>
</entitypk>
<valueobject destDir="${ejb.gen.src.dir}">
<packageSubstitution packages="ejb.entity.beans" substituteWith="dto"/>
</valueobject>
<utilobject destDir="${ejb.gen.src.dir}" kind="physical" includeGuid="true" cacheHomes="false">
<packageSubstitution packages="beans" substituteWith="util"/>
</utilobject>
<jboss version="4.0" datasource="java:/MySqlDS" datasourceMapping="mySQL" removeTable="false" destDir="${ejb.gen.conf.dir}"/>
</ejbdoclet>
</target>
<target name="ejb.compile" depends="ejb.gen">
<javac destDir="${ejb.compile.dest.dir}" classpathref="classpath">
<src path="${ejb.gen.src.dir}"/>
<src path="${ejb.src.dir}"/>
</javac>
</target>
<target name="ejb" depends="ejb.compile">
<jar destfile="${ejb.jar.dest.dir}/${ejb.name}.jar" basedir="${ejb.compile.dest.dir}">
<metainf dir="${ejb.gen.conf.dir}"/>
</jar>
</target>
<target name="ejb.client" depends="ejb">
<jar destfile="${ejb.jar.dest.dir}/${ejb.client.name}.jar" basedir="${ejb.compile.dest.dir}">
<include name="**/intf/**/*.class"/>
<include name="**/util/**/*.class"/>
<include name="**/dto/**/*.class"/>
</jar>
</target>
<target name="ejb-dep" depends="ejb.client">
<copy todir="${ejb-dep-url}" file="${ejb.jar.dest.dir}/${ejb.name}.jar"/>
</target>
</project>
2.文件:project.properties
内容是:
ejb-dep-url=E:/java/jboss-4.0.1sp1/server/default/deploy
3, Build
在build.xml文件上点鼠标右键,然后点Run As>>Ant Build,在Console里出现如下说明
...
ejb-dep:
BUILD SUCCESSFUL
Total time: 4 seconds
表示Build成功,按F5,刷新之后,你会发现在test里多出目录target.这就是ant, xdoclet的作用。其中妙用,以后慢慢琢磨。
4, 写测试代码
在目录test/ejbTest/src里放入这么两个文件。
1. ejb.properties
内容是:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
2. TestBeanTest.java
内容是:
import java.rmi.RemoteException;
import java.util.Properties;
import junit.framework.Assert;
import junit.framework.TestCase;
import com.wuder.test.ejb.session.util.TestUtil;
import com.wuder.test.ejb.session.intf.TestHome;
import com.wuder.test.ejb.session.intf.Test;
public class TestBeanTest extends TestCase {
private Test c;
public static void main(String[] args) {
TestCase test=new TestBeanTest("testGetTestString");
junit.textui.TestRunner.run(test);
}
protected void setUp() throws Exception {
super.setUp();
Properties env = null;
try {
ClassLoader cl = this.getClass().getClassLoader();
java.io.InputStream in = cl.getResourceAsStream("ejb.properties");
env = new Properties();
env.load(in);
System.out.println("load jndi properties from ejb.properties");
} catch (Exception exc) {
System.out.println("no ejb.properties found, using default");
}
TestHome h = TestUtil.getHome(env);
c = h.create();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testGetTestString() {
try {
System.out.println(c.getTestString());
Assert.assertEquals("2005/03/30", c.getTestString());
} catch (RemoteException e) {
e.printStackTrace();
}
}
public TestBeanTest(String arg0) {
super(arg0);
}
}
5, 调整
调整的目的,是为了让你看清eclipse的真正功用,只用文本编辑器也可以完成这个练习。
在左边Navigator窗口,用鼠标右键点击ejbTest。选中“properties”,再选中“Java Build Path”
按下面调整。
定义两个user library 并加放其中,分别要导入jboss-4.0.1sp1/server/default/lib, jboss-4.0.1sp1/client,xdoclet/lib里jar文件。
选择eclipse的java视图,你可以看到如下的内容。这时你可享受eclipse给编程带来的种种便利。
6, 测试
1) 启动Jboss4.0。鼠标右键点testEjb Debug>>Jboss>>新增一个Debug实例,选择default方式。点 Debug.启动Jboss。
2) 运行测试代码。
更多推荐
所有评论(0)