高度なカスタマイズ > サービスおよびインフラストラクチャのカスタマイズ > システム設定コレクターのプラグイン > システム設定コレクターのプラグインの作成 > カスタマイズポイント
  
カスタマイズポイント
PluginMBean インタフェースの拡張
必ずしもプラグインが PluginMBean インタフェースを直接実装する必要はありません。代わりに、PluginMBean インタフェースを拡張する新しいインタフェースを定義し、具象プラグイン実装によって実装することができます。ただし、新しいプラグインのインタフェースは PluginMBean インタフェースを継承する必要があります。
例:
publicinterface XYZPluginMBean extends PluginMBean {}
ここでは、XYZPluginMBean が PluginMBean を拡張します。このインタフェースでは、さらに、MBean オペレーションを介して公開される必須メソッドまたは属性を定義できます。
具象実装は次のようになります。
publicclassXYZPluginextends AbstractPlugin implements XYZPluginMBean {}
プラグインの抽象化
「PluginMBean インタフェースの拡張」セクションの内容と似ていますが、開発者は、プラグインの MBean 値をデフォルト値に初期化するために、「ソリューションエレメント」で説明したさまざまな抽象クラス、または開発者が定義する抽象クラスに依存できます。前述のとおり、抽象クラスは、プラグインを作成する際の複雑さのほとんどをラップします。開発者は、プラグインの実装のために抽象クラスに依存するだけではなく、collect(…) メソッドの抽象実装にも依存することができます。
AbstractPlugin.java API: public AbstractPlugin(final Class mbeanInterface) throws NotCompliantMBeanException
パラメータ
デフォルト値
有効な値
必須
説明
mbeanInterface
なし
クラス
はい
プラグインの具体化であるクラス名。
AbstractPlugin.java API: public AbstractPlugin(final Class mbeanInterface, final String displayName, final String mBeanName,
final String description, final String pluginVersion) throws NotCompliantMBeanException {
パラメータ
デフォルト値
有効な値
必須
説明
mbeanInterface
なし
クラス
はい
プラグインの具体化であるクラス名。
displayName
なし
文字列
はい
プラグインの名前の文字列表現。
mBeanName
なし
文字列
はい
プラグインの MBean の名前の文字列表現。この値は、適切な Java MBean ObjectNames に従っている必要があります。MBean オブジェクト名については、「関連 Web サイト」を参照してください。
description
なし
文字列
はい
プラグインの説明の文字列表現。
pluginVersion
なし
文字列
はい
このプラグインに関連付けられているバージョン番号。
AbstractPlugin.java API: publicabstract Map<文字列、オブジェクト> collect(long callNumber, long maxAgeInDays, long minAgeInDays, String pathTimeStamp);
このメソッドは抽象なので、開発者はこのメソッドを実装する必要があります。これは、プラグインの作業を行うためのエントリポイントとして UI レイヤーによって呼び出されます。
パラメータ
デフォルト値
有効な値
必須
説明
callNumber
なし
long
はい
これは、PTC テクニカルサポートの電話番号に関連した long 値です。これは、プラグインデータを収集する場所として使用されます。この値は、collect(…) メソッドを実行することで、修正する必要はありません。
maxAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合のための、開始時間の値である long 値この値は、collect(…) メソッドを実行することで、修正する必要はありません。
minAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合、終了時間の値である long 値。この値は、collect(…) メソッドを実行することで、修正する必要はありません。
pathTimeStamp
なし
文字列
はい
プラグインのデータを収集する先の名前として使用されるディレクトリのタイムスタンプの文字列表現。この値は、collect(…) メソッドを実行することで、修正する必要はありません。
開発者は、通常、このメソッドのパラメータを AbstractPlugin.java の collectData(…) メソッドに渡すことができます。前述のとおり、collectData(…) メソッドは、コレクションフレームワークを呼び出す際の複雑さを処理します。
開発者は、collectData(…) または抽象クラスの親 collectXYZ(…) メソッドの実装に依存しない方法で collect メソッドを実装できます。ただし、一般的に、これは例外です。収集対象のファイルを構築するための処理をいくらか行う Java プロセスの実行などの特殊な作業を必要とする高度なプラグインのみが、親 collect(…) メソッドの実装に依存しなくて済みます。このような場合でも、Java プロセスが完了し、そのデータが生成された後に、実際の収集を行うためにまだ親クラスに依存することがあります。MBeanDumpPlugin.java と WDSPlugin.java は、親 collect メソッドを呼び出す以外の作業を行う PTC 提供の 2 つのプラグインです。非常に複雑なプラグインを構築したい開発者は、これらのプラグインについてさらに詳しく調べてください。
戻り値
有効な値
必須
説明
Map<文字列、オブジェクト>
<文字列、オブジェクト> タイプの Map (Object は <文字列、文字列> タイプのマップ、つまり Map<文字列、文字列>)
はい
リターンタイプは、内側の Map を含んでいる Map です。つまり、Map<String, Map<文字列、文字列>> です。"内側の" Map<文字列、文字列> は、プラグイン実行ステータスを含んでいる Map です。外側の Map<文字列、オブジェクト> は、プラグインが実行されているサーバーを含んでいる Map です。これにより、プラグインフレームワークは、実行されるプラグインごとに、クラスタ全体にわたって情報を報告できます。
collect(…) メソッドのリターンタイプを提供するときには注意が必要です。AbstractPlugin.java の collectData(…) メソッドは、プラグインフレームワークが正しく解釈する有効なリターンタイプを作成する際のすべての複雑さをラップします。これも、collect(…) メソッドの実装で collectData(…) メソッドを使用することが効果的である理由の 1 つです。そうしなければ、collect(…) メソッドを実装する際の複雑さが著しく増大します。
外側の Map: Map<文字列、オブジェクト>
String キーは、サーバープロセス ID とプラグインが実行されるサーバーのホスト名で構成されます (たとえば、5524@DSTUSYNSKI03D)。どのような文字列でも有効ですが、プラグインフレームワークは、適切に構築されていないため意味のないデータをユーザーに報告することになります。
Object は、実際には <文字列、文字列> タイプの内側の Map です。
内側の Map: Map<文字列、文字列>
内側の Map には、success、path、message、および location の 4 つのキーエントリが各 String に 1 つある必要があります。
これらのキーの値は、それぞれ、そのキーの適切な値に対応する別の文字列である必要があります。success キーの値は、true か false のどちらかであり、コレクションフレームワークがプラグインのデータの収集を正常に完了したかどうかを示す値です。path キーの値は、コレクションフレームワークによって生成され、プラグインが実行されている特定のサーバーの、収集されるプラグインのデータが配置されている基準のパスの最後のディレクトリを示します。message キーの値は、文字列メッセージであり、コレクションフレームワークによって生成されるプラグインに付随していることがあります。通常、これはプラグインが失敗した理由を示すステータスメッセージです。メッセージが報告されない場合は、null 値が使用されます。location キーの値は、コレクションフレームワークがプラグインのデータを収集する場所への部分パスを表す文字列です。
AbstractPlugin.java の collectData(…) メソッドまたはその他の親抽象クラスに依存しない場合は、必ず collect(…) メソッドのリターンタイプがこの形式に従うようにしてください。従っていなければ、プラグインフレームワークによって正しく処理されません。直接プラグインを実装し、戻り Map<文字列、オブジェクト> 値を構築する場合は、MBeanDump.java および WDSPlugin.java の実装を調べて詳細を把握してください。これらのクラスはどちらも、抽象クラスまたはコレクションフレームワークに直接依存しないので、それぞれの collect(…) メソッドの実装で正しいリターンタイプを構築します。
戻り Map 値が構築される必要のある高度なプラグインの場合、開発者は PluginUtilites.getReturnMap(…) メソッドに依存できます。これについては、このセクションで後述します。
AbstractPlugin.java API: publicabstract Map<文字列、オブジェクト> collect(String topicIdentifier, long maxAgeInDays, long minAgeInDays, String pathTimeStamp);
このメソッドは抽象なので、開発者はこのメソッドを実装する必要があります。これは、プラグインの作業を行うためのエントリポイントとして UI レイヤーによって呼び出されます。
パラメータ
デフォルト値
有効な値
必須
説明
topicIdentifier
なし
文字列
はい
これは、プラグインのデータの収集先の場所として使用されるディレクトリの文字列表現です。この値は、collect(…) メソッドを実行することで、修正する必要はありません。
maxAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合のための、開始時間の値である long 値この値は、collect(…) メソッドを実行することで、修正する必要はありません。
minAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合、終了時間の値である long 値。この値は、collect(…) メソッドを実行することで、修正する必要はありません。
pathTimeStamp
なし
文字列
はい
プラグインのデータを収集する先の名前として使用されるディレクトリのタイムスタンプの文字列表現。この値は、collect(…) メソッドを実行することで、修正する必要はありません。
このメソッドの使用の詳細については、前に登場した collect(…) メソッドを参照してください。
AbstractPlugin.java API: public Map<文字列、オブジェクト> collectData(String srcPath, finallong callNumber,
finallong maxAgeInDays, finallong minAgeInDays, String pathTimeStamp) {
パラメータ
デフォルト値
有効な値
必須
説明
srcPath
なし
文字列
はい
これは、プラグインのソースデータが収集される場所の文字列表現です。これは一般的に、トークン化した Windchill プロパティの文字列です。たとえば、WindchillLogsPlugin.java は、$(wt.logs.dir) をパラメータとして渡します。また、この値は収集されるデータの基準のファイルパスになります。しかし、このファイルパスはプラグインが実行されているそれぞれのサーバーに存在しない可能性もあるので、注意が必要です。基準のファイルパスを使用している場合、プラグイン属性 isClusterAware をプラグインの初期化中は false に設定して、プラグインを 1 つのクラスタノードでのみ実行する必要があります。
callNumber
なし
long
はい
これは、PTC テクニカルサポートの電話番号に関連した long 値です。これは、プラグインデータを収集する場所として使用されます。
maxAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合、開始時間の値である long 値。
minAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合、終了時間の値である long 値。
pathTimeStamp
なし
文字列
はい
プラグインのデータを収集する先の名前として使用されるディレクトリのタイムスタンプの文字列表現。
これは、プラグインのデータを収集するために直接コレクションフレームワークを使用する際の複雑さをラップするメソッドです。可能なかぎり、これがプラグインの collect(…) メソッドの実装によって呼び出されるようにしてください。多くの場合、collect(…) メソッドの実装は、このメソッドを collect(…) メソッドで呼び出し、その値を返す必要があるだけです。
このメソッドの戻り値は、前述のとおり、collect(…) メソッドの戻り値と同じです。
AbstractPlugin.java API: public Map<文字列、オブジェクト> collectData(String srcPath, final String topicIdentifier,
finallong maxAgeInDays, finallong minAgeInDays, String pathTimeStamp) {
パラメータ
デフォルト値
有効な値
必須
説明
srcPath
なし
文字列
はい
これは、プラグインのソースデータが収集される場所の文字列表現です。これは一般的に、トークン化した Windchill プロパティの文字列です。たとえば、WindchillLogsPlugin.java は、$(wt.logs.dir) をパラメータとして渡します。また、この値は収集されるデータの基準のファイルパスになります。しかし、このファイルパスはプラグインが実行されているそれぞれのサーバーに存在しない可能性もあるので、注意が必要です。基準のファイルパスを使用している場合、プラグイン属性 isClusterAware をプラグインの初期化中は false に設定して、プラグインを 1 つのクラスタノードでのみ実行する必要があります。
topicIdentifier
なし
文字列
はい
これは、プラグインのデータの収集先の場所として使用されるディレクトリの文字列表現です。
maxAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合、開始時間の値である long 値。
minAgeInDays
なし
long
はい
ファイルが時間に関連して収集される場合、終了時間の値である long 値。
pathTimeStamp
なし
文字列
はい
プラグインのデータを収集する先の名前として使用されるディレクトリのタイムスタンプの文字列表現。
このメソッドの使用の詳細については、前に登場した collect(…) メソッドを参照してください。
PluginUtilities.java API: publicstatic Map<文字列、オブジェクト>
getReturnMap(finalboolean success, final String path, final String message,
final String location) {
パラメータ
デフォルト値
有効な値
必須
説明
success
なし
ブール
はい
プラグインフレームワークのステータスとして内側の Map に配置される、プラグインの実行が正常に完了したかどうかを示す値。
path
なし
文字列
はい
プラグインフレームワークのステータスとして内側の Map に配置される、収集されるファイルが配置されている親ディレクトリを示す値。
message
なし
文字列
はい
プラグインフレームワークのステータスの内側の Map に配置されるメッセージ。
location
なし
文字列
はい
プラグインフレームワークのステータスの内側の Map に配置される、PluginType ディレクトリへの部分パス。
このメソッドは、collect(…) メソッドの実装で使用される戻り値を構築します。ただし、そのためには、このメソッドに正しい値がそのパラメータを介して渡される必要があります。このメソッドは、collect(…) メソッドの戻り値の作成を簡単にするユーティリティメソッドです。実質的に、これは戻り値の作成をラップするので、collect(…) メソッドの実装者は外側の Map と内側の Map を作成する必要がありません。それぞれのパラメータの説明のとおり、パラメータが内側の Map を生成するために使用され、メソッドの実装が外側の Map<文字列、オブジェクト> の生成を処理します。結果として返される値は Map<文字列、オブジェクト> で、この Object は collect(…) メソッドの戻り値として使用できる Map<文字列、文字列> (<文字列、文字列> タイプの Map) です。
これらのパラメータは必須のパラメータではありませんが、可能なかぎり使用するようにしてください。メソッドの戻り Map<文字列、オブジェクト> 値だけでは十分ではなく、プラグインフレームワークがプラグインの実行ステータスを報告するために必要とする正しいデータが内側の Map に含まれなくなります。
このメソッドは、開発者が AbstractPlugin.java の collectData(…) の実装またはその他の collectXYZ(…) メソッドの実装に依存しない場合に使用するユーティリティとしてのみ効果的です。