Java 重组或重新组装EJB2EAR以在Eclipse中进行调试

Java 重组或重新组装EJB2EAR以在Eclipse中进行调试,java,jakarta-ee,jboss,ejb,ejb-2.x,Java,Jakarta Ee,Jboss,Ejb,Ejb 2.x,我正在开发一个用EJB2编写的遗留应用程序。我想在eclipse中加载它并在eclipse中调试它。我知道我可以在本地Jboss 5.1安装和Eclipse的远程调试中构建和部署它,但是这个选项的问题是,每次进行更改时,我都必须再次构建和部署它 现在,这个应用程序由几个文件夹组成,并使用ANT构建。文件夹结构的高级视图如下所示: MyAppServer build build.xml descriptors app1.xml app

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

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

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
EJB2.1Vanilla
    ejbModule
        META-INF
            ejb-jar.xml
            MANIFEST.MF
每个组件都有一个描述符文件(总共约42个描述符文件)。其中每一项都包含以下定义

<?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> 
因此,看起来ant build sript接受每个模块,构建一个jar文件,创建一个ejb-jar.xml并将其添加到EAR文件中。每个模块都打包为一个jar文件。我在ear文件中没有看到application.xml和application-client.xml文件,所以我猜它们是用来创建ear文件的

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

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
EJB2.1Vanilla
    ejbModule
        META-INF
            ejb-jar.xml
            MANIFEST.MF

加载该应用程序以便直接从eclipse中运行它的最佳方法是什么?我认为src文件夹的位置不重要,重要的是如何重新配置我正在处理的描述符文件

您在这里有几个选项:

  • 您可以使用一些“部署”目标来完成ant脚本,如中所示:

每次你换完衣服就给它打电话。这是一个更为保守的选择,因为您尊重原始的包装(作为JBoss,它应该相当快)。它看起来很难看,很难与Eclipse集成,但它是可靠的,可以在JBoss自动部署.ear扫描其更改时工作

  • 另一个选项是,正如您刚才指出的,在Eclipse中创建一个普通的EJB2项目。只需将/src目录粘贴到那里,并将其作为源目录添加到Eclipse项目属性选项卡中。然后使用Eclipse向导创建一个简单的EAR项目,并将其运行到您最喜欢的服务器中。通过这种方式,您将使它与Eclipse非常平滑地集成,可调试,可修改。。。这种方法的缺点是你不尊重你的原始包装(无论是好的还是坏的),而且这种方法在你的持续集成中很难使用(如果有的话)

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


如果我想使用第二个选项,如何重新构造描述符文件?我想您需要N个eclipse EJB2.1项目,将每个描述符复制到它为您的每个EJB JAR生成的META-INF文件夹中。。。我认为这是可行的,最终的包装可能看起来与遗留的ant非常相似
EJB2.1Vanilla
    ejbModule
        META-INF
            ejb-jar.xml
            MANIFEST.MF
  <target name="deploy">
      <copy todir="${YOUR_JBOSS_DEPLOY_DIRECTORY}" file="${THE_EAR_YOU_JUST_GENERATED}"/>
    </target>