| Oracle® Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド 11gリリース1 (11.1.1.9) B55916-11 |
|
![]() 前 |
![]() 次 |
この章では、コンポジット、コンポーネント、サービス、参照などの操作と属性を公開し、実行時にSOAコンポジット・アプリケーションをプログラムで管理するFacade APIについて説明します。Facade APIは、Oracle SOA SuiteのInfrastructure Management Java APIの一部です。
この章では、次の項目について説明します。
インフラストラクチャJava APIの詳細は、Oracle Fusion Middleware Oracle SOA Suiteインフラストラクチャ管理Java APIリファレンスを参照してください。
実行時にFacade APIを使用してSOAコンポジット・アプリケーションをプログラムで管理できます。Facade APIは、Oracle SOA SuiteのInfrastructure Management Java APIの一部です。Facade APIは、コンポジット、コンポーネント、サービス、参照などの操作と属性を公開します。Facade APIでは、Oracle Enterprise Manager Fusion Middleware Controlでのコンポジットの管理の代替方法が提供されます。
oracle.soa.management.facade.Locatorインタフェースは、ほとんどのFacade APIに対する最上位レベルのエントリ・ポイントとしてメソッド・インタフェースを公開します。oracle.soa.management.facade.Locatorインタフェースは、コンポジットにDirectConnectionを返すcreateConnectionメソッドを公開します。LocatorFactory実装を使用してDirectConnectionを取得できます。LocatorFactoryおよびDirectConnectionの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』の直接バインディング起動APIの概要に関する項を参照してください。DirectConnectionクラスおよびDirectConnectionFactoryクラス(直接バインディング接続の作成用)は、oracle.soa.api.invocationパッケージに入っています。
パーティション管理APIは、Locatorによって公開されません。かわりに、パーティション管理APIに対する最上位レベルのエントリ・ポイントはServerManagerです。例11-1に示すServerManagerFactory実装を使用して、SOAサーバーを管理するServerManagerオブジェクトを作成します。
例11-1 ServerManagerFactory
ServerManagerFactory smf = ServerManagerFactory.getInstance(); Hashtable jndiProps = new Hashtable(); jndiProps.put(Context.PROVIDER_URL, "server_JNDI_provider_url"); jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "server_initial_context_factory_ classname"); jndiProps.put(Context.SECURITY_PRINCIPAL, "jndi_user"); jndiProps.put(Context.SECURITY_CREDENTIALS, "jndi_password"); ServerManager sm = smf.createInstance(jndiProps);
Facade APIの詳細は、Oracle Fusion MiddlewareのOracle SOA Suite Infrastructure Management Java APIリファレンスを参照してください。
11gリリース1 (11.1.1.7)以降では、locatorオブジェクトの作成時に、サブジェクトの資格証明を設定するか、または起動コンテキストで確立された有効なサブジェクトを保持している必要があります。例11-2は、locatorオブジェクトを作成する方法を示しています。
例11-2 Locatorオブジェクトの作成のためのセキュリティ資格情報
Hashtable<String, String> jndiProps = new Hashtable<String, String>(); jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,initialContextFactory); jndiProps.put(Context.PROVIDER_URL, providerURL); jndiProps.put(Context.SECURITY_PRINCIPAL, principal); jndiProps.put(Context.SECURITY_CREDENTIALS, creds); Locator locator = LocatorFactory.createLocator(jndiProps);
jndiProps.putでユーザーの資格情報を指定しない場合、locatorオブジェクトは作成されますが、このオブジェクトを使用してlocator内のメソッドを起動したときに、コール元にメソッドのコールに必要な権限がないことが原因で実行時例外が表示されます。
Exception in thread "Main Thread" java.lang.RuntimeException
表11-1は、Facade APIインタフェースの概要を示しています。
表11-1 Facade APIインタフェース
この項では、Facade APIを使用してコンポジット管理を実行する例をいくつか示します。
Facade APIを使用してコンポジットの状態を取得できます。
モード: アクティブ | リタイア
この設定では、新規インスタンスを作成できるか(アクティブ)、または新しいインスタンスを作成せずに古いインスタンスを完了できるか(リタイア)を決定します。
状態: オン | オフ
この設定はコンポジット状態であり、コンポジット・リビジョンへのコール・アクセス(起動/コールバック)を許可する(on)、またはコール・アクセスを許可しない(off)のいずれかにアクティブまたはリタイアのコンポジット・モードをオーバーライドします。
oracle.soa.management.facade.Locator#getComposite(compositeDN)を使用して、目的のコンポジットへの参照を取得します。
コンポジット参照から、次のメソッドを使用してモードおよび状態を問い合せることができます。
String getMode()
String getState()
Facade APIでコンポジット・インスタンスおよびコンポーネント・インスタンスを検索できます。
Locatorインタフェースを使用してComposite (locator.lookupComposite(compositeDN))を検索します。コンポジットがまだ起動されていない場合、インスタンスはありません。
次に、インスタンスを検索し、関連情報(インスタンスID、実行されたコンポーネントなど)を取得できます。
例11-3に詳細を示します。
例11-3 コンポジット・インスタンスおよびコンポーネント・インスタンスの検索
Composite composite = locator.lookupComposite("default/OrderBookingComposite!1.0");
// The context is already the composite, so there is no need to set the DN as a filter criterion
CompositeInstanceFilter filter = new CompositeInstanceFilter();
filter.setMinCreationDate(new java.util.Date((System.currentTimeMillis() - 20000)));
// Get composite instances by filter
List compositeInstances = composite.getInstances(filter);
// for each of the returned composite instances..
for (CompositeInstance instance : compositeInstances) {
long instanceId = instance.getId();
Date created = instance.getCreationDate();
String state = instance.getState();
// Configure a component instance filter
ComponentInstanceFilter cInstanceFilter =
new ComponentInstanceFilter ();
// Get the child component instances
List componentInstances =
instance.getChildComponentInstances(cInstanceFilter);
for (ComponentInstance compInstance : componentInstances) {
String compName = compInstance.getComponentName();
long compInstanceId = compInstance.getId();
String type = compInstance.getServiceEngine().getEngineType();
// State values correspond to constants defined by the ComponentInstance interface
int state = compInstance.getState();
}
// Retrieve composite sensors
List sensorData = instance.getSensorData();
}