我正在开发一个用 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/