10.2. 展開ライフサイクルロジックからの構造認識の分離
展開上で実際の作業を実行するには、最初に、クラスパスとメタデータの場所を含む構造を理解する必要があります。
メタデータの場所には、
my-jboss-beans.xml
、web.xml
、ejb-jar.xml
などの設定ファイルが含まれます。クラスパスは WEB-INF/classes
や myapp.ear/lib
などのクラスローダーのルートです。
構造を考慮して、実際の展開処理に進むことができます。
一般的な展開ライフサイクル
MainDeployer
は認識のために展開をStructuralDeployer
のセットに渡し、Deployment コンテキストを受け取ります。- 次に、
MainDeployer
は、適切なDeployer
により処理するために結果となる Deployment コンテキストをDeployers
に渡します。
MainDeployer は使用するデプロイヤを決定する責任を持つブローカーです。
仮想展開またはプログラムを使用した展開の場合、事前に決定された既存の StructureMetaData 情報は構造情報を読み取り、StructuredMetaData 情報の処理 で説明されたいずれかの方法で処理します。
StructuredMetaData 情報の処理
- VFS ベースの展開
- 構造認識は StructureDeployers のセットに転送されます。
- JEE-specification-defined 構造
- 一致する StructureDeployer 実装は以下のとおりです。
- EarStructure
- WarStructure
- JarStructure
- DeclarativeStructures
- 展開内部の
META-INF/jboss-structure.xml
ファイルを検索し、解析して適切なStructureMetaData
を構築します。 - FileStructures
-jboss-beans.xml
や-service.xml
などの既知の設定ファイルのみを認識します。例10.1
jboss-structure.xml
の例<structure> <context comparator="org.jboss.test.deployment.test.SomeDeploymentComparatorTop"> <path name=""/> <metaDataPath> <path name="META-INF"/> </metaDataPath> <classpath> <path name="lib" suffixes=".jar"/> </classpath> </context> </structure>
EarStructure の場合、最初に最上位の展開を認識し、次にサブ展開を再帰的に処理します。
汎用的な
StructureDeployer
インターフェースにより提供された汎用的な GroupingStructure
クラスを使用してカスタム StructureDeployer
を実装できます。
認識された展開構造を用意したら、それを実際のデプロイヤに渡すことができます。デプロイヤオブジェクトは、
DeploymentStage
ごとにデプロイヤチェーンを使用して実際のデプロイヤを処理する方法を認識します。
例10.2 展開ステージ
public interface DeploymentStages { /** The not installed stage - nothing is done here */ DeploymentStage NOT_INSTALLED = new DeploymentStage("Not Installed"); /** The pre parse stage - where pre parsing stuff can be prepared; altDD, ignore, ... */ DeploymentStage PRE_PARSE = new DeploymentStage("PreParse", NOT_INSTALLED); /** The parse stage - where metadata is read */ DeploymentStage PARSE = new DeploymentStage("Parse", PRE_PARSE); /** The post parse stage - where metadata can be fixed up */ DeploymentStage POST_PARSE = new DeploymentStage("PostParse", PARSE); /** The pre describe stage - where default dependencies metadata can be created */ DeploymentStage PRE_DESCRIBE = new DeploymentStage("PreDescribe", POST_PARSE); /** The describe stage - where dependencies are established */ DeploymentStage DESCRIBE = new DeploymentStage("Describe", PRE_DESCRIBE); /** The classloader stage - where classloaders are created */ DeploymentStage CLASSLOADER = new DeploymentStage("ClassLoader", DESCRIBE); /** The post classloader stage - e.g. aop */ DeploymentStage POST_CLASSLOADER = new DeploymentStage("PostClassLoader", CLASSLOADER); /** The pre real stage - where before real deployments are done */ DeploymentStage PRE_REAL = new DeploymentStage("PreReal", POST_CLASSLOADER); /** The real stage - where real deployment processing is done */ DeploymentStage REAL = new DeploymentStage("Real", PRE_REAL); /** The installed stage - could be used to provide valve in future? */ DeploymentStage INSTALLED = new DeploymentStage("Installed", REAL); }
既存の展開ステージは Microcontainer の組込みコントローラ状態にマッピングされ、汎用コントローラ状態の展開ライフサイクルを中心としたビューを提供します。
デプロイヤ内部では、展開は Microcontainer のコンポーネント
DeploymentControllerContext
に変換されます。Microcontainer の状態マシンは依存関係を処理します。
展開は展開ステージで順番に処理されます。各デプロイヤに対して、デプロイヤの
parent-first
プロパティを使用して、展開された全体の階層順序が処理されます。このプロパティはデフォルトで true
に設定されます。
また、デプロイヤが処理する階層レベルを指定することもできます。
all
、top level
、components only
、または no components
を選択できます。
ここでは、Microcontainer によるコンポーネントモデルの処理と依存関係処理を行う方法が適用されます。未解決の依存関係がある場合、展開は現在の状態で待機し、現在の状態が必要な状態でない場合にエラーが報告されることがあります。
新しいデプロイヤの追加は、既存の多くのヘルパーデプロイヤのいずれかを拡張することにより実現されます。
一部のデプロイヤは実際に VFS 支援展開が必要であり、他のデプロイヤは一般的な展開を使用できます。ほとんどの場合、解析デプロイヤは VFS の支援が必要です。
警告
また、デプロイヤは各展開、サブ展開、およびコンポーネントで再帰的に実行されることにも注意してください。プロセスのできるだけ早い段階で、デプロイヤが現在の展開を処理する必要があるかどうかをコードで決定する必要があります。
例10.3 展開に関する情報を出力する単純なデプロイヤ
public class StdioDeployer extends AbstractDeployer { public void deploy(DeploymentUnit unit) throws DeploymentException { System.out.println("Deploying unit: " + unit); } @Override public void undeploy(DeploymentUnit unit) { System.out.println("Undeploying unit: " + unit); } }
この記述を JBoss Application Server の
deployers/
ディレクトリの -jboss-beans.xml
ファイルのいずれかに追加します。この結果、MainDeployerImpl
Bean が Microcontainer の IoC コールバック処理によりこのデプロイヤを取得します。
例10.4 単純な展開記述子
<bean name="StdioDeployer" class="org.jboss.acme.StdioDeployer"/>