Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>EJB技术>>EJB快速开发
EJB快速开发
2007-04-13   来源:www.javaresearch.org  作者:未知

+-----------------------------------------------+
+            EJB快速开发                     +
+-----------------------------------------------+
开发工具:
  IDE: Eclipse 2.1
  Builder: Ant 1.5.1
  Generator: Xdoclet 1.2.0b2
  AppServer: Orion 1.6.0beta
  DBMS: MySQL 3.23.52

简单说明:
  Eclipse?D?D不错的一个Java集成开发环境,相信有很多人已经在使用了。
  Ant?D?D类似于Linux下的Make工具,以批处理的形式执行各种任务(比如文件拷贝、编译、打包等以及自定义任务)。
  Xdoclet?D?D一个代码自动生成工具,它主要与Ant工具配合而用在EJB快速开发上。通过在你的Bean实现类源文件中插入一些特定的JavaDoc标记,解析时来自动生成各种文件,比如接口文件和部署描述文件。同时在1.2.0版本中引入了不少设计模式的概念,比如自动生成DAO和ValueObject对象、SessionFacade对象以及一些工具类。
  Orion?D?D小巧的AppServer,不过功能很强,正逐渐支持EJB2.0。
  MySQL?D?D不消说了,我最喜欢的关系数据库。

  为何采用如上开发工具组合?D?D首先它们都是免费的,而且几乎都是开放源码的。其次它们组合的功能强大,对开发人员的机器配置要求低。支持EJB2.0中的CMP/CMR、JSP以及JMS。无论是C/S应用还是B/S应用,都可以迅速搭建开发测试平台。显而易见,这个工具组合可以极大较少开发时间,我这里就暂且把它叫做EJB快速开发工具组合 :)

简单例子:
  一个Stateless SessionBean。文件组织结构如下:  
  
Xdoclet_Examples
             |
             |---build.xml
             |---src
             |    |---com
             |         |---laysman
             |        |---test
             |             |---xdoclet
             |                |---TellerBean.java
             |                |---TellerClient.java
             |---target
             |     |---classes
             |     |---gen-src
             |     |---META-INF    
 
         
 开发流程:
    1).编写TellerBean实现类
    2).编写Ant使用的build.xml
    3).自动产生各种接口文件和部署描述文件并打包(jar)
    4).部署到Orion
    5).编写远程测试客户端

  ---------------- 1.编写SessionBean实现类TellerBean.java --------------------------

  1. package com.laysman.test.xdoclet;
  2. import javax.ejb.*;
  3. /**
  4.  * @ejb.bean name="Teller" jndi-name="ejb/Teller" type="Stateless" view-type="both"
  5.  * @ejb.transaction  type="Required"
  6.  * @ejb.transaction-type type="Container"
  7.  * @author <a href="mailto:laysman@163.com">laysman 2003-1-15</a>
  8.  */
  9. public abstract class TellerBean implements SessionBean {
  10.     SessionContext sessionContext;
  11.     public void ejbCreate() throws CreateException {
  12.     }
  13.     /**
  14.      * @ejb.interface-method view-type="both"
  15.      * @ejb.transaction type="Required"
  16.      */
  17.     public String tell() {
  18.         return "你好greeting";
  19.     }
  20.     
  21.     public void ejbActivate() {
  22.     }
  23.     public void ejbPassivate() {
  24.     }
  25.     
  26.     public void setSessionContext(SessionContext ctx) {
  27.         this.sessionContext = ctx;
  28.     }
  29.     
  30.     public void ejbRemove() {
  31.     }
  32. }

  --------------- 2. 编写Ant使用的build.xml(这基本上可作为一个魔板)---------------

  1. <?xml version="1.0"?>
  2. <project name="XDoclet Examples" default="jar" basedir=".">
  3.     <property name="src.dir" value="src"/>
  4.     <property name="dist.dir" value="target"/>
  5.     <property name="gen-src.dir" value="${dist.dir}/gen-src"/>    
  6.     <property name="classes.dir" value="${dist.dir}/classes"/>
  7.     <property name="meta-inf.dir" value="${dist.dir}/META-INF"/>
  8.     
  9.     <property name="lib.dir" value="d:\library"/>
  10.     <path id="samples.class.path">
  11.         <fileset dir="${lib.dir}/build">
  12.             <include name="*.jar"/>
  13.         </fileset>
  14.         <fileset dir="${lib.dir}/j2ee">
  15.             <include name="*.jar"/>
  16.         </fileset>
  17.     </path>
  18.     <target name="init">
  19.         <tstamp>
  20.             <format property="TODAY" pattern="d-MM-yy"/>
  21.         </tstamp>
  22.         <taskdef
  23.             name="xdoclet"
  24.             classname="xdoclet.DocletTask"
  25.             classpathref="samples.class.path"
  26.             />
  27.         <taskdef
  28.             name="ejbdoclet"
  29.             classname="xdoclet.modules.ejb.EjbDocletTask"
  30.             classpathref="samples.class.path"
  31.             />
  32.     </target>
  33.     <target name="prepare" depends="init">
  34.         <mkdir dir="${classes.dir}"/>
  35.         <mkdir dir="${gen-src.dir}"/>
  36.         <mkdir dir="${meta-inf.dir}"/>
  37.     </target>
  38.     <target name="ejbdoclet" depends="prepare">
  39.         <ejbdoclet
  40.             destdir="${gen-src.dir}"
  41.             mergedir="parent-fake-to-debug"
  42.             excludedtags="@version,@author,@todo"
  43.             ejbspec="2.0"
  44.             force="false"
  45.             verbose="false" >
  46.             <fileset dir="${src.dir}">
  47.                 <include name="com/laysman/test/xdoclet/*Bean.java"/>
  48.             </fileset>           
  49.         <packageSubstitution packages="ejb" substituteWith="dao"/>
  50.             <remoteinterface>
  51.             <localinterface>
  52.             <homeinterface>
  53.             <localhomeinterface>
  54.             <dataobject>
  55.             <valueobject>
  56.             <entitypk>
  57.             <entitycmp>
  58.             <entitybmp>
  59.             <session>
  60.             <dao>
  61.                 <packageSubstitution packages="ejb" substituteWith="dao"/>
  62.             </dao>
  63.             <utilobject cacheHomes="true" includeGUID="true"/>
  64.             <deploymentdescriptor
  65.                 destdir="${meta-inf.dir}"
  66.                 validatexml="true"
  67.                 mergedir="fake-to-debug"
  68.                 xmlencoding="gb2312" >
  69.             </deploymentdescriptor>            
  70.         </ejbdoclet>
  71.     </target>
  72.     <target name="compile" depends="ejbdoclet">
  73.         <javac
  74.             destdir="${classes.dir}"
  75.             classpathref="samples.class.path"
  76.             debug="on"
  77.             deprecation="on"
  78.             optimize="off">
  79.             <src path="${src.dir}"/>
  80.             <src path="${gen-src.dir}"/>
  81.         </javac>
  82.     </target>
  83.     <target name="jar" depends="compile">
  84.         <delete file="${dist.dir}/teller-ejb.jar" />
  85.         <jar jarfile="${dist.dir}/teller-ejb.jar">
  86.               <fileset dir="${classes.dir}">
  87.                 <include name="com/laysman/test/xdoclet/*.class"/>
  88.               </fileset> 
  89.               <fileset dir="${dist.dir}">
  90.                 <include name="META-INF/*.xml"/>
  91.               </fileset>   
  92.         </jar>
  93.     </target>
  94.     <target name="clean">
  95.         <delete dir="${dist.dir}"/>
  96.     </target>
  97. </project>

