4

我有一些或 EJB jar 模块,其中还包括本问题中所述的 Web 资源。

我现在想将其部署为 EAR 的一部分。

现在,我可以毫无问题地将其作为一场战争来进行,这就是我的后备计划。但是,我想了解是否可以将多个“web 片段”jar 部署到一个耳朵中以形成一个完整的 web 应用程序,而无需在其中使用 war 文件将它们组合在一起。

此外,如果我有多个依赖于一个或多个这些 jar 的 war 文件,我是否必须构建它们以便这些 jar 在 war 文件的 WEB-INF/lib 中重复,即使这些 jar 文件最终在同一只耳朵?

在这种情况下,如果 jar 文件包含实体,是否也需要它们在耳朵的根中以便可以定义全局持久性单元?

我在 JBoss 7 上,但如果可能的话,我更喜欢标准的容器独立解决方案。

4

1 回答 1

3

这将适用于任何符合 JEE5 的服务器。

假设你有

  • 2 EJB 称为 myejb1.jar 和 myejb2.jar
  • 2 个名为 mywebapp1.war 和 mywebapp2.war 的 WAR webapp
  • 2 个常见的 JAR,称为 log4j.jar 和 mycommon.jar

您希望将其全部打包到一个名为 myapp.ear 的 EAR 文件中。

myapp.ear 目录结构如下所示:

myapp.ear:
   META-INF/application.xml
   myejb1.jar
   myejb2.jar
   mywebapp1.war
   mywebapp2.war
   lib/log4j.jar
   lib/mycommon.jar

您的 META-INF/application.xml 的内容将包含

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/application_5.xsd">

    <module>
        <ejb>myejb1.jar</ejb>
    </module>
    <module>
        <ejb>myejb2.jar</ejb>
    </module>

    <module>
        <web>
            <web-uri>mywebapp1.war</web-uri>
            <context-root>webapp1</context-root>
        </web>
    </module>
    <module>
        <web>
            <web-uri>mywebapp2.war</web-uri>
            <context-root>webapp2</context-root>
        </web>
    </module>

    <library-directory>lib</library-directory>
</application>

您将能够通过 URL
http://myJBossServer.url/webapp1/
http://myJBossServer.url/webapp2/访问您的 Web 应用程序

您还可以在多个 Web 应用程序之间共享静态资源,例如 CSS、图像、JavaScript。例如,我有一个具有以下目录布局的 static-content.jar 文件:

static-content.jar:
   META-INF/resources/css/my.css
   META-INF/resources/img/my.jpg
   META-INF/resources/js/jQuery.js
   META-INF/resources/js/node.js

在构建期间,我将 static-content.jar 放在我的两个 webapps 的 WEB-INF/lib 目录中。现在

http://myJBossServer.url/webapp1/css/my.css
http://myJBossServer.url/webapp2/css/my.css

与 static-content.jar 具有相同的来源。

如果我只想覆盖 webapp2 中默认的 my.css,我可以将修改后的 my.css 直接放入 mywebapp2.war 中。

mywebapp2.war
   css/my.css
   WEB-INF/lib/static-content.jar

WAR 中的 css/my.css 将覆盖 static-content.jar 中的 my.css

于 2013-03-03T05:08:52.793 回答