![]() ![]() ![]() ![]() |
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 が公開されています。
EPLProcessorMBean
や StreamMBean
があります。
詳細については、「コンフィグレーション MBean」を参照してください。
「ランタイム MBean」を参照してください。
Oracle CEP MBean の詳細と管理の概要については、以下の Javadoc を参照してください。
Oracle CEP アプリケーションをデプロイすると、管理容易性が有効になっている EPN の各コンポーネント (言い換えると、EPN アセンブリ ファイルに登録されている各コンポーネント) について、コンフィグレーション MBean がサーバによって自動的に作成されます。アダプタのコンフィグレーションを拡張した場合、アダプタ用のカスタム コンフィグレーション MBean がデプロイされます。
JMX を使用すると、コンポーネントのコンフィグレーション MBean を使用してコンポーネントを動的にコンフィグレーションできます。たとえば、StreamMBean.setMaxSize()
メソッドを使用してストリーム コンポーネントのサイズを設定できます。
「ランタイム MBean」を使用して、EPN の各コンポーネントについてのモニタ情報を収集することもできます。WebLogic Event Server では、各コンポーネントについてモニタできる以下のメトリックが定義されています。
次の図は、Oracle CEP MBean ツリーを表しています。
すべての MBean は、タイプ javax.management.ObjectName
のオブジェクト名で MBean サーバに登録されている必要があります。Oracle CEP は、子 MBean のオブジェクト名が親 MBean オブジェクト名の一部を含むという規則に準拠します。
DomainMBean
および DomainRuntimeMBean
という主要な 2 つの MBean ルートがあります。前者にはドメイン全体のコンフィグレーション MBean が含まれ、後者には、通常は単一のサーバ インスタンスをスコープとするランタイム情報 (統計など) とローカル サービス (モニタなど) が含まれます。
ApplicationMBean
は DomainMBean
の子であり、ServerMBean
の子ではありません。アプリケーションはドメイン内でユニークであり、複数のサーバにまたがって実行できるためです。
次の図は、オブジェクト モデルを構成する主なクラスと関係を示しています。
ほとんどの MBean は通知を送信するエミッタであり、AttributeChangeNotifications
を生成します。つまり、JMX クライアントは、アプリケーション状態の変更、ドメインでのアプリケーションの挿入と削除、ストリーム サイズとスレッドの変更、ルールの挿入と削除などに関する属性変更通知を受け取るように登録できます。
この節は、コンフィグレーション MBean の命名とランタイム MBean の命名に分かれています。
Oracle CEP コンフィグレーション MBean は階層構造に編成されています。各 MBean のオブジェクト名は階層内でのその MBean の位置を表しています。一般的なオブジェクト命名パターンは次のとおりです。
com.bea.wlevs:Name=name,Type=type,[TypeOfParentMBean
=NameOfParentMBean]
キー プロパティの順序は重要ではありませんが、オブジェクト名は com.bea:wlevs:
で開始する必要があります。
たとえば、ドメイン内のアプリケーション myapplication
に myprocessor
と呼ばれるプロセッサがある場合、そのプロセッサに対応する MBean のオブジェクト名は次のようになります。
com.bea.wlevs:Name=myprocessor,Type=EPLProcessor,Application=myapplication
次の表では、Oracle WebLogic Server で MBean オブジェクト名にエンコードされるキー プロパティについて説明します。
次の表は、HelloWorld サンプル EPN アセンブリ ファイルでのコンポーネント宣言に対応したコンフィグレーション MBean オブジェクト名の例を示しています。個々の例で、アプリケーション名は helloworld
であり、ドメイン名は mydomain
です。
ランタイム MBean の命名には、コンフィグレーション MBean と同じパターンが使用されますが、Direction
というプロパティが 1 つ余分にあります。このプロパティには有効な値が 2 つあります。どの時点で統計を収集するかを指定する OUTBOUND
と INBOUND
です。OUTBOUND
は、指定したコンポーネントをイベントが離れたときにスループットとレイテンシを収集することを示します。同様に、INBOUND
は、イベントがコンポーネントに入ったときにモニタ情報を収集することを示します。
たとえば、イベントがコンポーネントに入ったときにイベントをモニタするアプリケーション myapplication
に myprocessor
と呼ばれるプロセッサがある場合、そのプロセッサに対応するランタイム MBean のオブジェクト名は次のようになります。
com.bea.wlevs:Name=myprocessor,Type=EPLProcessor,Application=myapplication,Direction=INBOUND
コンフィグレーション MBean の命名方法の詳細については、「コンフィグレーション MBean の命名」を参照してください。
この節では、Java Management Extensions (JMX) API を使用してコンフィグレーション MBean を操作すると想定しています。wlevs.Admin
を使用する場合は、「wlevs.Admin コマンドライン リファレンス」を参照してください。Oracle CEP コンフィグレーション MBean について説明している以下の節を読み終えていることを確認してください。
EPN のコンポーネントを動的にコンフィグレーションするには、次の手順に従います。
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 を参照してください。
![]() ![]() ![]() |