Deployment JBoss AS 7部署顺序和时间安排

Deployment JBoss AS 7部署顺序和时间安排,deployment,jboss,jboss7.x,Deployment,Jboss,Jboss7.x,我这里有一个关于部署顺序的问题,特别是时间安排 我有一个EAR1,它通过一个bean和一些队列提供一些功能。队列在standalone.xml中配置。另一个从ear1使用此服务的EAR2 因此,依赖项看起来像:ear1我过去这样做的方式是修改ear文件的名称。部署似乎是按字母顺序进行的。如果您想首先部署ear1,请将其重命名为a_ear1.ear,将ear2重命名为z_ear2.ear。您现在可能已经知道,JBoss 7.2中将引入耳间依赖性。 我对一个EAR定义其他EAR使用的服务也有同样的问

我这里有一个关于部署顺序的问题,特别是时间安排

我有一个EAR1,它通过一个bean和一些队列提供一些功能。队列在standalone.xml中配置。另一个从ear1使用此服务的EAR2


因此,依赖项看起来像:ear1我过去这样做的方式是修改ear文件的名称。部署似乎是按字母顺序进行的。如果您想首先部署ear1,请将其重命名为a_ear1.ear,将ear2重命名为z_ear2.ear。

您现在可能已经知道,JBoss 7.2中将引入耳间依赖性。
我对一个EAR定义其他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
函数包含(){
本地n=$#
局部值=${!n}
对于((i=1;i<$#;i++){
如果[“${!i}”==“${value}”];则
回声“y”
返回0
fi
}
回声“n”
返回1
}
DD=“/home/martinv/jboss-as-7.1.1.最终/独立/部署”
ORDER_FILE=“/home/martinv/ORDER.txt”
echo“[MDC]手动部署控制”
回声“[MDC]---------------------------”
回显“[MDC]删除标记”
rm-f$DD/*.dodeploy$DD/*.isdeploying$DD/*.deployed$DD/*.failed$DD/*.undeployed$DD/*.pending$DD/*.isundeploying
APPS|u ALL=($(ls-1$DD | grep.ear$\\\\\\\\\.jar$\\\\\\\\\.war$\\\\\\\\\.sar$))
应用程序顺序=($(cat$顺序文件))
echo“[MDC]${{APPS_ALL[@]}APPS在$DD:${APPS_ALL[@]}
echo“[MDC]为${APPS_Order[@]}应用程序定义的顺序:${APPS_Order[@]}”
对于“${APPS_ALL[@]}”中的应用程序
做
如果[$(包含“${APPS_ORDER[@]}”$APP)=“n”];然后
应用程序顺序=(${APPS\u ORDER[@]}“$APP”)
fi
完成
echo“[MDC]应用程序${APPS_order[@]}应用程序的最终顺序:${APPS_order[@]}”
对于“${APPS_ORDER[@]}”中的应用程序
做
echo“[MDC]计划部署:$APP”
触摸“$DD/$APP.dodeploy”
而[!-f“$DD/$APP.deployed”-a!-f“$DD/$APP.failed”];做
睡眠1
完成
结果=`ls-1$DD | egrep“$APP.failed |$APP.deployed”`
echo“[MDC]已完成部署$APP,结果:$result”
完成

我不知道我是否想重复这样的观察结果。这种行为是否有记录?否则,更新JBoss可能会破坏部署策略。但是,尽管如此,我还是使用了部署策略,并且顺序是正确的。我有一个问题,第一个ear尚未完全初始化,但是第二个ear开始初始化,并尝试使用第一个ear执行一些操作。这将导致一种竞赛条件…:-(显然,你是否想尝试它取决于你自己,但这是我解决它所遵循的过程。不管怎样,让我们知道你发现了什么。还有一个问题:JBoss 7支持并行部署。因此,按字母顺序排列的部署过程不再那么确定。它更快,但也更复杂。当然,当我发现了一些东西,我会把它贴在这里。我也被困在这个问题上。我的ear2有一个@Singleton@Startup@PostConstruct服务(我正在移植的旧版本JBoss中曾经是mbean)。似乎@PostConstruct方法在我的依赖项ear1完成启动之前被调用。我还尝试将依赖项:放置在MANIFEST.MF中,但没有效果。
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="deployment.ear1.ear.bean.jar" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>
    <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>