+-----------------------------------------------+ + 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 --------------------------
- package com.laysman.test.xdoclet;
- import javax.ejb.*;
- /**
- * @ejb.bean name="Teller" jndi-name="ejb/Teller" type="Stateless" view-type="both"
- * @ejb.transaction type="Required"
- * @ejb.transaction-type type="Container"
- * @author <a href="mailto:laysman@163.com">laysman 2003-1-15</a>
- */
- public abstract class TellerBean implements SessionBean {
- SessionContext sessionContext;
- public void ejbCreate() throws CreateException {
- }
-
- /**
- * @ejb.interface-method view-type="both"
- * @ejb.transaction type="Required"
- */
- public String tell() {
- return "你好greeting";
- }
-
- public void ejbActivate() {
- }
-
- public void ejbPassivate() {
- }
-
- public void setSessionContext(SessionContext ctx) {
- this.sessionContext = ctx;
- }
-
- public void ejbRemove() {
- }
- }
--------------- 2. 编写Ant使用的build.xml(这基本上可作为一个魔板)---------------
------------------3. 自动产生各种接口文件和部署描述文件并打包(jar)---------- 在build.xml所在目录下运行ant -buildfile build.xml jar 这样会自动生成target目录并将产生的各种文件也至于该目录下,其中包括teller-ejb.jar包。
------------------4. 部署到Orion ---------- 只需在[orion.dir]\config\application.xml中添加一行:
- <ejb-module id="testEJB" path="../applications/teller-ejb.jar" />
当然得把target目录下的teller-ejb.jar拷贝到[orion.dir]\applications目录下
------------------5. 编写远程测试客户端TellerClient.java ----------
- package com.laysman.test.xdoclet;
-
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.rmi.PortableRemoteObject;
- import java.util.*;
-
- /**
- * @author laysman 2003-1-15
- */
- public class TellerClient {
-
- public static String CONTEXT_FACTORY = "com.evermind.server.rmi.RMIInitialContextFactory";
- public static String PROVIDER_URL = "ormi://localhost";
-
- public static void main(String[] args)
- {
- try
- {
- Hashtable env = new Hashtable();
- env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);
- env.put(Context.PROVIDER_URL, PROVIDER_URL);
- env.put(Context.SECURITY_PRINCIPAL, "admin");
- env.put(Context.SECURITY_CREDENTIALS, "laysman");
-
- /**
- * Create access to the naming context.
- */
- Context context = new InitialContext(env);
-
- /**
- * Lookup the TellerHome object
- */
- Object homeObject = context.lookup("Teller");
-
- // Narrow the reference to a TellerHome
- TellerHome home = (TellerHome)PortableRemoteObject.narrow(homeObject, TellerHome.class);
-
- Date begin = new Date();
- for (int i = 0; i < 10; i++) {
- Teller session = home.create();
- System.out.println(session.tell());
- }
-
- Date end = new Date();
- System.out.println("last: " + String.valueOf(end.getTime() - begin.getTime()) + "ms");
- }catch(Exception e) {
- e.printStackTrace();
- }
- }
- }
注意:源文件中的JNDI环境参数是针对Orion AppServer的,对不同的AppServer应作出相应修改(当然更好的办法是使用jndi.properties配置文件来修改)。
|