管理およびコンフィグレーション ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

MBean を使用したアプリケーション、サーバ、およびドメインの管理

この節では、以下の項目について説明します。

 


管理の概要

Oracle CEP アプリケーションでは、プロセッサ、ストリーム、アダプタなどのコンポーネントで構成されたイベント処理ネットワーク (EPN) を定義します。EPN を定義したアプリケーションを、ドメイン内の起動済み Oracle CEP インスタンスにデプロイします。

注意 : コンポーネントは「ステージ」と呼ばれることもあります (特に管理 Javadoc の場合)。ただし、他の Oracle CEP ドキュメントとの整合性を保つために、この節では「コンポーネント」という用語を使用します。

管理対象 Bean (MBean) を使用して EPN の各コンポーネントを動的にコンフィグレーションできます。一般的なコンフィグレーション タスクとして、EPL ルールの追加と削除、ストリーム最大サイズの変更、通知へのサブスクライブ、さまざまな操作の実行といったタスクがあります。MBean は、標準の Java Management Extension (JMX) API を使用して操作することも、wlevs.Admin (Oracle CEP 管理コマンドライン ユーティリティ) または Visualizer (グラフィカルな管理ツール) を使用して操作することもできます。この節では、JMX を使用すると想定します。wlevs.Admin または Visualizer については、以下の節を参照してください。

MBean を使用して、サーバ、ドメイン、およびデプロイ済みアプリケーションの一部のコンフィグレーションとアプリケーション ライフ サイクル管理を実行することもできますが、この節では主に個々のアプリケーション コンポーネントのコンフィグレーションについて説明します。ただし、サーバ、ドメイン、およびアプリケーションのコンフィグレーションも MBean を使用して行うので、この節に示す情報の大部分があてはまります。

デプロイ済みアプリケーション (アダプタ、ストリーム、またはプロセッサ) の各コンポーネントには、基になるコンポーネントのコンフィグレーションを管理する「コンフィグレーション MBean」が指定されています。コンポーネント タイプごとに、管理可能な独自のアーティファクトがあります。たとえば、ストリームの最大スレッド数やプロセッサに関連付けられた EPL ルールを動的にコンフィグレーションできます。

「ランタイム MBean」を使用して、EPN の各コンポーネントについてのモニタ情報を収集することもできます。モニタ情報にはスループット (コンポーネントを通過するイベント数) とレイテンシ (イベントがコンポーネントを通過するのにかかった時間) が含まれます。

 


Oracle CEP MBean の概要

Oracle CEP では以下のタイプの MBean が公開されています。

Oracle CEP MBean の詳細と管理の概要については、以下の Javadoc を参照してください。

コンフィグレーション MBean

Oracle CEP アプリケーションをデプロイすると、管理容易性が有効になっている EPN の各コンポーネント (言い換えると、EPN アセンブリ ファイルに登録されている各コンポーネント) について、コンフィグレーション MBean がサーバによって自動的に作成されます。アダプタのコンフィグレーションを拡張した場合、アダプタ用のカスタム コンフィグレーション MBean がデプロイされます。

JMX を使用すると、コンポーネントのコンフィグレーション MBean を使用してコンポーネントを動的にコンフィグレーションできます。たとえば、StreamMBean.setMaxSize() メソッドを使用してストリーム コンポーネントのサイズを設定できます。

ランタイム MBean

「ランタイム MBean」を使用して、EPN の各コンポーネントについてのモニタ情報を収集することもできます。WebLogic Event Server では、各コンポーネントについてモニタできる以下のメトリックが定義されています。

 


MBean の階層

次の図は、Oracle CEP MBean ツリーを表しています。

すべての MBean は、タイプ javax.management.ObjectName のオブジェクト名で MBean サーバに登録されている必要があります。Oracle CEP は、子 MBean のオブジェクト名が親 MBean オブジェクト名の一部を含むという規則に準拠します。

DomainMBean および DomainRuntimeMBean という主要な 2 つの MBean ルートがあります。前者にはドメイン全体のコンフィグレーション MBean が含まれ、後者には、通常は単一のサーバ インスタンスをスコープとするランタイム情報 (統計など) とローカル サービス (モニタなど) が含まれます。

ApplicationMBeanDomainMBean の子であり、ServerMBean の子ではありません。アプリケーションはドメイン内でユニークであり、複数のサーバにまたがって実行できるためです。

次の図は、オブジェクト モデルを構成する主なクラスと関係を示しています。

ほとんどの MBean は通知を送信するエミッタであり、AttributeChangeNotifications を生成します。つまり、JMX クライアントは、アプリケーション状態の変更、ドメインでのアプリケーションの挿入と削除、ストリーム サイズとスレッドの変更、ルールの挿入と削除などに関する属性変更通知を受け取るように登録できます。

 


MBean の命名

この節は、コンフィグレーション MBean の命名とランタイム MBean の命名に分かれています。

