2012-07-05 118 views
3

我在這裏通常會遇到一個問題,那就是一般的部署順序和特別的時機。JBoss AS 7部署順序和時機

我有一個耳朵1,它通過一個bean和一些隊列提供了一些功能。隊列在standalone.xml中配置。另一隻耳朵2使用ear1的這項服務。

所以依賴樣子:ear1 < - EAR2

所以我配置2號穗的部署結構依賴於耳1和部署順序本身現在是正確的。

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure> 
    <deployment> 
     <dependencies> 
      <module name="deployment.ear1.ear" /> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

部署順序現在是正確的,但我現在已經是一個競爭條件由於(我猜)當我耽誤EAR2部署未初始化從耳朵1.

豆,一切工作正常。

有誰知道如何控制部署的時間。不僅可以通過jboss-deployment-structure.xml指定部署的順序,還可以指定啓動下一個部署所需的生命週期?

UPDATE

我試圖指定實際豆罐子包含要使用的服務。這也不起作用。它看起來像:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure> 
    <deployment> 
     <dependencies> 
      <module name="deployment.ear1.ear.bean.jar" /> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 
+0

我也是停留在此創建.dodeploy標記。我的ear2有一個@Singleton @ Startup @ PostConstruct服務(以前是我移植的舊版JBoss中的一個mbean)。在我的依賴ear1完成啓動之前,似乎@ PostConstruct方法被調用。我也嘗試放置依賴關係:在MANIFEST.MF中無濟於事。 – Mike 2012-10-18 03:54:39

回答

0

我過去的做法是通過修改ear文件的名稱。部署似乎按字母順序執行。如果您想先部署ear1,請將其重命名爲a_ear1.ear和ear2以表示z_ear2.ear。

+0

我不知道我是否願意接受這樣的觀察。這種行爲是否記錄在某處?否則,您有可能通過更新JBoss來打破部署策略。但是,儘管如此,我使用這種部署策略,並且順序是正確的。我有一個問題,第一隻耳朵沒有完全初始化,但第二隻耳朵開始初始化,並試圖用第一隻耳朵執行一些操作。這會導致競爭條件... :-( – 2012-07-05 18:38:19

+0

顯然它是由您決定是否要嘗試,但這是我遵循的解決方法。無論哪種方式,請讓我們知道您發現的內容。 – bubbly 2012-07-05 19:06:50

+0

還有另一個問題:在JBoss 7中支持並行部署。因此,按字母順序排列的部署過程不再那麼確定。它速度更快,但也更復雜。當然,當我找到一些東西的時候,我會在這裏發佈。 – 2012-07-06 08:01:57

4

正如你現在可能知道的那樣,耳間的依賴關係將在JBoss 7.2中引入。
我與一個定義其他EAR使用的服務的EAR有同樣的問題。

<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.1"> 
     <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" auto-deploy-zipped="false" auto-deploy-exploded="false"/> 
    </subsystem> 

並運行在單獨的線程下面的腳本剛開始的JBoss之前:我已經在standalone.xml完全關閉自動部署解決了這個。腳本創建一個部署列表,並使用JBoss 7部署掃描器標記文件以指定的順序部署它們。即它創建了第一個部署.dodeploy標記,然後等待,直到它被部署,那麼對於第二個部署等

#!/bin/bash 
function contains() { 
    local n=$# 
    local value=${!n} 
    for ((i=1;i < $#;i++)) { 
     if [ "${!i}" == "${value}" ]; then 
      echo "y" 
      return 0 
     fi 
    } 
    echo "n" 
    return 1 
} 


DD="/home/martinv/jboss-as-7.1.1.Final/standalone/deployments" 
ORDER_FILE="/home/martinv/order.txt" 

echo "[MDC] Manual deployment control" 
echo "[MDC] -------------------------" 
echo "[MDC] Removing markers" 
rm -f $DD/*.dodeploy $DD/*.isdeploying $DD/*.deployed $DD/*.failed $DD/*.undeployed $DD/*.pending $DD/*.isundeploying 

APPS_ALL=($(ls -1 $DD | grep '.ear$\|.jar$\|.war$\|.sar$')) 

APPS_ORDER=($(cat $ORDER_FILE)) 

echo "[MDC] ${#APPS_ALL[@]} apps in $DD: ${APPS_ALL[@]}" 
echo "[MDC] Order defined for ${#APPS_ORDER[@]} apps: ${APPS_ORDER[@]}" 

for APP in "${APPS_ALL[@]}" 
do 
    if [ $(contains "${APPS_ORDER[@]}" $APP) == "n" ]; then 
     APPS_ORDER=("${APPS_ORDER[@]}" "$APP") 
    fi 
done 

echo "[MDC] Final order of ${#APPS_ORDER[@]} apps: ${APPS_ORDER[@]}" 

for APP in "${APPS_ORDER[@]}" 
do 
    echo "[MDC] Scheduled for deploy: $APP" 
    touch "$DD/$APP.dodeploy" 
    while [ ! -f "$DD/$APP.deployed" -a ! -f "$DD/$APP.failed" ]; do 
     sleep 1 
    done 
    RESULT=`ls -1 $DD | egrep "$APP.failed|$APP.deployed"` 
    echo "[MDC] Finished deploying $APP, result: $RESULT" 
done