EJB快速开发
2004-10-29 13:44
344 查看
+-----------------------------------------------+
+ EJB快速开发 +
+-----------------------------------------------+
开发工具:
IDE: Eclipse 2.1 M4
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(这基本上可作为一个魔板)-------
<?xml version="1.0"?>
<project name="XDoclet Examples" default="jar" basedir=".">
<property name="src.dir" value="src"/>
<property name="dist.dir" value="target"/>
<property name="gen-src.dir" value="${dist.dir}/gen-src"/>
<property name="classes.dir" value="${dist.dir}/classes"/>
<property name="meta-inf.dir" value="${dist.dir}/META-INF"/>
<property name="lib.dir" value="d:/library"/>
<path id="samples.class.path">
<fileset dir="${lib.dir}/build">
<include name="*.jar"/>
</fileset>
<fileset dir="${lib.dir}/j2ee">
<include name="*.jar"/>
</fileset>
</path>
<target name="init">
<tstamp>
<format property="TODAY" pattern="d-MM-yy"/>
</tstamp>
<taskdef
name="xdoclet"
classname="xdoclet.DocletTask"
classpathref="samples.class.path"
/>
<taskdef
name="ejbdoclet"
classname="xdoclet.modules.ejb.EjbDocletTask"
classpathref="samples.class.path"
/>
</target>
<target name="prepare" depends="init">
<mkdir dir="${classes.dir}"/>
<mkdir dir="${gen-src.dir}"/>
<mkdir dir="${meta-inf.dir}"/>
</target>
<target name="ejbdoclet" depends="prepare">
<ejbdoclet
destdir="${gen-src.dir}"
mergedir="parent-fake-to-debug"
excludedtags="@version,@author,@todo"
ejbspec="2.0"
force="false"
verbose="false" >
<fileset dir="${src.dir}">
<include name="com/laysman/test/xdoclet/*Bean.java"/>
</fileset>
<packageSubstitution packages="ejb" substituteWith="dao"/>
<remoteinterface/>
<localinterface/>
<homeinterface/>
<localhomeinterface/>
<dataobject/>
<valueobject/>
<entitypk/>
<entitycmp/>
<entitybmp/>
<session/>
<dao>
<packageSubstitution packages="ejb" substituteWith="dao"/>
</dao>
<utilobject cacheHomes="true" includeGUID="true"/>
<deploymentdescriptor
destdir="${meta-inf.dir}"
validatexml="true"
mergedir="fake-to-debug"
xmlencoding="gb2312" >
</deploymentdescriptor>
</ejbdoclet>
</target>
<target name="compile" depends="ej
4000
bdoclet">
<javac
destdir="${classes.dir}"
classpathref="samples.class.path"
debug="on"
deprecation="on"
optimize="off">
<src path="${src.dir}"/>
<src path="${gen-src.dir}"/>
</javac>
</target>
<target name="jar" depends="compile">
<delete file="${dist.dir}/teller-ejb.jar" />
<jar jarfile="${dist.dir}/teller-ejb.jar">
<fileset dir="${classes.dir}">
<include name="com/laysman/test/xdoclet/*.class"/>
</fileset>
<fileset dir="${dist.dir}">
<include name="META-INF/*.xml"/>
</fileset>
</jar>
</target>
<target name="clean">
<delete dir="${dist.dir}"/>
</target>
</project>
------------------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.RMIIniti
alContextFactory";
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配置文件来修改)。
+ EJB快速开发 +
+-----------------------------------------------+
开发工具:
IDE: Eclipse 2.1 M4
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(这基本上可作为一个魔板)-------
<?xml version="1.0"?>
<project name="XDoclet Examples" default="jar" basedir=".">
<property name="src.dir" value="src"/>
<property name="dist.dir" value="target"/>
<property name="gen-src.dir" value="${dist.dir}/gen-src"/>
<property name="classes.dir" value="${dist.dir}/classes"/>
<property name="meta-inf.dir" value="${dist.dir}/META-INF"/>
<property name="lib.dir" value="d:/library"/>
<path id="samples.class.path">
<fileset dir="${lib.dir}/build">
<include name="*.jar"/>
</fileset>
<fileset dir="${lib.dir}/j2ee">
<include name="*.jar"/>
</fileset>
</path>
<target name="init">
<tstamp>
<format property="TODAY" pattern="d-MM-yy"/>
</tstamp>
<taskdef
name="xdoclet"
classname="xdoclet.DocletTask"
classpathref="samples.class.path"
/>
<taskdef
name="ejbdoclet"
classname="xdoclet.modules.ejb.EjbDocletTask"
classpathref="samples.class.path"
/>
</target>
<target name="prepare" depends="init">
<mkdir dir="${classes.dir}"/>
<mkdir dir="${gen-src.dir}"/>
<mkdir dir="${meta-inf.dir}"/>
</target>
<target name="ejbdoclet" depends="prepare">
<ejbdoclet
destdir="${gen-src.dir}"
mergedir="parent-fake-to-debug"
excludedtags="@version,@author,@todo"
ejbspec="2.0"
force="false"
verbose="false" >
<fileset dir="${src.dir}">
<include name="com/laysman/test/xdoclet/*Bean.java"/>
</fileset>
<packageSubstitution packages="ejb" substituteWith="dao"/>
<remoteinterface/>
<localinterface/>
<homeinterface/>
<localhomeinterface/>
<dataobject/>
<valueobject/>
<entitypk/>
<entitycmp/>
<entitybmp/>
<session/>
<dao>
<packageSubstitution packages="ejb" substituteWith="dao"/>
</dao>
<utilobject cacheHomes="true" includeGUID="true"/>
<deploymentdescriptor
destdir="${meta-inf.dir}"
validatexml="true"
mergedir="fake-to-debug"
xmlencoding="gb2312" >
</deploymentdescriptor>
</ejbdoclet>
</target>
<target name="compile" depends="ej
4000
bdoclet">
<javac
destdir="${classes.dir}"
classpathref="samples.class.path"
debug="on"
deprecation="on"
optimize="off">
<src path="${src.dir}"/>
<src path="${gen-src.dir}"/>
</javac>
</target>
<target name="jar" depends="compile">
<delete file="${dist.dir}/teller-ejb.jar" />
<jar jarfile="${dist.dir}/teller-ejb.jar">
<fileset dir="${classes.dir}">
<include name="com/laysman/test/xdoclet/*.class"/>
</fileset>
<fileset dir="${dist.dir}">
<include name="META-INF/*.xml"/>
</fileset>
</jar>
</target>
<target name="clean">
<delete dir="${dist.dir}"/>
</target>
</project>
------------------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.RMIIniti
alContextFactory";
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配置文件来修改)。
相关文章推荐
- ejb 3 开发快速入门 5 将数据保存到数据库中之Queries and EJB QL
- EJB快速开发
- ejb 3 开发快速入门 4 将数据保存到数据库中
- 图解JDeveloper 10g快速开发会话EJB
- 使用JBoss和PostgreSQL-----快速开发EJB和J2EE Web Application
- About EJB 01 配置EJB快速开发环境
- ejb 3 开发快速入门 1 搭建开发环境
- ejb 3 开发快速入门 3 配置jboss数据源
- ejb 3 开发快速入门 2 建立EJB工程
- 整合finereport快速搭建与开发
- 阿里巴巴Java开发手册快速学习
- 【即时通讯】iOS 基于GCDAsyncSocket快速开发Socket通信
- 开发者不可不知的五款DIY快速开发工具,你造吗
- dorado和sunflow珠联璧合快速开发富浏览器流程管理系统
- SharePoint 2010中使用Visual Studio 2010进行方便快速的Web Part开发
- sun的EJB开发文档
- NetBeans 6.0 CLDC/MIDP 开发快速入门指南
- 海风科技快速开发平台和构件的由来(二)
- 建站教程:如何用百度开发云快速搭建WordPress?
- 快速开发android应用3-基于okhttp解析服务数据