コンフィグレーション MBean の命名

Oracle CEP コンフィグレーション MBean は階層構造に編成されています。各 MBean のオブジェクト名は階層内でのその MBean の位置を表しています。一般的なオブジェクト命名パターンは次のとおりです。

    com.bea.wlevs:Name=name,Type=type,[TypeOfParentMBean=NameOfParentMBean]

各値の説明は次のとおりです。

キー プロパティの順序は重要ではありませんが、オブジェクト名は com.bea:wlevs: で開始する必要があります。

たとえば、ドメイン内のアプリケーション myapplicationmyprocessor と呼ばれるプロセッサがある場合、そのプロセッサに対応する MBean のオブジェクト名は次のようになります。

    com.bea.wlevs:Name=myprocessor,Type=EPLProcessor,Application=myapplication

次の表では、Oracle WebLogic Server で MBean オブジェクト名にエンコードされるキー プロパティについて説明します。

表 6-1 Oracle CEP MBean オブジェクト名のキー プロパティ
キー プロパティ
指定内容
Name=name
MBean によって表されるリソースを作成したときに指定した文字列。通常はコンポーネントの名前です。
EPN アセンブリ ファイル内に特定のコンポーネントの名前を指定するには、コンポーネント登録の id 属性を使用します。
たとえばプロセッサの場合、EPN アセンブリ ファイル内のエントリは次のようになります。

<wlevs:processor id="myprocessor" manageable="true" />

この場合、キー プロパティは Name=myprocessor になります。
Type=type
MBean のタイプの短縮名。短縮名は MBean サフィックスを付けない未修飾のタイプ名です。
たとえば、MBean が EPLProcessorMBean のインスタンスである場合は、EPLProcessor を使用します。この場合、キー プロパティは Type=EPLProcessor になります。
TypeOfParentMBean=NameOfParentMBean
親 MBean のタイプと名前を指定します。
コンポーネントの場合は、常に Application=application_name となります。application_name は、コンポーネントが属するアプリケーションの名前です。
特定の Oracle CEP アプリケーションの名前を指定するには、アプリケーション バンドルに含まれる MANIFEST.MF ファイルの Bundle-SymbolicName ヘッダを使用します。たとえば、アプリケーションに次の抜粋コードのような MANIFEST.MF が指定されているとします (関連する部分のみを示しています)。

Manifest-Version: 1.0
Archiver-Version:
Build-Jdk: 1.5.0_06
....
Bundle-SymbolicName: myapplication

この場合、キー プロパティは Application=myapplication になります。

次の表は、HelloWorld サンプル EPN アセンブリ ファイルでのコンポーネント宣言に対応したコンフィグレーション MBean オブジェクト名の例を示しています。個々の例で、アプリケーション名は helloworld であり、ドメイン名は mydomain です。

表 6-2 コンポーネント宣言の例および対応する MBean オブジェクト名
EPN アセンブリ ファイルでのコンポーネント宣言のサンプル
対応するコンフィグレーション MBean オブジェクト名
<wlevs:processor
id="helloworldProcessor" />
com.bea.wlevs:Name=helloworldProcessor,Type=EPLProcessor,Application=helloworld,Domain=mydomain
EPLProcessor は、プロセッサ コンポーネントの標準コンフィグレーション MBean です。管理可能プロパティは rules です。
<wlevs:stream
id="helloworldInstream">
<wlevs:listener ref="helloworldProcessor"/>
<wlevs:source ref="helloworldAdapter"/>
</wlevs:stream>
com.bea.wlevs:Name=helloworldInstream,Type=Stream,Application=helloworld,Domain=mydomain
Stream は、ストリーム コンポーネントの標準コンフィグレーション MBean です。管理可能プロパティは MaxSizeMaxThreads です。

ランタイム MBean の命名

ランタイム MBean の命名には、コンフィグレーション MBean と同じパターンが使用されますが、Direction というプロパティが 1 つ余分にあります。このプロパティには有効な値が 2 つあります。どの時点で統計を収集するかを指定する OUTBOUNDINBOUND です。OUTBOUND は、指定したコンポーネントをイベントが離れたときにスループットとレイテンシを収集することを示します。同様に、INBOUND は、イベントがコンポーネントに入ったときにモニタ情報を収集することを示します。

たとえば、イベントがコンポーネントに入ったときにイベントをモニタするアプリケーション myapplicationmyprocessor と呼ばれるプロセッサがある場合、そのプロセッサに対応するランタイム MBean のオブジェクト名は次のようになります。

    com.bea.wlevs:Name=myprocessor,Type=EPLProcessor,Application=myapplication,Direction=INBOUND

コンフィグレーション MBean の命名方法の詳細については、「コンフィグレーション MBean の命名」を参照してください。

 


JMX を使用したコンポーネントの動的コンフィグレーション : 一般的な手順

