Apache Ant EJB 任务用户手册

作者


目录


简介

Ant 提供了一些可选的任务来开发 1.x 和 2.x 企业 Java Bean (EJB)。通常这些任务特定于特定供应商的 EJB 服务器。

这些任务支持

像 BEA 和 IBM 这样的供应商现在提供定制的 Ant 任务来与他们的特定产品一起工作。更重要的是,EJB 3.0 使整个过程过时。因此,这些任务的开发实际上已经冻结。欢迎错误报告,尤其是补丁,但没有迫切需要添加对新应用服务器的支持。没有人应该编写新的 EJB 2.x 应用程序,当然也不应该编写新的 EJB 2.x 服务器。


EJB 任务

任务应用服务器
blgenclientBorland 应用服务器 4.5 和 5.x
iplanet-ejbciPlanet 应用服务器 6.0
ejbjar嵌套元素
borlandBorland 应用服务器 4.5 和 5.x
iPlanetiPlanet 应用服务器 6.0
jbossJBoss
jonasJOnAS 2.4.x 和 2.5
weblogicWebLogic 5.1 到 7.0
websphereIBM WebSphere 4.0
orionIronFlare (Oracle) Orion 应用服务器 2.0.6

ddcreator

描述

ddcreator 将编译一组 WebLogic 基于文本的部署描述符到一个序列化 EJB 部署描述符。基于标准 Ant includeexclude 选择机制来选择要编译的基于文本的描述符。

参数

属性 描述 必需
descriptors 这是从其中选择描述符的基目录。
dest 将写入序列化部署描述符的目录
classpath 这是用于运行底层 WebLogic ddcreator 工具的类路径。这必须包含 weblogic.ejb.utils.DDCreator

示例

<ddcreator descriptors="${dd.dir}"
           dest="${gen.classes}"
           classpath="${descriptorbuild.classpath}">
  <include name="*.txt"/>
</ddcreator>

ejbc

描述

ejbc 任务将运行 WebLogic 的 ejbc 工具。此工具将获取一个序列化部署描述符,检查各种 EJB 接口和 Bean 类,然后生成在 WebLogic EJB 容器中部署 Bean 所需的支持类。这将包括 RMI 存根和骨架,以及实现 Bean 的 Home 和远程接口的类。

运行此工具的 Ant 任务能够在单个操作中编译多个 Bean。要编译的 Bean 通过包含其序列化部署描述符来选择。标准 Ant includeexclude 结构可用于选择要包含的部署描述符。

检查每个描述符以确定生成的类是否已过期并需要重新生成。部署描述符被反序列化以发现 Home、远程和实现类。确定相应的源文件并检查其修改时间。这些时间和序列化描述符本身的修改时间与生成类的修改时间进行比较。如果生成的类不存在或已过期,则运行 ejbc 工具以生成新版本。

参数

属性 描述 必需
descriptors 这是从其中选择序列化部署描述符的基目录。
dest 生成的类、RIM 存根和 RMI 骨架写入的基目录
manifest 要写入的清单文件名称。此清单将包含对每个处理的 EJB 的条目
src 包含 Home 接口、远程接口和 Bean 实现类源文件的源树的基目录。
classpath 此类路径必须包含 weblogic.ejbc 类以及正在处理的 Bean 的 Bean、Home 接口、远程接口等的类文件。
keepgenerated 控制 ejbc 是否保留用于构建类文件的中间 Java 文件。这在调试时可能很有用。 否;默认为 false

示例

<ejbc descriptors="${gen.classes}"
           src="${src.dir}"
           dest="${gen.classes}"
           manifest="${build.manifest}"
           classpath="${descriptorbuild.classpath}">
  <include name="*.ser"/>
</ejbc>

iplanet-ejbc

描述

用于为 iPlanet 应用服务器 6.0 编译 EJB 存根和骨架的任务。给定一个标准 EJB 1.1 XML 描述符以及一个 iAS 特定的 EJB 描述符,此任务将生成将 EJB 部署到 iAS 所需的存根和骨架。由于 XML 描述符可以包含多个 EJB,因此这是一种在单个 Ant 任务中指定多个 EJB 的便捷方法。

对于每个指定的 EJB,该任务将在目标目录中找到构成 EJB 的三个类。如果在目标目录中找不到这些类文件,则该任务将失败。该任务还将尝试在该目录中找到 EJB 存根和骨架。如果找到,将检查存根和骨架上的时间戳以确保它们是最新的。只有在找不到这些文件或它们已过期时,才会调用 iAS ejbc 实用程序以生成新的存根和骨架。

参数

属性 描述 必需
ejbdescriptor 标准 EJB 1.1 XML 描述符(通常称为 ejb-jar.xml)。
iasdescriptor iAS 特定的 EJB XML 描述符(通常称为 ias-ejb-jar.xml)。
dest 这是 RMI 存根和骨架写入的基目录。此外,每个 Bean 的类文件(Home 接口、远程接口和 EJB 实现)必须在该目录中找到。
classpath 生成 EJB 存根和骨架时使用的类路径。嵌套的 classpath 元素也可以使用。 否;默认为 Ant 启动时指定的类路径
keepgenerated 指示 ejbc 生成的 Java 源文件是否将被保存或自动删除。如果为 yes,则源文件将被保留。 否;默认为 no
debug 指示 ejbc 实用程序是否应将额外的调试语句记录到标准输出。如果为 yes,则将生成额外的调试语句。 否;默认为 no
iashome 可用于指定此 iAS 安装的“home”目录。如果指定了此属性,则用于查找 ejbc 实用程序,如果它未包含在用户的系统路径中。如果指定,它应该引用 [install-location]/iplanet/ias6/ias 目录。 否;默认情况下,ejbc 实用程序必须位于用户的系统路径中

