我正在研究用EJB 2编写的遗留应用程序。我想在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
每个组件都有一个描述符文件(总共约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>
应用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文件,所以我猜测这些文件是用来制作ear文件的吗?
我想将此应用程序加载到eclipse中并尝试调试它。当我在Eclipse中创建vanialla EJB 2.1项目时,我得到的结构如下所示:
EJB2.1Vanilla
ejbModule
META-INF
ejb-jar.xml
MANIFEST.MF
加载该应用程序的最佳方法是什么,以便我可以直接在eclipse中运行它?我认为src文件夹的位置无关紧要,这是我如何重新配置我正在努力的描述符文件。
答案 0 :(得分:1)
你有一些选择:
<target name="deploy">
<copy todir="${YOUR_JBOSS_DEPLOY_DIRECTORY}" file="${THE_EAR_YOU_JUST_GENERATED}"/>
</target>
每次完成更改后都可以调用它。这是一个更保守的选择,因为你尊重原始包装(它应该是相当快的JBoss)。它看起来很难看,很难与Eclipse集成,但它是可靠的,并且可以在JBoss自动部署.ear扫描其更改时使用。
正如您刚才指出的那样,另一种选择是在Eclipse中创建一个vanilla EJB 2项目。只需粘贴/ src目录并将其作为源目录添加到Eclipse项目属性选项卡中。然后使用Eclipse向导创建一个简单的EAR项目,并将其运行到您喜欢的服务器中。通过这种方式,您可以非常顺利地与Eclipse集成,可调试,可修改......这一点的不足之处在于您不尊重原始包装(无论是好还是坏),这种方法几乎无法用于你的持续整合(如果有的话)
如果您有任何maven技能,您可以通过m2eclipse为您提供的某些EJB原型创建Maven项目来为您的项目编组。您可以将/ src目录内容直接复制到src / main / java目录及其在src / main / resources / META-INF中的任何描述符。然后,您可以将其添加到mavenized EAR项目中,该项目将像选项2一样轻松地运行到Eclipse控制的服务器中,这将与您拥有的任何CI解决方案100%兼容