------------------3. 自动产生各种接口文件和部署描述文件并打包(jar)----------
   在build.xml所在目录下运行ant -buildfile build.xml jar
这样会自动生成target目录并将产生的各种文件也至于该目录下,其中包括teller-ejb.jar包。

------------------4. 部署到Orion ----------
   只需在[orion.dir]\config\application.xml中添加一行:
  1. <ejb-module id="testEJB" path="../applications/teller-ejb.jar" />

当然得把target目录下的teller-ejb.jar拷贝到[orion.dir]\applications目录下

------------------5. 编写远程测试客户端TellerClient.java ----------
  1. package com.laysman.test.xdoclet;
  2. import javax.naming.Context;
  3. import javax.naming.InitialContext;
  4. import javax.rmi.PortableRemoteObject;
  5. import java.util.*;
  6. /**
  7.  * @author laysman 2003-1-15 
  8.  */
  9. public class TellerClient {
  10.     public static String CONTEXT_FACTORY = "com.evermind.server.rmi.RMIInitialContextFactory";
  11.     public static String PROVIDER_URL = "ormi://localhost";
  12.     
  13.     public static void main(String[] args) 
  14.     {
  15.         try
  16.         {
  17.             Hashtable env = new Hashtable();
  18.             env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);
  19.             env.put(Context.PROVIDER_URL, PROVIDER_URL);
  20.             env.put(Context.SECURITY_PRINCIPAL, "admin");
  21.             env.put(Context.SECURITY_CREDENTIALS, "laysman");            
  22.             
  23.             /**
  24.              * Create access to the naming context.
  25.              */
  26.             Context context = new InitialContext(env);
  27.             /**
  28.          * Lookup the TellerHome object
  29.          */
  30.             Object homeObject = context.lookup("Teller");
  31.             // Narrow the reference to a TellerHome 
  32.             TellerHome home = (TellerHome)PortableRemoteObject.narrow(homeObject, TellerHome.class);
  33.             Date begin = new Date();
  34.         for (int i = 0; i < 10; i++) {
  35.          Teller session = home.create();
  36.         System.out.println(session.tell());
  37.         }                
  38.             
  39.         Date end = new Date();
  40.         System.out.println("last: " + String.valueOf(end.getTime() - begin.getTime()) + "ms");
  41.     }catch(Exception e) {
  42.         e.printStackTrace();
  43.     }
  44.     }
  45. }

注意:源文件中的JNDI环境参数是针对Orion AppServer的,对不同的AppServer应作出相应修改(当然更好的办法是使用jndi.properties配置文件来修改)。

  --相关文章--
· 配置WebLogic Server集群二(组图) (2007-04-17)
· 配置WebLogic Server集群一(组图) (2007-04-17)
· 程序员应用EJB 3.0必要的准备 (2007-04-17)
· 用EJB 3.0开发企业级Bean组件初体验 (2007-04-17)
· 漫谈EJB在Java中的应用 (2007-04-17)
· 深入探究EJB应用技术的体系结构 (2007-04-17)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接