WebSphere Extended Deployment, Version 6.0.x     Operating Systems: AIX, HP-UX, Linux, Solaris, Windows, z/OS

PartitionManager

PartitionManager

PartitionManager の インスタンスは、JNDI から取得できます。 インスタンスは、ランタイムにより、JNDI にバインドされています。 次のコード・セグメントでは、区画化ステートレス・セッション Bean (PSSB) でインスタンス変数を使用してインスタンスを検索し、検索されたインスタンスを キャッシュに入れています。
public void setSessionContext(javax.ejb.SessionContext ctx) {
	mySessionCtx = ctx;
	try
	{
		// cache various references.
		InitialContext ic = new InitialContext();
		bookHome = (PartitionManager)ic.lookup(PartitionManager.JNDI_NAME);
	}
	catch(Exception e)
	{
		throw new EJBException(e);
	}
}

例の使用法について詳しくは、サンプル・プログラムを参照してください。

PartitionManager#JNDI_NAME

JNDI_NAME 属性を使用すると、JNDI から PartitionManager サービスを取得できます。

PartitionManager#createPartitionDefinition

この メソッドには 3 つのシグニチャーがあり、いずれも、 アプリケーション区画を表す PartitionDefinition インスタンスを作成するときに使用します。 このメソッドは多重定義されているため、目的の動作に応じて適切なメソッドを 選択してください。

1 つ目のメソッド・シグニチャーは、次のとおりです。

PartitionDefinition createPartitionDefinition(String partitionName)

これは、デフォルトの分類とクラスター・スコープで PartitionDefinition を作成します。デフォルトの分類ストリングは、PartitionDefinition#DEFAULT_CLASSIFICATION (_DFLT) の値です。 このバージョンでは、区画ごとに固有の分類を作成したり、ノード・スコープ 区画を指定したり、マップを用意したりして、区画の管理を容易にすることはできません。
2 つ目のメソッド・シグニチャーは、次のとおりです。

PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope)

これは、指定の区画分類 (partitionClass) と特定の区画スコープで PartitionDefinition を作成します。このバージョンでは、ポリシー属性のマップを用意して、区画定義を作成することはできません。追加のポリシー属性のマップを用意すれば、効率的な区画管理オプションを提供できます。
メソッド・シグニチャーは次のとおりです。

PartitionDefinition createPartitionDefinition(String partitionName,
String partitionClass,
PartitionScope scope,
Map attributemap)

これは、指定の区画分類 (partitionClass) と特定の区画スコープで PartitionDefinition を作成します。また、この区画の HA マネージャー・グループ・プロパティーのデフォルトのリストに、属性と値の対を追加できます。追加の属性を使用すると、HA マネージャー・ポリシーをより厳密に制御できます。マップ属性は、ランタイム時には使用中です。 したがって、使用中の属性および実際のデータの数を最小化することが重要です。

map put() API に最初に挿入される値は HA マネージャー・キーであり、2 番目に挿入される値は そのキーの対となる HA マネージャー値です。

