2012-07-05 117 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