Java开源实践(2)—EJBDoclet练习

                                                                                                                                           wuder

关键词: xdoclet, ant, EJBDoclet, JbossIDE, eclipse, EJB

1,     开发前准备

下载并安装,

JDK5.0

Ant1.6.2

         -----参考上一篇,了解如何设定jdkant的环境变量。

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的插件对应的放到Pluginsfeatures目录里。

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/libjar文件。

 

 

选择eclipsejava视图,你可以看到如下的内容。这时你可享受eclipse给编程带来的种种便利。

 

 

 

 

 

 

 

 

 

 

6,     测试

1)      启动Jboss4.0。鼠标右键点testEjb  Debug>>Jboss>>新增一个Debug实例,选择default方式。点 Debug.启动Jboss

2)      运行测试代码。

 

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