オプションのマップ・パラメーターを使用する場合は、 次のようなコードをインプリメントします。
public PartitionDefinition[] getPartitions()
{	
 String names = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 PartitionDefinition[] rc = new PartitionDefinition[names.length()];
	for(int i = 0; i < names.length(); ++i)
	{
  	Map testMap = new HashMap();
		testMap.put(“custom-attrib", "samplevalue");			
		testMap.put("activateOn", Integer.toString(i%3));  // have 3 servers,
balance at start
		rc[i] = ivRuntime.createPartitionDefinition(names.substring(i, i + 1),
								       "MapExamle",
								       PartitionScope.K_NODE,
                        testMap);
			testMap = null;

		}
		logger.trace(RASITraceEvent.TYPE_LEVEL1, this, "getPartitions",
"Returning partitions", rc);
		return rc;
	}

この例では、属性が 2 つあるマップを作成しています。 どの区画でも同じ値 (custom-attrib) になる HA マネージャー・キー属性と、 名前が activateOn で値が 0-2 のストリングになる値です。また、 ポリシー・サポートを使用して、開始値ごとにポリシーを作成し、区画 3 つごとに 優先サーバー・ポリシーが固有になるようにしています。 このアプローチについて詳しくは、ポリシーのセクションを参照してください。

createPartitionDefinition() 属性の制約

createPartitionDefinition() API に提供する属性は、次の規則に 準拠している必要があります。準拠していない場合、 作成処理時に、HA マネージャー障害例外 HAMapException がスローされ、区画が正しく作成されません。 どの規則もマップ属性のキーと値の対だけでなく、 区画名と分類にも適用されます。つまり、区画化機能 (WPF) デフォルト・キーである -pn と -pc の値を それぞれ指定することになります。
  • マップは NULL や空にすることはできません。WPF はこの規則に 準拠していません。 WPF のデフォルトのマップ値には、HA マネージャー・ポリシーのセクションに 記載されている区画名やデフォルト分類などの属性が含まれているからです。 したがって、この規則については気にする必要はありません。
  • マップのキーはすべてストリングである必要があります。
  • マップの値はすべてストリングである必要があります。
  • 下線 (「_」) で始まるキーは認められていません。
  • キーまたは値にコンマ (「,」) を含めることはできません。
  • キーまたは値に等号 (「=」) を含めることはできません。
  • キーまたは値に垂直バー (「|」) を含めることはできません。

PartitionManager#getPartitions

このメソッドを呼び出すと、 指定のクラスター・メンバーで認識されている区画のリストを取得できます。 メソッド・シグニチャーは次のとおりです。

String[] getPartitions()

PartitionManager#getApplicationName

このメソッドを呼び出すと、 デプロイ時に管理者が決めたアプリケーション名を取得できます。 このストリングを区画の名前に使用すれば、その区画をクラスター内で固有のものにする ことができます (ただし、デプロイされたアプリケーション名は WebSphere クラスター内で 固有のものである必要があります)。

メソッド・シグニチャーは次のとおりです。

String getApplicationName()

区画の作成時にこれを使用する場合、 区画化 J2EE アプリケーションにストリングの長さができるかぎり短い名前を付けてデプロイすることをお勧めします。 その名前が HA マネージャー・ランタイム全体で使用されるからです。

このメソッドは、バージョン区画参照でよく使用されます。 同じクラスターに同じ区画化 J2EE アプリケーションを存在させることができます (それぞれ異なる名前でインストールされているにすぎません)。 各区画は、例えば PartitionA ではなく Appv2r2.PartitionA という名前で 呼び出すことができます。 このようにして、クラスター内で Appv2r1.PartitionA と Appv2r2.PartitionAh を同時に活動状態に することができます。各アプリケーションの要求は、それぞれが準拠するバージョン宛に送付されます。 これは、この問題への 1 つのアプローチにすぎません。

PartitionManager#addPartition

このメソッドを呼び出すと、 新しい区画を動的に追加できます。 メソッド・シグニチャーは次のとおりです。

void addPartition(PartitionDefinition name)

あるクラスター・メンバーに区画が追加されると、同じ区画がすべてのクラスター・メンバーにも 自動的に非同期に追加されます。 デフォルトのクラスター・スコープ・ポリシーを使用している場合、要求を 受け取ったクラスター・メンバーで区画が活動状態になるのが一般的です。ただし、 必ずそうなることが保証されているわけではありません。 また、クラスターでの区画の活動化は分散機能です。 このため、この API から制御が戻ってから実際に区画が活動状態になるまでには 多少の遅延時間が発生します。 これは、プログラマーが責任を負うべき問題です。

サンプルの WPFKeyBasedPartition には、この API の使用例があります。

PartitionManager#removePartition

このメソッドを呼び出すと、 区画を動的に削除できます。 その区画がいずれかのクラスター・メンバーで現在活動状態であれば、 非活動状態になります。 そして、オンラインのすべてのクラスター・メンバーから削除されます。

メソッド・シグニチャーは次のとおりです。

void removePartition(String name)

クラスターでの区画の非活動化は分散機能です。このため、この API から制御が戻ってから実際に区画が非活動状態になるまでには多少の遅延時間が発生します。これは、プログラマーが責任を負うべき問題です。

永続エラーではなく一時エラーが疑われる場合、プログラマーは disablePartition() API の 使用を検討してください。この場合、ポリシー・メカニズムを使用すると、 区画を再始動させてはいけないのか、別のクラスター・メンバーで再始動できるのかを 判断できます。

PartitionManager#disablePartition

区画を動的に 使用不可にできます。 このメソッドを呼び出すと、現在のクラスター・メンバー上の区画が使用不可になります。 また、wpfadmin コマンドでも同じことを行うことができます。

メソッド・シグニチャーは次のとおりです。

void removePartition(String name)

このメソッドを呼び出すと、区画は非活動状態になるか、またはその区画をホスト可能な別のクラスター・メンバー上で即時に活動状態になります。区画が非活動状態になるかどうかは、現在のポリシー設定によって決まりますが、デフォルトでは他にクラスター・メンバーが存在すればそのメンバー上で活動状態になります。区画が自動的に活動状態に戻らない場合は、wpfadmin コマンドを使用して、そのメンバーを使用可能にすることができます。ただし、その区画を再度使用可能にする前に、管理者はログに目を通し、何らかの処置が必要かどうかを確認してください。

アプリケーションは、このメソッドを呼び出し、 その呼び出し前にできる限りクリーンな状態にしておくことができるため、partitionUnloadEvent(...) は呼び出されません。

PartitionManager#reportPartitionFault

このメソッドを呼び出すと、 アクティブ区画に関する問題を示すことができます。 これにより、HA マネージャーは重大度パラメーターの値に従って対処できます。このメソッドは、 将来の利用のために予約されており、現時点ではインプリメントされていません。 disablePartition() を参照して、修正処置を実行してください。

PartitionManager#reportTransactionComplete

このメソッドを呼び出すと、 トランザクションがどの区画でどのくらいの応答時間で完了したかが報告されます。 このメソッドは通常、同期 IIOP 要求ではなく、非同期メソッドで作業要求を 受け取るようにしているときに使用します。

メソッド・シグニチャーは次のとおりです。

void reportTransactionComplete(String partitionName, long responseTime_ms)

この API 結果は保管されて、WPF パフォーマンス・モニター機能に転送されます。 WPF パフォーマンス・モニター機能により、個々の結果がクラスター全体で追跡されます。このサービスについては、この文書で何度か説明しています。入門のセクションには、具体的な例もいくつか記載されています。

サンプルの WPFKeyBasedPartitionSample には、この API の使用例があります。

PartitionManager#setHttpPartitionManager

アプリケーションで HTTP 区画化を使用することを WPF に通知します。詳しくは、この文書の HTTP 区画化のセクションを参照してください。メソッド・シグニチャーは次のとおりです。

void setHttpPartitionManager(HttpPartitionManagerInterface manager)

PartitionManager# reportTransactionComplete

WPF PMI には、responseTime という統計が含まれています。これは、 特定の区画のために実行されたトランザクションの応答時間とその数を測定するためのものです。 応答時間は、ユーザー・アプリケーションによって収集されます。 ユーザー・アプリケーションにより、com.ibm.websphere.wpf.PartitionManager インターフェースの reportTransactionComplete メソッドが呼び出されて、PMI 統計が更新されます。

この PartitionManager インターフェースのメソッド・シグニチャーは、次のとおりです。
	/**
	 * This should be called to inform the runtime when a transaction/operation
	 * completes on this partition. This is used for records how many
	 * transactions per seconds are being executed per partition.
	 * @param partitionName the name of the partition.
	 * @param responseTime_ms the response time for the transaction.
	 * @throws IllegalStateException If the calling application has no partition
handler bean
	 */	
   void reportTransactionComplete(String partitionName, long responseTime_ms)

PartitionManager.reportTransactionComplete は、区画化ステートレス・セッション Bean (PSSB) で呼び出すことができます。ベスト・プラクティスは、まずトランザクション時間を計算してから、この API を使用して トランザクション時間を報告することです。 次に例を示します。メソッド buy は、WPFKeyBasedPartitionSample アプリケーションの WPFKeyBasedPartition Bean のトランザクションをシミュレートするメソッドです。

/**
	 * A buy method. This method does nothing now except report the transaction
	 * completion. The transaction takes a random value ranging from
   0 ms to 1000ms.
	 * 
	 * @param partitionName
	 * @return the partition name
	 */
	public String buy(String partitionName) {
    String serverName = AdminServiceFactory.getAdminService().getNodeName()
+"/"+AdminServiceFactory.getAdminService().getProcessName();
    
		ivManager.reportTransactionComplete(partitionName, (long)
(1000 * Math.random()));

		logger.trace(
			RASITraceEvent.TYPE_LEVEL1,
			this,
			"buy",
			"The method called at " + serverName + "." + partitionName);

		return "partiton=" + partitionName + ",server=" + serverName;
	}

あるアプリケーション・サーバーの特定の区画に対して 初めて PartitionManager.reportTransactionComplete を呼び出すと、アプリケーション名とセッション EJB 名でグループ化された PMI モジュールが その区画用に作成されます。 例えば、アプリケーション名が app1 で、セッション EJB 名が session1 の場合、PMI モジュールは app1#session1 でグループ化されます。詳しくは、PMI パスのセクションで説明しています。

responseTime 統計の目的は、平均応答時間、最小応答時間、最大応答時間、 応答時間の二乗の合計といった統計事実を計算することです。 これらの統計データにアクセスするには、wpfadmin コマンド、wsadmin コマンド、または MBean を使用して PMI データを照会します。




Related concepts
区画化機能フレームワーク・プログラミング・モデル

Reference topic    

Terms of Use | Feedback Last updated: Mar 20, 2006 12:35:11 PM EST
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/index.jsp?topic=?topic=/com.ibm.websphere.xd.doc/info/WPF51/rwpfPartitionManager.html

© Copyright IBM 2005, 2006. All Rights Reserved.
This information center is powered by Eclipse technology. (http://www.eclipse.org)