2015-09-04 109 views
1

根据Wildfly's documentation,应该可以声明在EAR中部署子部署的顺序。但是,我无法让它尊重我在应用程序中定义的依赖关系的顺序。我如何获得Wildfly以正确的顺序加载我的EAR部署?

EAR指定了initialize-in-order并且我在JBoss特定文件中指定了一个依赖关系链webapp-three -> webapp-two -> webapp-one

我错过了关于如何声明这一点?

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6"> 
    <display-name>ear</display-name> 
    <initialize-in-order>true</initialize-in-order> 
    <module> 
    <web> 
     <web-uri>webapp-one-1.0-SNAPSHOT.war</web-uri> 
     <context-root>/one</context-root> 
    </web> 
    </module> 
    <module> 
    <web> 
     <web-uri>webapp-two-1.0-SNAPSHOT.war</web-uri> 
     <context-root>/two</context-root> 
    </web> 
    </module> 
    <module> 
    <web> 
     <web-uri>webapp-three-1.0-SNAPSHOT.war</web-uri> 
     <context-root>/three</context-root> 
    </web> 
    </module> 
</application> 

jboss-deployment-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> 
    <sub-deployment name="webapp-one-1.0-SNAPSHOT.war"> 
    </sub-deployment> 
    <sub-deployment name="webapp-two-1.0-SNAPSHOT.war"> 
     <dependencies> 
      <module name="deployment.wildfly-deployment-order.ear.webapp-one-1.0-SNAPSHOT.war" /> 
     </dependencies> 
    </sub-deployment> 
    <sub-deployment name="webapp-three-1.0-SNAPSHOT.war"> 
     <dependencies> 
      <module name="deployment.wildfly-deployment-order.ear.webapp-two-1.0-SNAPSHOT.war" /> 
     </dependencies> 
    </sub-deployment> 
</jboss-deployment-structure> 

我希望部署顺序为:

  1. webapp-one
  2. webapp-two
  3. webapp-three

这里是Wildfly如何部署:

11:27:31,046 INFO MSC service thread 1-1 [deployment] JBAS015973: Starting subdeployment (runtime-name: "webapp-two-1.0-SNAPSHOT.war") 11:27:31,046 INFO MSC service thread 1-1 [deployment] JBAS015973: Starting subdeployment (runtime-name: "webapp-three-1.0-SNAPSHOT.war") 11:27:31,047 INFO MSC service thread 1-1 [deployment] JBAS015973: Starting subdeployment (runtime-name: "webapp-one-1.0-SNAPSHOT.war")

回答

3

即使我们开始在同一时间部署所有的人,初始化,按顺序意味着在各个组件部署将按顺序进行初始化,所以在webapp-two中的EJB Servlets等在webapp-one启动之前不会启动。

我们仍然并行解析部署和构建部署元数据,因为没有理由不这样做。

+0

谢谢,斯图尔特。因此,如果我的理解正确,“正在启动子部署”消息不一定对应于正在启动的部署中的组件。 –

+0

有没有办法通过依赖来定义初始化的顺序,而不是使用initialize-in-order?如果这是唯一的机制,我们错过了一些并行化。 –

0

我有一个子部署相同的问题。您可以在每个子部署中使用依赖关系定义子部署部署顺序。您需要将Class-Path: webapp-one-1.0-SNAPSHOT.war添加到webapp-two-1.0-SNAPSHOT.war的MANIFEST.MF文件中。如果使用maven,则可以在maven-war-plugin文档中描述的配置中使用。它将pom.xml中定义的依赖项放入Class-Path:部分,但如果依赖项定义为提供,则此项不起作用。在这种情况下使用以下配置在pom.xml

<archive> 
    <manifestEntries> 
    <Class-Path>webapp-one-1.0-SNAPSHOT.war</Class-Path> 
    </manifestEntries> 
</archive> 

我发现在张贴在问题的Wildfly文档Wildfly部在类加载溶液中。在本文档中部分是一个绿色的盒子一个绿色对勾:

便携 Java EE规范指出,便携式应用不应该依赖其访问其他子部署子部署,除非明确的类路径条目在MANIFEST.MF中设置。因此,可移植应用程序应始终使用Class-Path条目明确声明其依赖关系。

相关问题