示例

<iplanet-ejbc ejbdescriptor="ejb-jar.xml"
              iasdescriptor="ias-ejb-jar.xml"
              dest="${build.classesdir}"
              classpath="${ias.ejbc.cpath}"/>


<iplanet-ejbc ejbdescriptor="ejb-jar.xml"
              iasdescriptor="ias-ejb-jar.xml"
              dest="${build.classesdir}"
              keepgenerated="yes"
              debug="yes"
              iashome="${ias.home}">
              <classpath>
                  <pathelement path="."/>
                  <pathelement path="${build.classpath}"/>
              </classpath>
</iplanet-ejbc>

wlrun

描述

wlrun 任务用于启动 WebLogic 服务器。该任务在单独的 JVM 中运行 WebLogic 实例。许多参数用于控制 WebLogic 实例的操作。请注意,该任务以及 Ant 不会在 WebLogic 实例停止之前完成。

参数

属性 描述 对于 4.5.1 和 5.1 是必需的 对于 6.0 是必需的
BEAhome 存储服务器配置的 BEAhome 的位置。如果存在此属性,则 wlrun 假设服务器将在 WebLogic 6.0 下运行 N/A
home 安装 WebLogic 的 WebLogic “home” 的位置。 是。请注意,这是绝对位置,而不是相对于 BEAhome 的位置。
Domain 服务器所属的域。 N/A
classpath 用于运行 WebLogic 服务器的 JVM 的类路径。在 WebLogic 6.0 之前,这通常设置为 WebLogic 引导类路径。在 WebLogic 6.0 下,这应该包含所有 WebLogic jar 文件
wlclasspath WebLogic 服务器使用的 WebLogic 类路径。 N/A
properties 用于控制 WebLogic 实例的 WebLogic 主目录中服务器属性文件的名称。
name 要运行的 WebLogic 主目录中 WebLogic 服务器的名称。 否;默认为 myserver
policy 要使用的 WebLogic 主目录中安全策略文件的名称。 否;默认为 weblogic.policy
username 用于管理服务器的管理用户名 N/A
password 服务器的管理密码
pkPassword 私钥密码,以便服务器可以解密 SSL 私钥文件
jvmargs 传递给用于运行 WebLogic 实例的 JVM 的附加参数字符串。
weblogicMainClass WebLogic 的主类名称

作为嵌套元素指定的参数

wlrun 任务支持嵌套的 <classpath><wlclasspath> 元素来设置相应的类路径。

示例

此示例显示了使用 wlrun 在 WebLogic 5.1 下运行服务器。

    <wlrun taskname="myserver"
           classpath="${weblogic.boot.classpath}"
           wlclasspath="${weblogic.classes}:${code.jars}"
           name="myserver"
           home="${weblogic.home}"
           properties="myserver/myserver.properties"/>

此示例显示了 wlrun 用于在 WebLogic 6.0 下运行 petstore 服务器。

<wlrun taskname="petstore"
       classpath="${weblogic.classes}"
       name="petstoreServer"
       domain="petstore"
       home="${weblogic.home}"
       password="petstorePassword"
       beahome="${bea.home}"/>

wlstop

描述

wlstop 任务用于停止当前正在运行的 WebLogic 实例。要关闭实例,您必须提供用户名和密码。这些将在用于停止实例的构建脚本中以明文形式存储。出于安全原因,因此此任务仅适用于开发环境。

此任务适用于大多数版本的 WebLogic,包括 6.0。您需要指定 BEAHome 才能使此任务在 6.0 下正常工作

参数

属性 描述 必需
BEAHome 此属性选择 WebLogic 6.0 关闭。
classpath 用于运行 WebLogic 关闭命令的 JVM 的类路径。
user 用于关闭服务器的帐户的用户名
password user 参数中指定的帐户的密码。
url 描述服务器监听 T3 连接的端口的 URL。例如,t3://localhost:7001
延迟 服务器停止之前的延迟时间(秒)。 否;默认值为 0(立即关闭)

作为嵌套元素指定的参数

wlstop 任务的类路径可以通过嵌套的 <classpath> 元素设置。

示例

此示例展示了 WebLogic 6.0 服务器的关闭过程。

<wlstop classpath="${weblogic.classes}"
        user="system"
        url="t3://localhost:7001"
        password="foobar"
        beahome="${bea.home}"/>

ejbjar

描述

此任务旨在支持构建 EJB jar 文件(EJB 1.1 & 2.0)。目前支持“普通”EJB jar 文件,即仅包含用户生成的类文件和标准部署描述符的文件。嵌套元素提供对供应商特定部署工具的支持。这些工具目前包括

此任务作为目录扫描任务工作,并对找到的每个部署描述符执行操作。因此,应设置 includesexcludes 以确保找到所有所需的 EJB 描述符,但不会找到任何应用程序服务器描述符。对于找到的每个描述符,ejbjar 将解析部署描述符以确定实现 Bean 的必要类文件。这些文件与部署描述符一起组装成一个格式良好的 EJB jar 文件。可以使用嵌套的 <support> 元素添加需要包含在生成的 jar 中的任何支持文件。对于包含在 jar 中的每个类,ejbjar 将扫描任何超类或超接口。这些将被添加到生成的 jar 中。

如果不存在嵌套的供应商特定部署元素,则任务将只生成一个通用的 EJB jar。此类 jar 通常用作供应商特定部署工具的输入。对于每个嵌套的部署元素,都会运行一个供应商特定的部署工具来生成一个准备好在该供应商的 EJB 容器中部署的 jar 文件。

