我这里有一个问题,在一般的部署顺序,特别的时机。
我有一个耳朵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>
正如你可能已经知道,耳间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
我在过去做到了这一点的方式是通过修改耳文件的名称。 在部署似乎字母顺序进行。 如果你想ear1被首先部署,将其重命名说a_ear1.ear和EAR2说z_ear2.ear。