java - 重组或重新组装 EJB 2 EAR 以在 Eclipse 中进行调试

标签 java jakarta-ee jboss ejb ejb-2.x

我正在开发一个用 EJB 2 编写的遗留应用程序。我想在 Eclipse 中加载它并在 Eclipse 中调试它。我知道我可以构建它并在本地 Jboss 5.1 安装中部署它并从 Eclipse 进行远程调试,但此选项的问题是每次我进行更改时我都必须再次构建和部署它。

现在该应用程序由多个文件夹组成,并使用 ANT 构建。文件夹结构的高级 View 如下所示:

MyAppServer
    build
        build.xml
    descriptors
        app1.xml
        app2.xml
        app3.xml
        ...
        ...
        app33.xml
    src
        packagefolder1
            com
                xxx
                    xxx
        packagefolder2
            com
                xxx
                    xxx
        packagefolder3
            com
                xxx
                    xxx
    test

每个组件都有一个描述 rune 件(总共约42个描述 rune 件)。每个都包含以下定义

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
<ejb-jar>
   <description>abcd</description>
   <enterprise-beans>
      <session>
         <display-name>xxx Bean</display-name>
         <ejb-name>Xxxx</ejb-name>
         <home>PackageFolder1.xxx.xxx</home>
         <remote>xxx.xxx.xxx</remote>
         <ejb-class>xxx.xxx.xxx</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Bean</transaction-type>
         <resource-ref>
            <res-ref-name>jdbc/myAppDS</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
         </resource-ref>
      </session>
   </enterprise-beans>
</ejb-jar> 

除了描述 rune 件之外,还有三个似乎是通用的文件。 application.xml、application-client.xml 和 web.xml。这些文件的内容具有以下格式

application.xml

<application>
    <display-name>MyAppServer</display-name>
    <module>
        <ejb>app1.jar</ejb>
    </module>
    <module>
        <ejb>app2.jar</ejb>
    </module>
    <module>
        <ejb>app3.jar</ejb>
    </module>
    <module>
        <ejb>app4.jar</ejb>
    </module>
    <module>
        <ejb>app5.jar</ejb>
    </module>
    ....
    ....
    <module>
        <ejb>app42.jar</ejb>
    </module>
</application>

应用程序客户端.xml

<application-client>
    <ejb-ref>
        <ejb-ref-name>xxx</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>xxx.xxxHome</home>
        <remote>xxxx</remote>
    </ejb-ref>
        <ejb-ref>
        <ejb-ref-name>xxx</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>xxx.xxxHome</home>
        <remote>xxxx</remote>
    </ejb-ref>
    ....
    ....
    <ejb-ref>
        <ejb-ref-name>xxx</ejb-ref-name>
        <ejb-ref-type>Session</ejb-ref-type>
        <home>xxx.xxxHome</home>
        <remote>xxxx</remote>
    </ejb-ref>
</application-client>

现在,当我使用 ant 构建脚本来构建它时,我得到一个包含以下内容的 EAR 文件

MyAppServer
    config
    META-INF
        MANIFEST.MF
    app1.jar
        META-INF
            ejb-jar.xml
        packageFolder1
            MyClass1.class
    app2.jar
        META-INF
            ejb-jar.xml
        packageFolder2
            MyClass2.class
    app3.jar
        META-INF
            ejb-jar.xml
        packageFolder3
            MyClass3.class
    app4.jar
        META-INF
            ejb-jar.xml
        packageFolder4
            MyClass3.class

所以看起来 ant 构建脚本采用每个模块,构建一个 jar 文件,创建一个 ejb-jar.xml 并将其添加到 EAR 文件中。每个模块都打包为一个 jar 文件。我没有在ear文件中看到application.xml和application-client.xml文件,所以我猜测这些文件是用来创建ear文件的?

我想将此应用程序加载到 Eclipse 中并尝试调试它。当我在 Eclipse 中创建 vanialla EJB 2.1 项目时,我得到的结构如下所示:

EJB2.1Vanilla
    ejbModule
        META-INF
            ejb-jar.xml
            MANIFEST.MF

加载该应用程序以便我可以直接从 Eclipse 中运行它的最佳方法是什么?我认为 src 文件夹的位置应该不重要,这就是我如何重新配置​​我正在努力解决的描述 rune 件的问题。

最佳答案

这里有几个选项:

  • 您可以使用一些“部署”目标来完成您的 ant 脚本,如下所示:
  <target name="deploy">
      <copy todir="${YOUR_JBOSS_DEPLOY_DIRECTORY}" file="${THE_EAR_YOU_JUST_GENERATED}"/>
    </target>

每次完成更改后只需调用它即可。这是更保守的选择,因为您尊重原始包装(并且 JBoss 的速度应该相当快)。它看起来很丑,而且很难与 Eclipse 集成,但它很可靠,并且可以在 JBoss 自动部署 .ear 扫描其更改时工作。

  • 正如您刚才指出的,另一个选择是在 Eclipse 中创建一个普通 EJB 2 项目。只需将/src 目录粘贴到此处,并将其添加为 Eclipse 项目属性选项卡中的源目录即可。然后也使用 Eclipse 向导创建一个简单的 EAR 项目并将其运行到您最喜欢的服务器中。这样你就可以非常顺利地与 Eclipse 集成,可调试,可修改......这样做的弱点是你不尊重你的原始包装(无论好坏),并且这种方法在以下情况下几乎不可用您的持续集成(如果有)

  • 如果您有任何 Maven 技能,您可以通过从 m2eclipse 为您提供的一些 EJB 原型(prototype)创建 Maven 项目来 Maven 项目。您可以将/src 目录内容直接复制到 src/main/java 目录中,并将其具有的任何描述符复制到 src/main/resources/META-INF 中。然后您可以将其添加到一个 Maven 化的 EAR 项目中,该项目将像选项 2 一样轻松地运行到您的 Eclipse 控制的服务器中,并且这将与您拥有的任何 CI 解决方案 100% 兼容

关于java - 重组或重新组装 EJB 2 EAR 以在 Eclipse 中进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21390770/

相关文章:

JavaRDD<字符串> 到 JavaRDD<行>

java - 从 hibernate 中多对多关系的表中访问数据

apache - 如何通过 Apache 在 URL 中隐藏应用程序名称?

java - 在 Wildfly 9.0 中部署 java war(使用 jaxrs 编写的其余 api)时出现问题

java - 你能帮忙解决 Java 中的正则表达式问题吗?

java - 用 java 构建我自己的 StreamTokenizer

Java - GetSelectedIndexes问题

java - JPA 验证策略

java - 优化应用程序服务器静态内容的吞吐量

java - 使用 WildFly (Undertow) 托管多个域