只有在 jar 文件过时时才会构建 jar 文件。每个部署工具元素将检查其目标 jar 文件,并确定它是否相对于构成 Bean 的类文件和部署描述符而言过时。如果这些文件中的任何一个比 jar 文件更新,则将重新构建 jar 文件,否则将记录一条消息,表明 jar 文件是最新的。

此任务使用 BCEL 来提取所有依赖类。这意味着,除了部署描述符中提到的类之外,任何这些类所依赖的类也会自动包含在 jar 文件中。

命名约定

Ejbjar 处理多个 Bean 的处理,并使用一组命名约定来确定生成的 EJB jar 的名称。使用的命名约定由 naming 属性控制。它支持以下值
描述符

这是默认的命名方案。生成的 Bean 的名称是从部署描述符的名称派生的。例如,对于 Account Bean,部署描述符将命名为 Account-ejb-jar.xml。供应商特定描述符使用相同的命名约定进行定位。例如,WebLogic Bean 将命名为 Account-weblogic-ejb-jar.xml。在这种安排下,部署描述符可以与实现 Bean 的代码分离,这在同一 Bean 代码部署在具有不同部署特性的不同 Bean 中时非常有用。

此方案在您每个 EJB jar 使用一个 Bean 且您可能在不同的 Bean 中部署相同的 Bean 类(具有不同的部署特性)时非常有用。

ejb-name

此命名方案使用部署描述符中的 <ejb-name> 元素来确定 Bean 名称。在这种情况下,描述符通常使用通用的描述符名称,例如 ejb-jar.xml 以及任何相关的供应商特定描述符名称。例如,如果 <ejb-name> 的值在部署描述符中给出如下

<ejb-jar>
    <enterprise-beans>
        <entity>
            <ejb-name>Sample</ejb-name>
            <home>org.apache.ant.ejbsample.SampleHome</home>

则生成的 Bean 的名称将为 Sample.jar

此方案在您希望使用标准部署描述符名称时非常有用,这些名称可能与其他 EJB 工具更兼容。此方案必须每个 jar 使用一个 Bean。

目录

在此模式下,生成的 Bean jar 的名称是从包含部署描述符的目录派生的。同样,部署描述符通常使用标准文件名。例如,如果部署描述符的路径为 /home/user/dev/appserver/dd/sample,则生成的 Bean 将命名为 sample.jar

此方案在您希望使用标准样式的描述符名称时也非常有用。当描述符位于与 Bean 源代码相同的目录中时,它通常最有用,尽管这不是强制性的。此方案可以处理每个 jar 多个 Bean。

basejarname

<ejbjar> 任务支持的最终方案用于您希望直接指定生成的 Bean jar 名称时。在这种情况下,生成的 jar 的名称由 basejarname 属性指定。由于所有生成的 Bean 都会具有相同的名称,因此此任务应仅在每个描述符位于其自己的目录中时使用。

此方案最适合您每个 jar 使用多个 Bean 并且只处理单个部署描述符时。您通常希望指定 jar 的名称,而不是从 jar 中的 Bean 派生它。

依赖项

除了 Bean 类之外,ejbjar 还能够将其他类添加到生成的 EJB jar 中。这些类通常是 Bean 类使用的支持类,或者作为 Bean 方法的参数。

在 Ant 1.5 之前的版本中,ejbjar 使用反射并尝试添加 Bean 类的超类和超接口。为了使此技术起作用,Bean 类必须加载到 Ant 的 JVM 中。由于类依赖项,这并不总是可能的。

自 Ant 1.5 起,此任务使用 BCEL 库直接分析 Bean 的类文件,而不是将它们加载到 JVM 中。这也允许 ejbjar 添加 Bean 的所有必需支持类,而不仅仅是超类。

自 Ant 1.5 起dependency 属性允许构建文件控制将哪些其他类添加到生成的 jar 中。它接受三个可能的值

superfull 值需要 BCEL 库可用。如果不可用,ejbjar 将回退到与值 none 相对应的行为。

参数

属性 描述 必需
descriptordir 要扫描 EJB 部署描述符的基目录。如果未指定此属性,则部署描述符必须位于由 srcdir 属性指定的目录中。
srcdir 包含构成 Bean 的 .class 文件的基目录。包括 home-remote-pk-implementation- 类以及所有这些类所依赖的类。请注意,如果所有文件都在同一个目录树中,则这可以与 descriptordir 相同。
destdir 将生成的 jar 文件放入其中的基目录。jar 文件将根据它们在 descriptordir 命名空间中的位置放入相应的目录中。请注意,此属性仅在任务生成通用 jar 时使用(即,未指定任何供应商特定部署元素)。 是,除非指定了供应商特定部署元素。
cmpversion 要么是 1.0,要么是 2.0
CMP 2.0 实现目前仅适用于 JBoss。
否;默认值为 1.0
naming 控制用于命名生成的 EJB jar 的命名约定。请参阅上面的 描述
basejarname 用于生成的 jar 文件的基名称。如果指定了此属性,则通用 jar 文件名将使用此值作为前缀(后跟 genericjarsuffix 属性中指定的值),而生成的 EJB jar 文件(后跟嵌套元素中指定的任何后缀)将使用此值作为前缀。
basenameterminator 用于从找到的每个部署描述符的名称中截取字符串的字符串值,然后使用该字符串来定位相关的部署描述符(例如,WebLogic 描述符)。例如,基名称为 . 且部署描述符名为 FooBean.ejb-jar.xml 将导致基名称为 FooBean,然后将使用该基名称来查找 FooBean.weblogic-ejb-jar.xmlFooBean.weblogic-cmp-rdbms-jar.xml,以及创建 jar 文件的文件名,例如 FooBean-generic.jarFooBean-wl.jar。如果指定了 basejarname 属性,则不会使用此属性。 否;默认为 -
genericjarsuffix 附加到部署描述符的基名称以创建通用 EJB jar 文件的文件名的字符串值。 否;默认为 -generic.jar
classpath 此类路径用于解析要添加到 jar 中的类。通常,嵌套的部署工具元素也将支持一个类路径,该类路径将在解析类时与该类路径组合。
flatdestdir 如果希望将所有生成的 jar 放置在 destdir 的根目录中,而不是根据部署描述符在 descriptordir 层次结构中的位置进行放置,则将此属性设置为 true
dependency 此属性控制将哪些其他类和接口添加到 jar 中。请参阅上面的 描述
manifest 要使用的清单文件(如果有)。

