JBoss应用服务器7部署次序和定时(JBoss AS 7 deployment order and

2019-07-30 06:59发布

我这里有一个问题,在一般的部署顺序,特别的时机。

我有一个耳朵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>

部署顺序现在是正确的,但我现在已经是一个竞争条件由于(我猜)从1号穗未初始化的bean。

当我耽误EAR2的部署,一切工作正常。

有谁知道如何控制部署的时机。 一个不仅可以通过指定的JBoss部署-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>

Answer 1:

正如你可能已经知道,耳间depenendencies将在JBoss的7.2推出。
我有一只耳朵定义由其他的EAR使用的服务相同的问题。 我已经在standalone.xml完全关闭自动部署解决了这个:

    <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之前运行在单独的线程下面的脚本。 该脚本创建部署清单和部署他们使用JBoss 7部署扫描器标记文件中指定的顺序。 也就是说,它创造了第一个部署.dodeploy标记,然后等待,直到它被部署,然后创建.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


Answer 2:

我在过去做到了这一点的方式是通过修改耳文件的名称。 在部署似乎字母顺序进行。 如果你想ear1被首先部署,将其重命名说a_ear1.ear和EAR2说z_ear2.ear。



文章来源: JBoss AS 7 deployment order and timing