3

ここで、一般的な展開順序、特にタイミングに問題があります。

Bean といくつかのキューを介していくつかの機能を提供する ear 1 があります。キューは、standalone.xml で構成されます。ear1 からこのサービスを使用する別の ear 2。

したがって、依存関係は次のようになります。 ear1 <-- ear2

そのため、ear 2 の展開構造を ear 1 に依存するように構成し、展開順序自体は正しいものになりました。

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

デプロイメントの順序は正しいですが、ear 1 の Bean が初期化されていないため (おそらく) 競合状態になっています。

ear2 の展開を遅らせると、すべて正常に動作します。

展開のタイミングを制御する方法を知っている人はいますか。jboss-deployment-structure.xml を介してデプロイメントの順序だけでなく、次のデプロイメントを開始するために到達する必要があるライフサイクルも指定できますか?

アップデート

使用するサービスを含む実際の Bean jar を指定しようとしました。これも機能していません。次のようになります。

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

2 に答える 2

5

ご存じのとおり、JBoss 7.2 で耳間の依存関係が導入されます。
他の EAR によって使用されるサービスを定義する 1 つの 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 マーカーを作成し、展開されるまで待機してから、2 番目の展開用に .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
于 2013-05-10T06:36:58.580 に答える
0

過去にこれを行った方法は、ear ファイルの名前を変更することでした。展開はアルファベット順に実行されるようです。ear1 を最初にデプロイする場合は、名前を a_ear1.ear に変更し、ear2 を z_ear2.ear に変更します。

于 2012-07-05T16:31:41.077 に答える