作为嵌套元素指定的参数

除了供应商特定的嵌套元素之外,ejbjar 任务还提供三个嵌套元素。

classpath

<classpath> 嵌套元素允许设置类路径。在设置类路径时,它在引用路径中很有用。在所有其他方面,行为与 classpath 属性相同。

dtd

<dtd> 元素用于指定解析 EJB 部署描述符时要使用的 DTD 的本地位置。使用本地 DTD 比通过网络加载 DTD 快得多。如果您在防火墙后面运行 ejbjar,您甚至可能无法访问远程 DTD。支持的供应商特定嵌套元素知道供应商类层次结构中所需 DTD 的位置,通常这意味着不需要 <dtd> 元素。但是,这意味着在启动 Ant 时,供应商的类层次结构必须在类路径中可用。如果您希望在不将供应商类放在类路径中运行 Ant,则需要使用 <dtd> 元素。

属性 描述 必需
publicId 正在提供位置的 DTD 的公共 ID
location DTD 本地副本的位置。这可以是文件,也可以是从类路径加载的资源。

support

<support> 嵌套元素用于提供要包含在生成的 jar 中的其他类(文件)。<support> 元素是一个 FileSet,因此它可以引用其他地方声明的文件集,也可以使用适当的 <include><exclude> 嵌套元素在本地定义。支持文件集中的文件将添加到生成的 EJB jar 中,其相对位置与它们在支持文件集中的位置相同。请注意,当 ejbjar 生成多个 jar 文件时,支持文件将被添加到每个文件中。

供应商特定部署元素

每个供应商特定的嵌套元素控制特定于该供应商的 EJB 容器的可部署 jar 的生成。此处详细介绍了每个支持的部署元素的参数。

Jboss 元素

jboss 元素搜索 JBoss 特定的部署描述符,并将它们添加到最终的 EJB jar 文件中。JBoss 有两个部署描述符

JBoss 服务器使用热部署,不需要编译额外的存根和骨架。

属性 描述 必需
destdir 生成的 JBoss 就绪 jar 文件存放的基目录。jar 文件存放在与它们在 descriptordir 命名空间中的位置相对应的目录中。
genericjarsuffix 通用 jar 文件作为构建 JBoss 部署 jar 的中间步骤生成。用于生成通用 jar 文件的后缀并不特别重要,除非需要保留通用 jar 文件。但是,它不应该与后缀设置相同。 否;默认为 -generic.jar
后缀 附加到部署描述符基本名称的字符串值,用于创建 JBoss EJB jar 文件的文件名。 否;默认值为 .jar
keepgeneric 这控制是否保留用作 ejbc 输入的通用文件。 否;默认为 false

WebLogic 元素

weblogic 元素用于控制 weblogic.ejbc 编译器以生成 WebLogic EJB jar 文件。在 Ant 1.3 之前,定位 CMP 描述符的方法是使用 ejbjar 命名约定。因此,如果您的 EJB jar 被称为 Customer-ejb-jar.xml,您的 WebLogic 描述符被称为 Customer-weblogic-ejb-jar.xml,您的 CMP 描述符必须是 Customer-weblogic-cmp-rdbms-jar.xml。此外,WebLogic 描述符中的 <type-storage> 元素必须设置为标准名称 META-INF/weblogic-cmp-rdbms-jar.xml,因为这是 CMP 描述符在生成的 jar 中映射到的位置。

这种方案存在一些问题。它不允许在 jar 中定义多个 CMP 描述符,并且与某些工具生成的部署描述符不兼容。

在 Ant 1.3 中,ejbjar 解析 WebLogic 部署描述符以发现 CMP 描述符,然后自动包含它们。此行为由 newCMP 属性控制。请注意,如果您迁移到确定 CMP 描述符的新方法,则需要更新 WebLogic 部署描述符的 <type-storage> 元素。在上面的示例中,您将将其定义为 META-INF/Customer-weblogic-cmp-rdbms-jar.xml

