作者:jesse e. tilly 06/25/2001
翻译:keri 2003-11-29
无论是设计还是实施ejb,都是一件复杂的事情。仅在实施ejb的各阶段中要用的为数不少的应用服务器,就会使事情变得很糟。然后,如果我们使用bea的weblogic应用服务器再配合 ant 就会使一切变得是那么的容易。
ant是一个构造基于java应用程序的开源工具,是apache jakarta工程的一部分。ant使用xml作为构造描述语言,这种描述文件由一些有着有限状态的target组成,每一个target要么成功要么失败。开发者或者构造管理者定义各属性,在ant的配置文件中将各种任务转化成一系列target,并定义各target之间的依赖关系。在onjava.com站点上通过david thomson 写的 overview of ant 我们可以找到更多的有用信息。
ant的开发者提供一系列能够构造部署ejb的任务,一旦完成,就能够应用到weblogic4.5,5.1,6.0中,同样也能够创建可以在其它应用服务器中被处理的通用ejb包。只要通过适当的配置一个工程的ant文件,就可以使用<ejbjar>任务和<weblogic>元素等相似的五到八行xml语句构造出成百的ejb。
本文中是用weblogic5.1作为服务器,但是只要精心设计,开发者或者构造管理者也可以使用其它的服务器,部署中的ejb和weblogic任务标签是可扩展的。用户要特别关注的是,在下一个版本ant 1.4中,它将支持ipl.net,borland应用服务器以及jboss。但是不支持在 nightly builds 上的ant的一些可选任务以及其它的服务器。感兴趣的读者还可以从http://marc.theaimsgroup.com/?l=ant-user&r=1&w=2(search the ant-user mailing lists)上找到关于ant和ejbs以及ipl.net的更多的有用信息。
本文将分四个部份对使用ant及weblogic服务器开发ejb进行描述。第一部分描述怎样使用<ejbjar>任务及<weblogic>元素来配置一个工程。第二部分用实例讲述怎样在一个工程中部署构造一系列的ejb。第三部分教你怎样针对单个ejb来写一个ant任务。最后,在第四部分中还会涵盖一些更为有用的可选功能,也有一些提示与技巧。
由于ant使用自己的命名协定,所以可能导致与其它的ejb开发工具产生冲突。本文解决了一些已知的冲突。但是随着更多的工具的使用,将会有更多的冲突产生。在 ant documentation 上可以找到更多的有关在其它集成开发环境上使用ant的细节。
命名模式
使用weblogic的开发者要想使用ant中<ejbjar>任务的强大功能,必需绕过一些陷井。实际上ant配置文件中棘手的代码是很少的,也就那么七八行(不包含属性配置信息等)。一些有着几个月或者是几年经验的开发者们往往轻易的就开始了一个工程,但是他们却发现通过集成ant却让事情变得更糟了。对于这些人,希望本文能给于他们足够的启发,让他们重新审视一下他们的工程,从而走出迷茫的误区。即使他们的工程将不打算使用ant,设计一个好的工程结构对任何人在今后相当长的一段时间内都是有好的帮助的。
由于以前的ejb的例子及书籍(尤其是monson_haefel’s的有关ejb的书)中的规定,下面的java类和模块命名惯例被开发者广泛使用。
• 执行类--<bean名>bean.java
• home接口--<bean名>home.java
• remote接口--<bean名>.java
• 主键类--<bean名>pk.java
鉴于以上所见,不能轻易的找到遵循任何命名协定和正当组织的部署描述符。局部来讲,这是由于容器把约束放置到描述符名上造成的,但是这可以通过脚本或简易ejb编译程序来解决。 ant的 ejb任务需要好的组织来引导。没有一个标准的组织,ejb工程就会难以维持,同时随着工程的进展,描述符也会分散于整个文件系统中。ant的模式为很多典型的无结构的java工程提供结构化。
在开始,我列出工程组织的一些关于使用<ejbjar>的规则:
所有的ejb类文件都必需遵循下面的标准的类命名规定,使用 bean名前缀。例如,不能用像ithumbmynoseatnamingconventions.java这种方式来命名,而是<bean名>bean.java这种形式。这虽然枯燥但却实用。
所有的ejb描述符都遵循这样的类名约定,在描述符前使用bean名作为前缀。
描述符协定并不像所说的那样严格。所有的描述符都以<bean name>开始(如:account-ejb-jar.xml)。在weblogic部署描述符中,容器管理的持久(cmp)的描述符名要求是明确的。但这并下要求有什么要改变,仅仅是文件名或者文件系统要遵循这个约定。在其它的一些章节我们也会讨论到这种潜在的命名协定冲突。
描述符从他们自己的目录使用bean名来得到每一个bean。
这条规则没有一二两点那么重要,便是它确实起到了良好的作用。
这些规则都不是必需的。
一些大的复杂的系统可能还要求一些当前的功能中不能满足的特定需求,或者有满意的需求但是本文却没有涉及到。对于这些项目,命名模式及工程布局可能没有应用。任何工程经过足够的努力都能使用<ejbjar>;使用这目经过规则会使<ejbjar>变得很简单。
布局
工程布局对于有效的编码及构造管理都是很重要的。创建模块化的文件系统组织会使打包及改动代码都很容易实现。java的包系统就是这种设计概念的一个例子。在整个工程会议中概念图将受益于好的布局。在cvs或者其它的版本控制系统中管理代码会使问题更简单。
客观的说,如果不是这些约定,<ejbjar>任务就会变得像ant的其它任务一样,没有这样大的功能。工程越接近这些规则的需求,ant文件的代码就会越少。如果不遵循这一规则,ant文件就不得不描述及定义怎样来构造每一个ejb。使用这一约定,<ejbjar>任务就变得非常强大,而这却只需很少的工作量。
下面是一个工程布局的样例:
bigproject/
java/
...
com/duffbrew/account.java
com/duffbrew/accounthome.java
com/duffbrew/accountbean.java
descriptor/
...
account/
account-ejb-jar.xml
account-weblogic-ejb-jar.xml
account-weblogic-cmp-rdbms-jar.xml
build/
...
deploy/
account/
account.jar
doc/
lib/
<ejbjar srcdir="build"
descriptordir="descriptor">
<weblogic destdir="build/deploy"
classpath="${weblogic.classpath}:build"
compiler="javac"/>
<include name="**/*-ejb-jar.xml"/>
<exclude name="**/*weblogic*.xml"/>
</ejbjar>
<ejbjar srcdir="build" descriptordir="descriptor/${bean.name}"> <weblogic destdir="build/${bean.name}/${bean.name}.jar" classpath="${weblogic.classpath}:build" keepgenerated="true" compiler="javac"/> <include name="**/*-ejb-jar.xml"/> <exclude name="**/*weblogic*xml"/>
</ejbjar>
<ejbjar srcdir="build"
descriptordir="descriptor">
<weblogic destdir="build/deploy"
classpath="${weblogic.classpath}:build"
compiler="javac"
newcmp="true"/>
<include name="**/*-ejb-jar.xml"/>
<exclude name="**/*weblogic*xml"/>
</ejbjar>
<ejbjar srcdir="build"
descriptordir="descriptor">
<include name="**/*-ejb-jar.xml"/>
<exclude name="**/*weblogic*xml"/>
</ejbjar>
<ejbjar srcdir="build"
descriptordir="descriptor">
<weblogic destdir="build/deploy"
classpath="${weblogic.classpath}:build"
compiler="javac"/>
<include name="**/*-ejb-jar.xml"/>
<exclude name="**/*weblogic*xml"/>
<dtd publicid="-//sun microsystems, inc.//dtd enterprise javabeans 1.1//en"
location="${weblogic.home}/classes/weblogic/ejb/deployment/xml/ejb-jar.dtd"/>
<dtd publicid="-//bea systems, inc.//dtd weblogic 5.1.0 ejb//en"
location="${weblogic.home}/classes/weblogic/ejb/deployment/xml/weblogic-ejb-jar.dtd"/>
</ejbjar>
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器