JR 精品文章 - EJB快速开发
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » J2EE综合 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
EJB快速开发
jeye    更新:2003-05-30 09:37:49  $version   

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

  为何采用如上开发工具组合――首先它们都是免费的,而且几乎都是开放源码的。其次它们组合的功能强大,对开发人员的机器配置要求低。支持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配置文件来修改)。

版权声明  
本篇文章对您是否有帮助?  投票:         投票结果:     101       6
作者其它文章:
作者全部文章
评论人:chaiy2003 发表时间: Mon Jun 16 10:18:16 CST 2003
我用的是IDEA,我想问一下Eclipse到底好那些方便之处。用IDEA的速度太慢!!
评论人:yyt99 发表时间: Fri Jul 04 15:07:30 CST 2003
我的感觉就是很方便,而且对于JAVA的特性支持的好,比如变量改名字,改包名,Source迁移,Source 的format。同时还有N多的免费的插件,呵呵,比较赚了!
评论人:zwzapple 发表时间: Fri Jul 25 17:48:27 CST 2003
xdoclet不好用,不如用middlegen,它封装了xdoclet.
或者用velocity自己写代码产生器,注意xdoclet封装了velocity.
评论人:cYBERyE 发表时间: Mon Jul 28 12:06:08 CST 2003
xdoclet是个好东西。如果在Eclipse上开发EJB,Lomboz插件可以大大提高生产效率。
评论人:hxngluo 发表时间: Wed Jul 30 15:57:04 CST 2003
谢谢!
我准备按照你的配置搭建环境。

还请多帮助哦。
评论人:gavin009 发表时间: Fri Aug 01 14:34:27 CST 2003
为什么不用JBuilder+Weblogic+Oracle?
评论人:yyt99 发表时间: Mon Aug 04 14:23:51 CST 2003
其实有个很敏感的问题,有些人差不多忽略了,就是盗版问题。
Eclipse是免费的,而Jbuilder的价格昂贵,国内的一般企业用户还很难承受吧。
Jbuilder确实很方便,开发效率比较高,但是Eclipse得功能也很强大。

个人学习,可以两个都用用。
企业开发,有钱的或者可以躲避盗版追查的,当然盗版的Jbuilder是首选;否则就用Eclipse或者NetBeans
评论人:lqxt 发表时间: Sun Dec 07 23:25:12 CST 2003
各位大侠,有谁有利用netbeans开发EJB2.0应用的经验?能否介绍一下?是需要插件吗?我现在怎么进行开发呀?我用的出Netbeans3.5.1。谢谢各位了
评论人:kitta 发表时间: Tue Dec 09 02:14:54 CST 2003
你用的JBossIDE吧?
评论人:s_xlli 发表时间: Wed Jun 23 15:04:28 CST 2004
我自己用Velocity写了一个程序,可以生成EJB,JDBC,Struts,Hibernate+Spring,用户可以根据文档创建自己的模板。
有兴趣的可以email: s-xlli@163.com。 完全免费使用,不过恳请宝贵意见,以便我可以及时完善。
评论人:qhson 发表时间: Mon Aug 16 11:06:47 CST 2004
大家好,请问如何在eclipse+lomboz中定义Relationship?
评论人:xiongda 发表时间: Fri Oct 01 20:38:41 CST 2004
上层的
那是什么啊
乱七八糟!!!!!!!!
想赚钱也不要这样吧???????
评论人:bergkam140 发表时间: Fri Jan 21 16:41:43 CST 2005
我觉得Eclipse很不错呀,自已想装什么就装什么。又不用钱!加上一个Lomboz,开发ejb都很快
评论人:llhjdz 发表时间: Wed Mar 23 16:54:42 CST 2005
hao
评论人:linndas 发表时间: Thu May 19 10:27:32 CST 2005
很好
评论人:jaroad 发表时间: Thu Jun 09 08:41:00 CST 2005
good!
评论人:lhbdir 发表时间: Tue Jun 28 10:35:12 CST 2005
GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOD。。[V][V]
评论人:manmanman 发表时间: Thu Sep 01 12:50:19 CST 2005
not bad..............
评论人:shenkai 发表时间: Fri Dec 30 15:26:37 CST 2005
[good]
评论人:annali 发表时间: Thu Feb 16 10:29:56 CST 2006
看起来很高深的样子,可惜我没有耐心看完
评论人:ljdsp 发表时间: Fri Mar 17 11:24:08 CST 2006
good
评论人:gdws 发表时间: Thu Apr 27 17:55:12 CST 2006
不是吧---看你这样一说,感觉就是很快速啊?
不过我没有用过。开发EJB一般我用jbuilder2005因为他是可是化的。
不过比较起来没有你这个快啊/
看你这个就是只管开发业务层就可以了,不用管他是本地接口还是远程接口,
还是序列化类,rmi等等。
都会自动生成啊?
看来的研究一下了啊。
哈哈
有什么经验要共享啊?
评论人:avery-晨钟 发表时间: Sun Jun 25 17:51:20 CST 2006
[good]
评论人:jianying218 发表时间: Tue Aug 22 16:25:10 CST 2006
好,顶下,详细解释下就好了
评论人:vampire_315 发表时间: Sun Dec 17 19:10:38 CST 2006
不错啊
评论人:kulapika 发表时间: Sun Jan 14 11:32:14 CST 2007
支持,谢谢楼主[:E]
评论人:jiandingak47 发表时间: Sun Mar 04 14:22:23 CST 2007
very good ,谢谢作者
评论人:jiandingak47 发表时间: Wed Mar 21 17:45:13 CST 2007
我顶[Y]
评论人:fengfeng2000 发表时间: Tue Mar 27 19:33:44 CST 2007
好贴
评论人:lunlinux 发表时间: Fri Apr 06 10:18:13 CST 2007
hao[:E]
评论人:xs57224059 发表时间: Mon Apr 09 19:54:37 CST 2007
REWRWERWE
评论人:noiceman 发表时间: Fri Jun 15 08:43:34 CST 2007
wa
评论人:rodgerfu 发表时间: Tue Oct 30 17:23:32 CST 2007
调不同,有好多问题
评论人:dave88 发表时间: Thu Nov 01 15:42:04 CST 2007
一般般了
评论人:y59735890 发表时间: Fri Dec 14 08:14:57 CST 2007
不错不错,要是有一个小项目就更好了
评论人:me_tiger 发表时间: Sat Dec 22 23:52:03 CST 2007
不错
评论人:helio_true 发表时间: Wed Jan 09 16:19:18 CST 2008
恩,不错学习学习。
评论人:s1987321 发表时间: Wed Feb 13 14:24:53 CST 2008
w  我觉得用NETBEANS 就不错哦 整合了许多功能
可以快速的开发一下回来就可以直接开发不用装插件
评论人:fakeuser01 发表时间: Sat Feb 23 05:54:59 CST 2008
Good[:D][:D][:D][:D]
评论人:liuxiao 发表时间: Sun Mar 23 21:47:28 CST 2008
すごい。
评论人:whw19840229 发表时间: Tue Apr 01 01:27:02 CST 2008
[good]现在在用eclipse
评论人:ycg166 发表时间: Tue Apr 22 14:00:36 CST 2008
haikeyi
评论人:zhifeiji512 发表时间: Tue Apr 29 16:45:02 CST 2008
我们用的是JBUILDER2005+WEBLOGIC

这个文章共有 43 条评论
 
返回文章列表 返回〔J2EE综合〕
下一篇文章 主题: 使用AJAX的十大理由


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号