属性 描述 必需
destdir 生成的 WebLogic 就绪 jar 文件存放的基目录。jar 文件存放在与它们在 descriptordir 命名空间中的位置相对应的目录中。
genericjarsuffix 通用 jar 文件作为构建 WebLogic 部署 jar 的中间步骤生成。用于生成通用 jar 文件的后缀并不特别重要,除非需要保留通用 jar 文件。但是,它不应该与后缀设置相同。 否;默认为 -generic.jar
后缀 附加到部署描述符基本名称的字符串值,用于创建 WebLogic EJB jar 文件的文件名。 否;默认值为 .jar
classpath 运行 WebLogic ejbc 工具时要使用的类路径。请注意,此工具通常需要构成 bean 的类在类路径上可用。但是,目前,这会导致 ejbc 工具在单独的 JVM 中运行。
wlclasspath WebLogic 6.0 会在 bean 的 home 和 remote 接口位于用于运行 weblogic.ejbc 的系统类路径上时发出警告。在这种情况下,应使用此属性(或等效的嵌套元素)设置标准 WebLogic 类,并将 home 和 remote 接口与标准类路径属性一起定位。
keepgeneric 这控制是否保留用作 ejbc 输入的通用文件。 否;默认为 false
编译器 这允许选择不同的编译器来编译生成的 Java 文件。例如,可以将其设置为 jikes 以使用 Jikes 编译器进行编译。如果未设置此项,并且 build.compiler 属性设置为 jikes,则将使用 Jikes 编译器。如果不需要这样做,可以给出值 default 以使用默认编译器。
重建 此标志控制是否始终调用 weblogic.ejbc 来构建 jar 文件。在某些情况下,例如仅更改了 bean 类时,可以通过简单地替换更改的类来生成 jar 文件,而无需重新运行 ejbc。将其设置为 false 将减少运行 ejbjar 的时间。 否;默认值为 true
keepgenerated 控制 WebLogic 是否保留用于构建添加到 jar 的类文件的生成的 Java 文件。这在调试时可能很有用。 否;默认为 false
参数 要传递给 weblogic.ejbc 工具的任何其他参数。
weblogicdtd 已弃用。定义 WebLogic 类层次结构中 ejb-jar DTD 的位置。如果您在类路径中包含 WebLogic,则不需要这样做。如果您没有,则应使用嵌套的 <dtd> 元素,如上所述。如果您选择使用属性,则应使用嵌套的 <dtd> 元素。
wldtd 已弃用。定义 WebLogic 特定部署描述符涵盖的 weblogic-ejb-jar DTD 的位置。如果您在类路径中包含 WebLogic,则不需要这样做。如果您没有,则应使用嵌套的 <dtd> 元素,如上所述。
ejbdtd 已弃用。定义 WebLogic 类层次结构中 ejb-jar DTD 的位置。如果您在类路径中包含 WebLogic,则不需要这样做。如果您没有,则应使用嵌套的 <dtd> 元素,如上所述。
newCMP 如果将其设置为 true,则将使用定位 CMP 描述符的新方法。 否;默认为 false
oldCMP 已弃用 这是 newCMP 的反义词,应改用它。
noEJBC 如果将此属性设置为 true,则 WebLogic 的 ejbc 不会在 EJB jar 上运行。如果您希望在部署时运行 ejbc,请使用此选项。
ejbcclass 指定 ejbc 编译器的类名。通常,ejbjar 会根据用于 EJB 的 DTD 确定适当的类。但是,WebLogic 6 中的 EJB 2.0 编译器在版本 7 中已被弃用。在与版本 7 一起使用时,应将此属性设置为 weblogic.ejbc 以避免弃用警告。
jvmargs 要传递给运行 weblogic.ejbc 工具的 JVM 的任何其他参数。例如,要设置内存大小,这可能是 jvmargs=-Xmx128m
jvmdebuglevel 设置运行执行 ejbc 的 JVM 时要使用的 weblogic.StdoutSeverityLevel。设置为 16 以避免有关 EJB Home 和 Remotes 位于类路径中的警告。
outputdir 如果设置了,ejbc 将使用此目录作为输出目标,而不是 jar 文件。这允许生成“展开”的 jar 文件。

weblogic 嵌套元素支持三个嵌套元素。前两个,<classpath><wlclasspath>,用于设置各自的类路径。当使用引用 ID 设置类路径时,这些嵌套元素很有用。最后一个,<sysproperty>,允许在编译器运行期间设置 Java 系统属性。事实证明,这对于在所有环境中支持 CMP EJB 编译是必要的。

TOPLink for WebLogic 元素

已弃用

toplink 元素不再需要。只要 newCMP 属性设置为 true,就可以使用标准的 weblogic 元素构建 Toplink bean。

TopLink 元素用于处理使用 Toplink 进行 CMP 操作的 bean。它源自标准的 weblogic 元素,因此它支持相同的属性集,以及以下附加属性。

属性 描述 必需
toplinkdescriptor 这指定了 descriptordir 目录中包含的 TOPLink 部署描述符文件的文件名。
toplinkdtd 这指定了 TOPLink DTD 文件的位置。这可以是文件路径或文件 URL。此属性不是必需的,但建议使用本地 DTD。 否;默认值为 www.objectpeople.com 上的 DTD 文件。

示例

此示例显示了 ejbjar 用于使用 WebLogic EJB 容器生成部署 jar 文件。此示例要求使用命名标准来命名部署描述符。使用此格式将为在部署描述符目录中找到的每个 *-ejb-jar.xml 变体创建一个 EJB jar 文件。

<ejbjar srcdir="${build.classes}"
        descriptordir="${descriptor.dir}">
  <weblogic destdir="${deploymentjars.dir}"
            classpath="${descriptorbuild.classpath}"/>
  <include name="**/*-ejb-jar.xml"/>
  <exclude name="**/*weblogic*.xml"/>
</ejbjar>

如果 WebLogic 不在 Ant 类路径中,以下示例显示了如何指定 WebLogic DTD 的位置。此示例还显示了嵌套 classpath 元素的使用。

<ejbjar descriptordir="${src.dir}" srcdir="${build.classes}">
   <weblogic destdir="${deployment.webshop.dir}"
             keepgeneric="true"
             args="-g -keepgenerated ${ejbc.compiler}"
             suffix=".jar"
             oldCMP="false">
     <classpath>
       <pathelement path="${descriptorbuild.classpath}"/>
     </classpath>
   </weblogic>
   <include name="**/*-ejb-jar.xml"/>
   <exclude name="**/*-weblogic-ejb-jar.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>

