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

オプション A CMP インスタンスの効率的な除去

この項目では、オプション A プールからコンテナー管理パーシスタンス (CMP) を除去する最も効率的な方法について説明します。 まず最初に、コンテナー管理パーシスタンス (CMP) Bean にメソッドを追加します。

public void invalidateFromCache()
{
}

このメソッドを CMP ローカル・インターフェースに追加します。このメソッドの記述子を変更して、 TX_REQUIRED が使用されるようにします。
そのためには、アセンブリー・タブをクリックし、次にコンテナー・トランザクション・パネルの 「追加」ボタンをクリックして、EJB 記述子エディターを使用します。 CMP を選択し、invalidateFromCache メソッドをクリックします。 コンボ・ボックスから「必要」を選択して、「OK」をクリックします。たとえば、「error! Reference source not found.」などと表示されます。 次に、以下のようなホーム・メソッドを 追加します。
	public void ejbHomeInvalidateCompleteOrders(Collection/*<orderlocal>*/ orders)
	{
		Iterator iter = orders.iterator();
		while(iter.hasNext())
		{
			OrderLocal order = (OrderLocal)iter.next();
				// this just adds the option A bean to this transaction so that when 
       we rollback below
				// it gets discarded, i.e. removed from the cache.
			order.invalidateFromCache();
		}
		myEntityCtx.setRollbackOnly();
	}
このメソッドを右クリックして Bean のローカル・ホームに追加し、エンタープライズ Bean を選択してローカル・ホームにプロモートします。前と同じアプローチを使用して、このメソッド・トランザクション属性を RequiresNew に設定します。このメソッドは OrderLocal (この CMP を Order と呼びます) のリストを受け取り、 オプション A のキャッシュからそれらを除去します。キーのリストを受け取ることもできますが、その場合は findByPrimaryKey を実行してからこのメソッドを呼び出す必要があります。これは、ここで取るアプローチよりも手間がかかります。このメソッドは基本的にはリストを反復し、リスト内の各オーダーに対して無効化メソッドを呼び出します。無効化メソッドは、オプション A Bean を現行トランザクションに関連付けます。各 Bean はトランザクションに関連付けられた後に、ロールバックのみ、としてマークされます。このメソッドが戻ると、トランザクションがロールバックされ、関連付けられているすべてのオプション A Bean はキャッシュから破棄されます。 ビジネス・ロジックが新規のオーダーを受け入れます。新規オーダーの受け入れの一部として、他のいくつかのオーダーが完了している可能性があります。 acceptOrder メソッドは、リスト <OrderLocal> を呼び出し元に戻します。 呼び出し元はこのリストを上記のホーム・メソッドに渡して、キャッシュからオーダーを除去する必要があります。このリストはデータベースからは削除されず、キャッシュからのみ削除されます。以下に例を示します。
			BookLocal book = ivBookHome.findByPrimaryKey(ivOrder.getSymbol());
			Collection/*<OrderKey>*/ completedOrders =
							book.acceptOrder(session, pub, ivOrder, cache);
			// invalidate all completed orders from the CMP option A cache.
			try 			{
				if(!completedOrders.isEmpty())
					ivOrderHome.invalidateCompleteOrders(completedOrders);
			}
			catch(Exception e)
			{
				// ignore expected exception
			}
これは Book CMP を検索して、そのオーダー受け入れメソッドを呼び出す方法を示しています。このメソッドは、呼び出しの結果として、キャッシュから除去する必要のあるオーダーを戻します。acceptOrder メソッドは RequiresNew トランザクションを使用します。これにより、このメソッドが戻ると、そのトランザクションが自動的にコミットされます。次にオーダーのホーム・メソッドを使用して、戻された CMP をキャッシュから除去します。 acceptOrder メソッドは、次に示すように、除去する必要のあるすべてのオーダー・インスタンスを収集します。
public Collection/*<OrderLocal>*/ acceptOrder(…)
				Collection completeOrders = new LinkedList();
			 	OrderLocal buyer = ...;
				OrderLocal seller = ...;
			... some business logic....
					if(buyer.getIsComplete())
						completeOrders.add(buyer);
					if(seller.getIsComplete())
						completeOrders.add(seller);
				…
				return completedOrders;
}

このコードは、キャッシュされたオブジェクトのうち処理が完了しているものを除去するアプリケーションの例を示しています。アプリケーションが除去を実行しないと、キャッシュには、役立つインスタンスと役に立たないインスタンスの両方が混在することになります。役立つインスタンスとは、まだアプリケーションで必要なレコード、あるいは保留中または未完了のレコードのことです。 完了済みレコードをキャッシュしておく必要はありません。アプリケーションは、このアプローチを使用して完了済みオブジェクトを除去することができます。




Related concepts
区画固有の CMP データ

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/rwpfremoveoptionacmp.html

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