この節では、Java Management Extensions (JMX) API を使用してコンフィグレーション MBean を操作すると想定しています。wlevs.Admin を使用する場合は、「wlevs.Admin コマンドライン リファレンス」を参照してください。Oracle CEP コンフィグレーション MBean について説明している以下の節を読み終えていることを確認してください。

EPN のコンポーネントを動的にコンフィグレーションするには、次の手順に従います。

  1. ドメインに JMX サービスがコンフィグレーションされていることを確認します。詳細については、「Oracle Complex Event Processing で使用する JMX のコンフィグレーション」を参照してください。
  2. 適切な MBean を使用してコンポーネントをコンフィグレーションする JMX Java コードを作成します。プログラミングのヒントについては、「JMX でのプログラミング」を参照してください。

JMX でのプログラミング

JMX プログラムで最初にしなければならないことの 1 つは、Oracle CEP サーバを実行している JMX サーバとの接続を確立することです。次にコード例を示します。

public static void initConnection(String hostname, int port, String username, char[] password) 
throws IOException, MalformedURLException {
  JMXServiceURL serviceURL = new JMXServiceURL("rmi", "localhost", 9004, "/jndi/rmi://localhost:" + 9004 + "/jmxrmi");
System.out.println("Service: " + serviceURL.toString());
Map<String,Object> h = makeSecureEnv();
connector = JMXConnectorFactory.connect(serviceURL, h);
connection = connector.getMBeanServerConnection();
}

JMXConnectorFactory.connect() メソッドは、2 番目のパラメータとして Map オブジェクトを受け取ります。このオブジェクトは、次のように makeSecureEnv() メソッドを使用してセキュアな環境を設定します。

private static Map<String,Object> makeSecureEnv() {
Map<String,Object> env = new HashMap<String,Object>();
String username = "wlevs" ;
char[] password = { 'w','l','e','v','s' };
env.put(JMXConnector.CREDENTIALS, new Serializable[]{username,password});
env.put("jmx.remote.authenticator", "com.bea.core.jmx.server.CEAuthenticator");
System.setProperty("jmx.remote.authenticator", "com.bea.core.jmx.server.CEAuthenticator");
return env;
}

この例では、次に、MBean へのクエリによって、ドメインとドメインのデプロイ済みアプリケーションについての情報の取得を開始する方法が示されています。最初に、タイプが Domain であるすべての MBean を取得する方法が示されています。そのような MBean は 1 つだけです。次に、DomainMBean を使用して、ドメインにデプロイされているすべてのアプリケーションのリストを取得する方法が示されています (ApplicationMBean を使用)。

Set domainObjectNames = 
connection.queryMBeans(ObjectName.getInstance(
ManagementConstants.DOMAIN_NAME + ":" +
ManagementConstants.TYPE_PROPERTY + "=" +
DomainMBean.MBEAN_TYPE + ",*"), null);
ObjectName domainName = 
((ObjectInstance) domainObjectNames.iterator().next()).getObjectName();
System.out.println("Domain Name: " + domainName.getKeyProperty(ManagementConstants.NAME_PROPERTY));
ObjectName [] applicationNames =
(ObjectName[]) connection.getAttribute(domainName, "ApplicationMBeans");
ObjectName selectedApplicationObjectName = null ;
for (ObjectName applicationName : applicationNames) {
String name =
applicationName.getKeyProperty(ManagementConstants.NAME_PROPERTY);
String status =
(String) connection.getAttribute(applicationName, "State");
System.out.println("Application: " + name + " Status: " + status);
selectedApplicationObjectName = applicationName ;
}

 


コンポーネントのスループットとレイテンシの動的モニタ

最初に、モニタするコンポーネントの MonitorRuntimeMBean のインスタンスを取得します。着信イベント (INBOUND) または発信イベント (OUTBOUND) のどちらをモニタするのかを必ず指定してください。例を示します。

  m_processorInbound =
ObjectName.getInstance("com.bea.wlevs:Name=myprocessor,Type=EPLProcessor,Application=myapplication,Direction=INBOUND");

MonitorRuntimeMBean には、収集可能な統計のタイプごとに使用できるメソッドがあります。たとえば、平均レイテンシをモニタする場合は monitorAvgLatency() を実行し、平均スループットをモニタする場合は monitorAvgThroughput() を実行します。これらのメソッドはすべて ProbeRuntimeMBean を返します。例を示します。

ObjectName probeON = m_testBean.getMonitorRuntimeMBean().monitorAvgThroughput(m_processorInbound, 1000, 1000);

ProbeRuntimeMbean のインスタンスを取得した後、実際の実行時メトリックを取得するには 2 とおりの方法があります。

モニタ情報の収集が完了したら、ProbeRuntimeMBean.terminate() を使用して MBean サーバから MBean を登録解除します。

これらの MBean インタフェースの詳細、およびこれらの MBean インタフェースを使用してスループットとレイテンシをモニタする方法については、ランタイム モニタの Javadoc を参照してください。


  ページの先頭       前  次