此示例显示了 ejbjar 用于使用 WebLogic EJB 容器生成单个部署 jar 文件。此示例不要求部署描述符使用命名标准。这将只创建一个 EJB jar 文件 - TheEJBJar.jar

<ejbjar srcdir="${build.classes}"
        descriptordir="${descriptor.dir}"
        basejarname="TheEJBJar">
  <weblogic destdir="${deploymentjars.dir}"
            classpath="${descriptorbuild.classpath}"/>
  <include name="**/ejb-jar.xml"/>
  <exclude name="**/weblogic*.xml"/>
</ejbjar>

此示例显示了 ejbjar 用于使用 WebLogic EJB 容器为启用 TOPLink 的实体 bean 生成部署 jar 文件。此示例不要求部署描述符使用命名标准。这将只创建一个启用 TOPLink 的 EJB jar 文件 - Address.jar

<ejbjar srcdir="${build.dir}"
        destdir="${solant.ejb.dir}"
        descriptordir="${descriptor.dir}"
        basejarname="Address">
        <weblogictoplink destdir="${solant.ejb.dir}"
                classpath="${java.class.path}"
                keepgeneric="false"
                toplinkdescriptor="Address.xml"
                toplinkdtd="file:///dtdfiles/toplink-cmp_2_5_1.dtd"
                suffix=".jar"/>
        <include name="**/ejb-jar.xml"/>
        <exclude name="**/weblogic-ejb-jar.xml"/>
</ejbjar>

此最终示例显示了如何在 WebLogic 6.0 下设置 ejbjar。它还显示了使用 <support> 元素添加支持文件。

<ejbjar descriptordir="${dd.dir}" srcdir="${build.classes.server}">
   <include name="**/*-ejb-jar.xml"/>
   <exclude name="**/*-weblogic-ejb-jar.xml"/>
   <support dir="${build.classes.server}">
        <include name="**/*.class"/>
   </support>
   <weblogic destdir="${deployment.dir}"
             keepgeneric="true"
             suffix=".jar"
             rebuild="false">
     <classpath>
        <pathelement path="${build.classes.server}"/>
     </classpath>
     <wlclasspath>
        <pathelement path="${weblogic.classes}"/>
     </wlclasspath>
   </weblogic>
</ejbjar>

WebSphere 元素

websphere 元素搜索 WebSphere 特定的部署描述符,并将它们添加到最终的 EJB jar 文件中。WebSphere 为会话 bean 有两个特定的描述符

以及另外两个用于容器管理的实体 bean

在 WebSphere 方面,容器代码和存根的生成称为部署。此步骤可以由 websphere 元素作为 jar 生成过程的一部分执行。如果开关 ejbdeploy 处于打开状态,则会为每个 EJB jar 调用来自 WebSphere 工具集的 ejbdeploy 工具。不幸的是,此步骤仅在使用 IBM JDK 时才有效。否则,rmic(由 ejbdeploy 调用)会抛出 ClassFormatError。如果 Ant 使用 Oracle JDK 或 OpenJDK 运行,请确保关闭 ejbdeploy

要使 websphere 元素正常工作,您必须提供一个完整的类路径,其中包含反映 bean 类所需的所有类。要使 ejbdeploy 正常工作,您还必须提供 ejbdeploy 工具的类路径,并设置 websphere.home 属性(请查看下面的示例)。

属性 描述 必需
destdir 生成的 WebSphere 就绪 jar 文件存放的基目录。jar 文件存放在与它们在 descriptordir 命名空间中的位置相对应的目录中。
ejbdeploy 决定是否调用 ejbdeploy。当您将其设置为 true 时,请确保使用 IBM JDK 运行 Ant。 否;默认值为 true
后缀 附加到部署描述符基本名称的字符串值,用于创建 WebSphere EJB jar 文件的文件名。 否;默认值为 .jar
keepgeneric 这控制是否保留用作 ejbdeploy 输入的通用文件。 否;默认为 false
重建 这控制是否调用 ejbdeploy,即使没有发生任何更改。 否;默认为 false
tempdir ejbdeploy 将写入临时文件的目录 否;默认值为 _ejbdeploy_temp
dbName
dbSchema
这些选项将传递给 ejbdeploy
dbVendor 此选项将传递给 ejbdeploy。可以通过运行以下命令获取有效选项
<WAS_HOME>/bin/EJBDeploy.[sh/bat] -help
这也用于确定 Map.mapxmiSchema.dbxmi 文件的名称,例如 Account-DB2UDBWIN_V71-Map.mapxmiAccount-DB2UDBWIN_V71-Schema.dbxmi
codegen
quiet
novalidate
noinform
trace
use35MappingRules
所有这些选项都将传递给 ejbdeploy 否;默认值为 falsequiet 除外)。
rmicOptions 此选项将传递给 ejbdeploy,并将传递给 rmic

此示例显示了 ejbjar 用于为 descriptordir 中的所有部署描述符生成部署 jar 文件。

<property name="websphere.home" value="${was4.home}"/>
<ejbjar srcdir="${build.class}" descriptordir="etc/ejb">
  <include name="*-ejb-jar.xml"/>
  <websphere dbvendor="DB2UDBOS390_V6"
             ejbdeploy="true"
             oldCMP="false"
             tempdir="/tmp"
             destdir="${dist.server}">
    <wasclasspath>
      <pathelement location="${was4.home}/deploytool/itp/plugins/org.eclipse.core.boot/boot.jar"/>
      <pathelement location="${was4.home}/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime/batch.jar"/>
      <pathelement location="${was4.home}/lib/xerces.jar"/>
      <pathelement location="${was4.home}/lib/ivjejb35.jar"/>
      <pathelement location="${was4.home}/lib/j2ee.jar"/>
      <pathelement location="${was4.home}/lib/vaprt.jar"/>
    </wasclasspath>
    <classpath>
      <path refid="build.classpath"/>
    </classpath>
  </websphere>
  <dtd publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"
       location="${lib}/dtd/ejb-jar_1_1.dtd"/>
