我正在研究EJB 2中编写的旧应用程序。我想将其加载到Eclipse中,并在Eclipse内进行调试。我知道我可以在Eclipse的本地JBOSS 5.1安装和远程调试中进行构建并部署它,但是此选项的问题是,每次我进行更改时,我都必须再次构建和部署它。
现在,此应用程序由多个文件夹组成,并使用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
每个组件都有一个描述符文件(总计约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>
除了描述符文件外,还有三个似乎是通用的文件。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>
application-client.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 Build sript取每个模块,构建一个JAR文件,创建ejb-jar.xml并将其添加到EAR文件中。每个模块都包装为JAR文件。我没有在ear文件中看到application.xml和application-client.xml文件,所以我猜这些用于craete craete ear file?
我想将此应用程序加载到Eclipse中,然后尝试调试。当我在Eclipse中创建Vanialla EJB 2.1项目时,我得到的结构如下所示:
EJB2.1Vanilla
ejbModule
META-INF
ejb-jar.xml
MANIFEST.MF
加载该应用程序的最佳方法是什么,以便我可以直接从Eclipse内部运行它?我认为SRC文件夹的位置无关紧要,这是我可以重新配置自己正在努力的描述文件的方式。
您在这里有几个选项:
- 您可以使用一些"部署"目标来完成您的蚂蚁脚本:
<target name="deploy">
<copy todir="${YOUR_JBOSS_DEPLOY_DIRECTORY}" file="${THE_EAR_YOU_JUST_GENERATED}"/>
</target>
每次您完成更改时都会称呼它。当您尊重原始包装时,这是更保守的选择(并且在JBOSS中应该相当快)。它看起来很丑陋,几乎不与Eclipse整合在一起,但是它是可靠的,并且可以作为Jboss自动删除的。
正如您刚刚指出的那样,另一个选择是在Eclipse中创建一个香草EJB 2项目。只需将您的/src目录粘贴到其中,然后将其添加为Eclipse Project Properties Tab中的源目录。然后,也可以使用Eclipse向导创建一个简单的EAR项目,然后将其运行到您喜欢的服务器中。这样,您将与Eclipse,可辩论,可修改的方式完全顺利地集成...这样的弱点是您不尊重原始包装(好是好是好),并且这种方法几乎无法使用您的连续集成(如果有)
如果您有任何Maven技能,则可以通过M2eclipse为您提供的某些EJB原型创建一个Maven项目来使您的项目做事。您可以将您的/SRC目录目录直接复制到SRC/MAIN/JAVA目录中,以及它具有的任何描述符中的任何描述符中的SRC/MAIN/Resources/Meta-Inf。然后,您可以将其添加到一个Mavenized Ear项目中,该项目将与选项2一样容易运行到您的Eclipse控制的服务器中,这将与您拥有的任何CI解决方案100%兼容