Oracle® Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド 11gリリース1 (11.1.1.7) B55916-10 |
|
前 |
次 |
この章では、コンポジット、コンポーネント、サービス、参照などの操作と属性を公開し、実行時に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(); }