</ejbjar>

iPlanet Application Server (iAS) 元素

<iplanet> 嵌套元素用于构建特定于 iAS 的存根和骨架,并构建一个可以部署到 iPlanet Application Server 6.0 的 JAR 文件。构建过程将始终确定 EJB 存根/骨架和 EJB jar 文件是否是最新的,并且将执行最少的工作量。

weblogic 元素类似,EJB 描述符的命名约定通常用于指定完成的 JAR 文件的名称。例如,如果在描述符目录中找到 EJB 描述符 ejb/Account-ejb-jar.xml,则 iplanet 元素将搜索名为 ejb/Account-ias-ejb-jar.xml 的特定于 iAS 的 EJB 描述符文件(如果未找到,则任务将失败),并且名为 ejb/Account.jar 的 JAR 文件将写入目标目录。请注意,当 EJB 描述符添加到 JAR 文件时,它们会自动重命名为 META-INF/ejb-jar.xmlMETA-INF/ias-ejb-jar.xml

当然,可以通过在 ejbjar 任务(例如,basejarnamebasenameterminatorflatdestdir)以及 iplanet 元素(例如,suffix)中指定属性来修改此命名行为。有关更多详细信息,请参阅相应的文档。

参数

属性 描述 必需
destdir 将生成的 JAR 文件写入其中的基本目录。每个 JAR 文件都写入与它们在 descriptordir 命名空间中的位置相对应的目录中。
classpath 生成 EJB 存根和骨架时使用的类路径。如果指定,classpath 将附加到父 ejbjar 任务中指定的类路径。请注意,也可以使用嵌套的 classpath 元素。 否;默认为父 ejbjar 任务中指定的类路径。
keepgenerated 指示 ejbc 生成的 Java 源文件是否将被保存或自动删除。如果为 yes,则源文件将被保留。 否;默认为 no
debug 指示 ejbc 实用程序是否应将额外的调试语句记录到标准输出。如果为 yes,则将生成额外的调试语句。 否;默认为 no
iashome 可用于指定此 iAS 安装的“home”目录。如果指定了此属性,则用于查找 ejbc 实用程序,如果它未包含在用户的系统路径中。如果指定,它应该引用 [install-location]/iplanet/ias6/ias 目录。 否;默认情况下,ejbc 实用程序必须位于用户的系统路径上。
后缀 在创建每个 JAR 时附加到 JAR 文件名的字符串值。 否;默认值为 .jar

如上所述,iplanet 元素支持额外的 <classpath> 嵌套元素。

示例

此示例演示了 <iplanet> 嵌套元素的典型用法。它将使用附加到每个标准 EJB 描述符的“basename”来命名每个 EJB jar。例如,如果处理名为 Account-ejb-jar.xml 的描述符,则 EJB-JAR 将被命名为 Account.jar

<ejbjar srcdir="${build.classesdir}"
        descriptordir="${src}">

    <iplanet destdir="${assemble.ejbjar}"
             classpath="${ias.ejbc.cpath}"/>
    <include name="**/*-ejb-jar.xml"/>
    <exclude name="**/*ias-*.xml"/>
</ejbjar>

此示例演示了嵌套 classpath 元素以及其他一些可选属性的用法。

<ejbjar srcdir="${build.classesdir}"
        descriptordir="${src}">

    <iplanet destdir="${assemble.ejbjar}"
             iashome="${ias.home}"
             debug="yes"
             keepgenerated="yes">
        <classpath>
            <pathelement path="."/>
            <pathelement path="${build.classpath}"/>
        </classpath>
    </iplanet>
    <include name="**/*-ejb-jar.xml"/>
    <exclude name="**/*ias-*.xml"/>
</ejbjar>

此示例演示了 basejarname 属性的用法。在这种情况下,完成的 EJB jar 将被命名为 HelloWorld.jar。如果可能找到多个 EJB 描述符,则必须注意确保完成的 JAR 文件不会相互覆盖。

<ejbjar srcdir="${build.classesdir}"
        descriptordir="${src}"
        basejarname="HelloWorld">

    <iplanet destdir="${assemble.ejbjar}"
             classpath="${ias.ejbc.cpath}"/>
    <include name="**/*-ejb-jar.xml"/>
    <exclude name="**/*ias-*.xml"/>
</ejbjar>

此示例演示了 dtd 嵌套元素的用法。如果类路径中包含 DTD 的本地副本,则它们将自动引用,而无需嵌套元素。在 iAS 6.0 SP2 中,这些本地 DTD 位于 [iAS-install-directory]/APPS 目录中。在 iAS 6.0 SP3 中,这些本地 DTD 位于 [iAS-install-directory]/dtd 目录中。

<ejbjar srcdir="${build.classesdir}"
        descriptordir="${src}">
    <iplanet destdir="${assemble.ejbjar}">
             classpath="${ias.ejbc.cpath}"/>
    <include name="**/*-ejb-jar.xml"/>
    <exclude name="**/*ias-*.xml"/>

    <dtd publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"
         location="${ias.home}/APPS/ejb-jar_1_1.dtd"/>
    <dtd publicId="-//Sun Microsystems, Inc.//DTD iAS Enterprise JavaBeans 1.0//EN"
         location="${ias.home}/APPS/IASEjb_jar_1_0.dtd"/>
</ejbjar>

JOnAS(Java Open Application Server)元素

