変数インジェクタは、属性値のかわりに変数キーを置換し、変数値を含む個別のプロパティ・ファイルを作成することで、モデルをトークン化するために使用されます。 これにより、同じドメイン・モデルを使用して、異なる環境で新しいドメインを簡単に作成できます。 WebLogic Deploy Toolingには、そのまままたは変更で使用できる組込みインジェクタ・ディレクティブ・ファイルがいくつか含まれており、カスタム・インジェクタ・ファイルを作成できます。
変数インジェクタは、Discover Domain Tool、Prepare Model ToolおよびスタンドアロンVariable Injector Toolによって、生成するモデルをトークン化するために使用されます。
属性に対する変数のインジェクションは1回のみ実行されます。 トークン化された後は、後続のインジェクタ・ディレクティブによって属性が再トークン化されません。
デフォルトのインジェクタ構成は、スタンドアロンのVariable Injector Tool、および-target
オプションなしでDiscover Domain Toolが実行されるときに使用されます。 これらのツールの変数インジェクションを有効にするには、model_variable_injector.json
という名前のJSONファイルを<WLSDEPLOY>/lib
ディレクトリに配置して、変数インジェクタ構成を作成します。
もう1つのオプションは、「カスタム構成」ディレクトリで変数インジェクションを構成することです。 $WDT_CUSTOM_CONFIG
ディレクトリにmodel_variable_injector.json
ファイルを作成します。
変数インジェクタ構成ファイルには、モデルに適用するインジェクタ・ファイルの名前にマップするインジェクタ名のリストが含まれます。
topology
およびcustom
インジェクタをモデルに適用するmodel_variable_injector.json
ファイルの例を次に示します。
{
"injectors": [
"topology",
"custom"
]
}
リスト内の各インジェクタ名は、「インジェクタ・ディレクティブ・ファイル」を参照し、指定された順序でモデル内の属性に適用されます。
model_variable_injector.json
ファイルのサンプルは、WLSDEPLOY/samples
ディレクトリに含まれています。
ターゲット・インジェクタ構成は、Prepare Model Tool、およびDiscover Domain Toolが-target
オプションで実行されている場合に使用されます。 この場合、適用するインジェクタ名のリストは、$WLSDEPLOY_HOME/lib/targets/<target-name>/target.json
構成ファイルのvariable_injectors
フィールドに指定されます。 たとえば、$WLSDEPLOY_HOME/lib/targets/wko/target.json
ファイルには、次の値が含まれます:
{
...
"variable_injectors" : ["port", "host", "url"],
...
}
リスト内の各インジェクタ名は、「インジェクタ・ディレクティブ・ファイル」を参照し、指定された順序でモデル内の属性に適用されます。
ターゲット構成の作成および拡張の詳細は、「ターゲット環境」を参照してください。
インジェクタ・ディレクティブ・ファイルには、修飾された属性パスのリストおよび関連するディレクティブが含まれます。 モデル内で一致する属性が見つかった場合、関連付けられたディレクティブがその属性に適用され、一意の変数名を持つプロパティ・トークンがモデルにインジェクトされ、属性値が置換されます。 変数名とモデル属性値は、外部変数プロパティ・ファイルに配置されます。
インジェクタ・ディレクティブ・ファイルは、$WLSDEPLOY_HOME/lib/injectors
ディレクトリに配置されます。 ユーザー定義ファイルは、その場所または「カスタム構成」ディレクトリに配置できます。 カスタム構成ディレクトリを使用するには、これらのファイルを$WDT_CUSTOM_CONFIG/lib/injectors
に配置します。
WebLogic Deploy Toolには、次の事前構成済インジェクタ・ディレクティブ・ファイルが含まれます:
host.json
- モデル内のすべてのMBeanホスト属性値が変数でインジェクトされます。port.json
- モデル内のすべてのMBeanポート属性値が変数でインジェクトされます。target.json
- モデル内のすべてのMBeanターゲット属性値が変数でインジェクトされます。topology.json
- モデルのトポロジ・セクションにある一般的な環境MBean属性は、変数でインジェクトされます。 これには、サーバー、マシンおよびノード・マネージャ・ポート、リスニング・アドレス、クラスタ・メッセージング・モード、アドレスおよびポートが含まれます。 url.json
- モデル内のすべてのMBean URL属性値は、変数でインジェクトされます。port
インジェクタ・ディレクティブ・ファイルの適用後にインジェクトされた変数を示すモデル・スニペットを次に示します。
topology:
Name: soa_domain
AdminServerName: AdminServer
Cluster:
soa_cluster:
osb_cluster:
Server:
AdminServer:
ListenAddress: myadmin.example.com
ListenPort: @@PROP:Server.AdminServer.ListenPort@@
Machine: machine1
SSL:
Enabled: true
ListenPort: @@PROP:Server.SSL.AdminServer.ListenPort@@
soa_server1:
ListenAddress: managed1.example.com
ListenPort: @@PROP:Server.soa_server1.ListenPort@@
Cluster: soa_cluster
Machine: machine2
SSL:
Enabled: true
ListenPort: @@PROP:Server.SSL.soa_server1.ListenPort@@
soa_server2:
ListenAddress: managed2.example.com
ListenPort: @@PROP:Server.soa_server2.ListenPort@@
Cluster: soa_cluster
Machine: machine3
SSL:
Enabled: true
ListenPort: @@PROP:Server.SSL.soa_server2.ListenPort@@
結果の変数プロパティ・ファイル:
Server.AdminServer.ListenPort=7001
Server.AdminServer.SSL.ListenPort=7002
Server.soa_server1.ListenPort=8001
Server.soa_server1.SSL.ListenPort=8002
Server.soa_server2.ListenPort=8001
Server.soa_server2.SSL.ListenPort=8002
カスタム・インジェクタ・ディレクティブを使用するには、わかりやすい名前のインジェクタ・ディレクティブ・ファイルを作成し、それを$WLSDEPLOY_HOME/lib/injectors
ディレクトリに配置するか、カスタム構成ディレクトリを使用している場合は$WDT_CUSTOM_CONFIG/lib/injectors
に配置します。 ファイル・プレフィクスをmodel_variable_injector.json
ファイルのリストに追加するか、ターゲット構成が使用されている場合はtarget.json
ファイルに追加します。 たとえば、ファイルcustom.json
を作成し、リストにcustom
エントリを追加します。
インジェクタ・ディレクティブには、トークン化する属性を識別するキーと、ディレクティブ・プロパティのオプション・セットが含まれます。 キーは、モデルで定義されている期間区切りのMBean階層および属性名です。 モデル・セクションの名前は必ずインジェクタ・キーから除外します。
たとえば、サーバーSSLリスニング・ポートのインジェクタ・ディレクティブは、次のとおりです。 このディレクティブには追加のプロパティが含まれていません。
{
"Server.SSL.ListenPort": {}
}
ノート: ListenPort
属性のモデル内のMBeansの階層。 AdminServer
のMBean名はディレクティブに含まれていないことに注意してください:
topology:
Server:
AdminServer:
ListenAddress: myadmin.example.com
ListenPort: 7001
Machine: machine1
SSL:
Enabled: true
ListenPort: 7002
カスタム・インジェクタ・ディレクティブ・ファイルのサンプルは、$WLSDEPLOY_HOME/samples/injectors
ディレクトリに含まれています。
次のプロパティを含めて、指定されたとおりにディレクティブを絞り込みます。
force:<attribute>
MBean階層がモデルに存在し、属性がモデルに存在しない場合、属性は追加され、結果のモデルに永続化されます。 モデルに格納される値は、WebLogicデフォルト値です。
variable_value
: モデル値を変数プロパティの指定値に置き換えます。 これは、デフォルト値を指定された値に置き換えて、forceディレクティブとともに使用できます。
regexp
: モデルの属性の文字列値またはマップ値のいずれかに適用されるregexp
パターンのリスト。 パターンが一致すると、文字列またはディクショナリの一致部分がプロパティ・トークンおよび一意の変数名でインジェクトされます。
pattern
: 属性の文字列値またはマップ値に適用する正規表現パターン。
suffix
: 一意の変数名を作成するために結果の各変数名に追加するサフィクス名。
regexp
リストは、文字列値またはマップのセグメントのみをトークン化する必要がある場合(変数プロパティ・ファイルにプロパティ値のクリーン・リストを提供する場合)に役立ちます。 複数のトークンを文字列にインジェクトしたり、複数のパターンでマップしたりできます。 ただし、複数のパターンがある場合は、それぞれにサフィクスを指定する必要があります。 これにより、ツールは文字列またはマップの各トークンに対して一意の変数名を生成できます。
次の例は、regexp
ディレクティブ・リストを使用して文字列値のセグメントを検索する方法を示しています。 この例では、特別なOracle URL表記を使用する各Oracle JDBC URLでホストおよびポートを検索し、変数プロパティ・ファイルでホストおよびポートのエントリを作成します。
モデルでは、次のようなURLを見つけます:
JDBCSystemResource:
Database1:
JdbcResource:
JDBCDriverParams:
URL: 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=slc05til.us.oracle.com)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl.us.oracle.com)))'
カスタム・インジェクタJSONファイルにディレクティブを作成します:
"JDBCSystemResource.JdbcResource.JDBCDriverParams.URL":
{
"regexp": [
{
"pattern": "(?<=PORT=)[\\w.-]+(?=\\))",
"suffix": "Port"
},
{
"pattern": "(?<=HOST=)[\\w.-]+(?=\\))",
"suffix": "Host"
}
]
},
ツールを実行すると、パターンがURL文字列に適用され、トークンが文字列にインジェクトされます:
URL: 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=@@PROP:JDBCSystemResource.Database1.JdbcResource.JDBCDriverParams.URL--Host@@:)(PORT=@@PROP:JDBCSystemResource.Database1.JdbcResource.JDBCDriverParams.URL--Port@@)))(CONNECT_DATA=(SERVICE_NAME=orcl.us.oracle.com)))'
変数はプロパティ・ファイルに格納されます:
JDBCSystemResource.Database1.JdbcResource.JDBCDriverParams.URL--Host=slc05til.us.oracle.com
JDBCSystemResource.Database1.JdbcResource.JDBCDriverParams.URL--Port=1521
この最終カスタム・ディレクティブでは、プロパティをインジェクトするモデル内のMBeanの名前付きエントリを明示的に定義できます。 たとえば、特定のサーバーに対してのみ属性をトークン化できます。 インジェクタ・ディレクティブ階層で特定のMBeanの1つ以上の名前のリストを定義するには、次のようにリストを書式設定します:
MBean[comma separated list of names]
サーバー・ディレクティブにAdminServer
という管理サーバーのみを選択するには、Server[AdminServer]
という形式を使用します。 サーバーsoa_server1
およびsoa_server2
を選択するには、キーをServer[soa_server1,soa_server2]
として書式設定します。
インジェクタ・ツールは、ユーザー・リストMANAGED_SERVERS
(モデル内のすべての管理対象サーバー)とADMIN_SERVER
(モデル内の管理サーバー)の2つのKEYWORDSを認識します。
管理サーバーSSLリスニング・ポートのカスタム・インジェクタは次のとおりです:
{
"Server[ADMIN_SERVER].SSL.ListenPort": {}
}