2015-09-04 66 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條目明確聲明其依賴關係。

相關問題