<jonas> 嵌套元素使用 GenIC 特定工具构建特定于 JOnAS 的存根和骨架,并构建一个可以部署到 JOnAS Application Server 的 JAR 文件。构建过程将始终确定 EJB 存根/骨架和 EJB jar 文件是否是最新的,并且将执行最少的工作量。

与 WebLogic 元素类似,EJB 描述符的命名约定通常用于指定完成的 JAR 文件的名称。例如,如果在描述符目录中找到 EJB 描述符 ejb/Account-ejb-jar.xml,则 <jonas> 元素将搜索名为 ejb/Account-jonas-ejb-jar.xml 的特定于 JOnAS 的 EJB 描述符文件,并且名为 ejb/Account.jar 的 JAR 文件将写入目标目录。但是,<jonas> 元素也可以使用 JOnAS 命名约定。使用与以下相同的示例,EJB 描述符也可以在描述符目录中命名为 ejb/Account.xml(此处没有基本名称终止符)。然后,<jonas> 元素将搜索名为 ejb/jonas-Account.xml 的特定于 JOnAS 的 EJB 描述符文件。此约定并不严格遵循 EJB jar 命名约定建议,但为了与 JOnAS 的先前版本向后兼容而得到支持。

请注意,当 EJB 描述符添加到 JAR 文件时,它们会自动重命名为 META-INF/ejb-jar.xmlMETA-INF/jonas-ejb-jar.xml

当然,可以通过在 ejbjar 任务(例如,basejarnamebasenameterminatorflatdestdir)以及 iplanet 元素(例如,suffix)中指定属性来修改此命名行为。有关更多详细信息,请参阅相应的文档。

此任务在 临时目录 中为暂存数据创建一个目录。

参数

属性 描述 必需
destdir 将生成的 JAR 文件写入其中的基本目录。每个 JAR 文件都写入与它们在 descriptordir 命名空间中的位置相对应的目录中。
jonasroot JOnAS 的根目录。
classpath 生成 EJB 存根和骨架时使用的类路径。如果指定,classpath 将附加到父 ejbjar 任务中指定的类路径(另请参阅下面的 ORB 属性文档)。请注意,也可以使用嵌套的 classpath 元素。 否;默认为父 ejbjar 任务中指定的类路径。
keepgenerated 如果 GenIC 生成的中间 Java 源文件必须删除,则为 true 否;默认为 false
nocompil 如果生成的源文件不应通过 Java 和 RMI 编译器进行编译,则为 true 否;默认为 false
novalidation 如果 XML 部署描述符必须在不进行验证的情况下进行解析,则为 true 否;默认为 false
javac 要使用的 Java 编译器。 否;默认为 build.compiler 属性的值。
javacopts 要传递给 Java 编译器的选项。
rmicopts 要传递给 RMI 编译器的选项。
secpropag 如果必须修改 RMI 骨架和存根以实现安全上下文的隐式传播(事务上下文始终提供),则为 true 否;默认为 false
verbose 指示是否使用 -verbose 开关。 否;默认为 false
additionalargs 将其他参数添加到 GenIC。
keepgeneric 如果用作 GenIC 输入的通用 JAR 文件必须保留,则为 true 否;默认为 false
jarsuffix 在创建每个 JAR 时附加到 JAR 文件名的字符串值。 否;默认值为 .jar
orb 选择您的 ORB:RMIJEREMIEDAVID。如果指定,相应的 JOnAS JAR 将自动添加到类路径。 否;默认为类路径中存在的那个。
nogenic 如果将此属性设置为 true,则 JOnAS 的 GenIC 将不会在 EJB jar 上运行。如果您希望在部署时运行 GenIC,请使用此选项。 否;默认为 false

如上所述,jonas 元素支持额外的 <classpath> 嵌套元素。

示例

此示例显示了 ejbjar 用于使用 JOnAS EJB 容器生成部署 jar。此示例要求使用命名标准进行部署描述符。使用此格式将为部署描述符目录中找到的每个 *-jar.xml 变体创建一个 EJB jar 文件。

<ejbjar srcdir="${build.classes}"
        descriptordir="${descriptor.dir}">
  <jonas destdir="${deploymentjars.dir}"
       jonasroot="${jonas.root}"
       orb="RMI"/>
  <include name="**/*.xml"/>
  <exclude name="**/jonas-*.xml"/>
  <support dir="${build.classes}">
       <include name="**/*.class"/>
  </support>
</ejbjar>

此示例显示了 ejbjar 用于使用 JOnAS EJB 容器生成单个部署 jar。此示例确实要求部署描述符使用命名标准。这将只创建一个 EJB jar 文件——TheEJBJar.jar

<ejbjar srcdir="${build.classes}"
        descriptordir="${descriptor.dir}"
        basejarname="TheEJBJar">
  <jonas destdir="${deploymentjars.dir}"
            jonasroot="${jonas.root}"
            suffix=".jar"
            classpath="${descriptorbuild.classpath}"/>
  <include name="**/ejb-jar.xml"/>
  <exclude name="**/jonas-ejb-jar.xml"/>
</ejbjar>

Orion 元素

orion 元素搜索 Orion Application Server 特定的部署描述符,并将它们添加到最终的 EJB jar 文件中。Orion 有一个部署描述符

属性 描述 必需
destdir 将生成的 jar 文件存放其中的基本目录。jar 文件存放于与它们在 descriptordir 命名空间中的位置相对应的目录中。

示例

<ejbjar srcdir="${build.classes}"
        descriptordir="${descriptor.dir}"
        basejarname="TheEJBJar"
        flatdestdir="true"
        dependency="super"
        genericjarsuffix=".jar">
  <include name="**/*-ejb-jar.xml"/>
  <orion destdir="${deploymentjars.dir}"\>
</ejbjar>