Oracle® Fusion Middleware

Oracle Stream Analyticsのカスタマイズ

12cリリース(12.2.1.1.0)

E79306-01(原本部品番号:E67735-02)

2016年8月

カスタマイズしたOracle Event Processingアダプタ、イベントBean、チャネル・イベント・パーティショナ、イベント・ストア・プロバイダ、JMSメッセージ・コンバータBeanおよびHTTPパブリッシュ/サブスクライブ・サーバーを作成する方法。

Oracle Fusion Middleware Oracle Stream Analyticsのカスタマイズ、12cリリース(12.2.1.1.0)

E79306-01

Copyright © 2007, 2016, Oracle and/or its affiliates. All rights reserved.

原本著者: Oracle® Corporation

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

このガイドの最新情報

1 カスタム・アダプタ

- 1.1 実装の基本

- 1.2 入力アダプタ・コードの例

- 1.3 カスタム・アダプタの構成

- 1.3.1 アセンブリ・ファイルの要素およびプロパティ

- 1.3.2 構成ファイルの要素およびプロパティ

- 1.4 アダプタからデータ・フィード・プロバイダへのログイン資格証明の受渡し

- 1.4.1 静的なログイン資格証明の受渡し

- 1.4.2 動的なログイン資格証明の受渡し

- 1.4.3 実行時のログイン資格証明へのアクセス

- 1.5 マルチスレッド・アダプタ

- 1.6 アダプタ・イベント処理の中断と再開

- 1.7 アダプタのライフサイクル注釈

- 1.7.1 構文

- 1.7.2 com.bea.wlevs.configuration.Prepare (@Prepare)

- 1.7.3 com.bea.wlevs.configuration.Activate (@Activate)

- 1.7.4 com.bea.wlevs.configuration.Rollback (@Rollback)

2 アダプタおよびイベントBeanの拡張

- 2.1 注釈

- 2.2 XSDファイル

- 2.2.1 XSDファイルによるコンポーネント構成の拡張

- 2.2.2 XSDファイルの作成

- 2.2.3 XSDスキーマ・ファイルの完全な例

- 2.3 コンポーネント構成へのアクセス

- 2.3.1 リソース・インジェクション

- 2.3.2 ライフサイクル・コールバック

- 2.3.3 ライフサイクル・コールバック注釈

- 2.3.4 アダプタおよびイベントBeanのライフサイクル

3 アダプタおよびイベントBeanファクトリ

- 3.1 アダプタ・ファクトリの作成

- 3.2 イベントBeanファクトリの作成

4 アダプタまたはイベントBeanのアセンブル

- 4.1 独自のバンドルでのカスタム・アダプタのアセンブル

- 4.2 独自のバンドルでのイベントBeanのアセンブル

5 カスタム・イベント・ストア・プロバイダ

- 5.1 イベント・ストアAPI

- 5.2 インタフェース

はじめに

このドキュメントでは、Oracle Stream Analyticsアプリケーションの作成、デプロイおよびデバッグ方法について説明します。

対象読者

このドキュメントは、Oracle Stream Analyticsアプリケーションを作成するプログラマを対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティへの取り組みについては、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)にアクセスしてください。

Oracle Supportへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info、聴覚に障害があるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

詳細は、次を参照してください。

- Oracle SOA製品およびOracle AIA Foundation Packの既知の問題: http://www.oracle.com//technetwork/middleware/soasuite/documentation/soaknown-2644661.html。

- Oracle Stream Analyticsによるイベント処理用アプリケーションの開発

- Oracle Stream Analyticsイベント処理スタート・ガイド

- Oracle Stream Analyticsスキーマ・リファレンス

- Oracle Stream Analyticsビジュアライザの使用

- Oracle Stream Analyticsの管理

- Oracle CQLデータ・カートリッジによるアプリケーションの開発

- Oracle CQL言語リファレンス

- Oracle Stream Analytics Java APIリファレンス

- Oracle Stream Analyticsの使用

- Oracle Stream Analyticsスタート・ガイド

- 『Oracle Database SQL言語リファレンス』(: http://docs.oracle.com/cd/E16655_01/server.121/e17209/toc.htm)

- SQL99仕様(ISO/IEC 9075-1:1999、ISO/IEC 9075-2:1999、ISO/IEC 9075-3:1999およびISO/IEC 9075-4:1999)

- Oracle Stream Analyticsフォーラム: http://forums.oracle.com/forums/forum.jspa?forumID=820

表記規則

このマニュアルでは次の表記規則を使用します。

表記規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

このガイドの最新情報

12c (12.2.1.0.0)リリースで、製品名がOracle Stream ExplorerからOracle Stream Analyticsに変更されました。

使用しているスキンによっては、このガイドで示される画面は実装状態と異なる場合があります。相違点は軽微なものです。

1 カスタム・アダプタ

カスタム・アダプタは、Oracle Stream Analyticsで提供されているアダプタがサポートしていない外部コンポーネントとの間でイベント・データのやり取りを行います。

Oracle Stream Analyticsで提供されるアダプタの詳細は、Oracle Stream Analyticsによるイベント処理用アプリケーションの開発のQuickFixアダプタの操作を参照してください。

この章の内容は次のとおりです。

- 実装の基本

- 入力アダプタ・コードの例

- カスタム・アダプタの構成

- アダプタからデータ・フィード・プロバイダへのログイン資格証明の受渡し

- マルチスレッド・アダプタ

- アダプタ・イベント処理の中断と再開

- アダプタのライフサイクル注釈

1.1 実装の基本

作成するカスタム・アダプタのタイプは、受信データの形式と、アダプタ・コードで受信データをOracle Stream Analyticsイベントに変換するために使用するテクノロジに依存します。通常、カスタム・アダプタは次のことを行います。

- Reuters、Wombat、Bloombergなどのデータ・ベンダーからのAPIを使用します。

- TIBCO Rendezvousなどのメッセージング・システムを使用します。

- カスタマ自身のデータ・プロトコルとのソケット接続を確立します。

- 入力または出力外部コンポーネントで必要に応じて自身を認証します。

- 外部コンポーネントからRAWイベント・データを受信し、データをイベントに変換して、次のアプリケーション・ノードにイベントを送信します。

- イベント処理ネットワーク内でイベントを受信し、ターゲット外部コンポーネントで認識される形式にイベント・データを変換します。

カスタム・アダプタを実装するには、外部コンポーネントと通信するJavaコードを記述します。入力カスタム・アダプタ実装は、外部コンポーネントからRAWイベント・データを受信し、データをイベントに変換して、次のアプリケーション・ノードにイベントを送信します。出力カスタム・アダプタ実装は、イベント処理ネットワーク内でイベントを受信し、ターゲット外部コンポーネントで認識される形式にイベント・データを変換します。

カスタム・アダプタの作成のためのOracle Stream Analytics APIについては、Oracle Stream Analytics Java APIリファレンスで説明されています。

次の手順の概要では、カスタム・アダプタを作成する方法を説明します。これらのトピックについては、この章の後半で詳しく説明します。

1. 外部コンポーネントと通信するJavaクラスを実装します。

2. イベント・タイプ・インスタンスの送信または受信をサポートするインタフェースを実装します。

- イベントを送信するには、カスタム・アダプタをイベント・ソースとして実装します。

- イベントを受信するには、カスタム・アダプタをイベント・シンクとして実装します。
イベント・ソースおよびイベント・シンクの詳細は、Oracle Stream Analytics Java APIリファレンスを参照してください。

3. アダプタが中断と再開をサポートしている場合(アンデプロイしてデプロイする場合など)、これらのイベントを処理するインタフェースを実装します。

4. アプリケーションの拡張性を向上するためにマルチスレッドを使用します。

5. 必要な認証のために、イベント・データを提供または受信するコンポーネントにログイン資格証明を渡すJavaロジックを記述します。

6. 複数のアプリケーションがカスタム・アダプタにアクセスする場合、ファクトリ・クラスを作成します。

7. アセンブリ・ファイルでアダプタを構成してEPNに追加します。

1.2 入力アダプタ・コードの例

この項の例では、ファイルからRAWイベント・データを取得し、データをイベントに変換して、EPNのダウンストリーム・ステージにイベントを送信する基本的な入力アダプタのコードを示します。コードはOracle Spatialのサンプル・アプリケーションからの抜粋です。

注意:

ここに示すコード例は本番用ではありませんが、入力アダプタの基本的なワークフローの概要を示しています。

サーバーは次のBusStopAdapterクラス・メソッドをコールして、BusStopAdapterオブジェクトが実行時に必要とする情報を提供(注入)します。

- BusStopAdapter.setRepositoryInstanceメソッドは、このアプリケーション用のイベント・タイプ構成が含まれるEventTypeRepositoryインスタンスを注入します。EventTypeRepositoryインスタンスは、アダプタがそのアダプタ用に構成されているイベント・タイプに関する情報を取得できるようにします。

- BusStopAdapter.setEventSenderメソッドは、BusStopAdapterオブジェクトがイベントを次のEPNノードに送信できるように、StreamSenderオブジェクトを注入します。

- BusStopAdapter.setPathおよびBusStopAdapter.setEventTypeメソッドは、イベントのプロパティ値を提供します。

- BusStopAdapter.runメソッド実装は、RAWイベント・データを取得し、データをイベント・タイプ・インスタンスに解析して、新しいイベントをダウンストリームのEPNノードに送信します。

package com.oracle.cep.sample.spatial;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.bea.wlevs.ede.api.EventProperty;
import com.bea.wlevs.ede.api.EventRejectedException;
import com.bea.wlevs.ede.api.EventType;
import com.bea.wlevs.ede.api.EventTypeRepository;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSink;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.util.Service;
import java.lang.RuntimeException;

public class BusStopAdapter implements RunnableBean, StreamSource, StreamSink {
static final Log s_logger = LogFactory.getLog("BusStopAdapter");
private String m_filePath;
private String m_eventTypeName;
private EventType m_eventType;
private StreamSender m_eventSender;
private boolean m_stopped;
private int m_repeat = 1;
private EventTypeRepository m_etr = null;

public BusStopAdapter()
{ super(); }

/**
* Called by the server to pass in the path
* to the file with bus stop data.
*
* @param path The value specified for the path
* property in the adapter's configuration in the EPN assembly file.
*/
public void setPath(String path) throws RuntimeException {
// Code to create a File instance from the path. This
// File object retrieves event data from the file.
}

/**
* Called by the server to pass in the name of the event
* type to which event data should be bound.
*
* @param path The value specified for the path
* property in the adapter's configuration in the EPN assembly file.
*/
public void setEventType(String typ)
{ m_eventTypeName = typ; }

/**
* Called by the server to set an event type
* repository instance that knows about event
* types configured for this application.
*
* This repository instance will be used to retrieve an
* event type instance that is populated with
* event data retrieved from the event data file.
*
* @param etr The event repository.
*/
@Service(filter = EventTypeRepository.SERVICE_FILTER)
public void setEventTypeRepository(EventTypeRepository etr)
{ m_etr = etr; }

/**
* Executes to retrieve raw event data and
* create event type instances from it, then
* sends the events to the next stage in the
* EPN.
*
* This method, implemented from the RunnableBean
* interface, executes when this adapter instance is active.
*/
public void run() {
if (m_etr == null){
throw new RuntimeException("EventTypeRepository is not set");
}

// Get the event type from the repository wit the event type name
// specified as a property of this adapter in the assembly file.
m_eventType = m_etr.getEventType(m_eventTypeName);
if (m_eventType == null){
throw new RuntimeException("EventType(" + m_eventType + ") is not found.");
}

BufferedReader reader = null;

System.out.println("Sending " + m_eventType + " from " + m_filePath);
while ((m_repeat != 0) && (!m_stopped)) {
try {
reader = new BufferedReader(new FileReader(m_filePath));
} catch (Exception e) {
m_stopped = true;
break;
}
while (!isStopped()) {
try {
// Create an event and assign to it an event type generated
// from the event data retrieved by the reader.
Object ev = null;
ev = readLine(reader);
if (ev == null){
reader.close();
break;
}
// Send the newly created event to a downstream node
//listening to this adpater.
m_eventSender.sendInsertEvent(ev);
} catch (Exception e){
m_stopped = true;
break;
}
}
}
}
/**
* Called by the server to pass in a sender instance to be used to
* send generated events to a downstream node.
*
* @param sender A sender instance.
*/
public void setEventSender(StreamSender sender)
{ m_eventSender = sender; }

/**
* Returns true if this adapter instance has been
* suspended, such as because an exception occurred.
*/
private synchronized boolean isStopped()
{ return m_stopped; }

/**
* Reads data from reader, creating event type
* instances from that data. This method is
* called from the run() method.
*
* @param reader Raw event data from a file.
* @return An instance of the event type specified
* as a property of this adapter.
*/
protected Object readLine(BufferedReader reader) throws Exception
{
// Code to read raw event data and return an event type
// instance from it.
}

/**
* Called by the server to pass in an
* insert event received from an
* upstream stage in the EPN.
*/
@Override
public void onInsertEvent(Object event) throws EventRejectedException {
// Code to begin executing the logic needed to
// convert incoming event data to event type instances.
}
}

1.3 カスタム・アダプタの構成

カスタム・アダプタを作成する場合、それをアセンブリおよびコンポーネント構成ファイルで構成することでEPNに追加します。

1.3.1 アセンブリ・ファイルの要素およびプロパティ

アセンブリ・ファイルでwlevs:adapter要素を使用して、アダプタをイベント・プロセッサ・ネットワークのコンポーネントとして宣言します。wlevs:instance-property子要素を使用して、アダプタの静的プロパティを設定します。静的プロパティは、アダプタのデプロイ後に動的に変更しないプロパティです。

次の例では、BusStopAdapterクラスはクラス・メソッドに対応するプロパティで構成されています。BusStopAdapterのアクセッサ・メソッドsetPath、setEventTypeおよびsetBufferは、アセンブリ・ファイルのpath、eventTypeおよびbufferプロパティに対応します。アセンブリ・ファイルでのプロパティ名のスペルは、アクセッサ・メソッドのスペルからgetまたはset接頭辞を除いたものと一致します。

<wlevs:adapter id="BusStopAdapter"
class="com.oracle.cep.sample.spatial.BusStopAdapter" >
<wlevs:instance-property name="path" value="bus_stops.csv"/>
<wlevs:instance-property name="eventType" value="BusStop"/>
<wlevs:instance-property name="buffer" value="30.0"/>
</wlevs:adapter>

wlevs:listener要素を使用して、イベント・シンクであるアダプタを参照します。次の例では、BusPositionGen CSVアダプタは、イベントをBusStopAdapterに送信します。

<wlevs:adapter id="BusPositionGen" provider="csvgen">
<!-- Code omitted -->
<wlevs:listener ref="BusStopAdapter"/>
</wlevs:adapter>

1.3.2 構成ファイルの要素およびプロパティ

構成ファイルでadapter要素を使用して、実行時に更新できる子要素およびプロパティを追加します。各アダプタ構成には、config要素の個別のadapter子要素が必要です。次の例では、イベント記録用のBusStopAdapterアダプタを構成します。

<?xml version="1.0" encoding="UTF-8"?>
<wlevs:config
xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application">
<adapter>
<name>BusStopAdapter</name>
<record-parameters>
<dataset-name>spatial_sample</dataset-name>
<event-type-list>
<event-type>BusPos</event-type>
<event-type>BusStop</event-type>
<event-type>BusPosEvent</event-type>
<event-type>BusStopArrivalEvent</event-type>
<event-type>BusStopPubEvent</event-type>
<event-type>BusStopPubEvent</event-type>
</event-type-list>
<batch-size>1</batch-size>
<batch-time-out>10</batch-time-out>
</record-parameters>
</adapter>
</wlevs:config>

1.4 アダプタからデータ・フィード・プロバイダへのログイン資格証明の受渡し

アダプタが外部データ・フィードにアクセスする場合、アダプタはユーザー認証のためにデータ・フィードにログイン資格証明を渡す必要があることがあります。アダプタ・コードには暗号化していないログイン資格証明をハードコードできます。この安全でない方法では、パスワードを暗号化したり、ログイン資格証明を簡単に変更できません。

まず、ログイン資格証明をアセンブリ・ファイルで静的に構成するか、アダプタ構成を拡張して動的に構成するかを決定します。資格証明をアセンブリ・ファイルで静的に構成する方が簡単ですが、資格証明が変更された場合、アセンブリ・ファイルの更新を反映するためにアプリケーションを再起動する必要があります。アダプタ構成を拡張すると、アプリケーションを再起動せずに資格証明を動的に変更できますが、XSDファイルを作成してJAXBオブジェクトにコンパイルするといった追加手順が必要になります。

- 静的なログイン資格証明の受渡し

- 動的なログイン資格証明の受渡し

- 実行時のログイン資格証明へのアクセス

1.4.1 静的なログイン資格証明の受渡し

この項では、アセンブリ・ファイルで静的に構成したログイン資格証明を渡す方法について説明します。

データ・フィード・プロバイダへの静的な資格証明の受渡し

1. アセンブリ・ファイルを開きます。

2. ログイン資格証明のユーザー名とパスワードに対応する2つのインスタンス・プロパティを追加します。

クリアテキストのパスワード値を使用してpassword要素を追加します。パスワードは手順4で暗号化します。

<wlevs:adapter id="myAdapter" provider="myProvider">
<wlevs:instance-property name="user" value="juliet"/>
<wlevs:instance-property name="password" value="superSecret"/>
<password>superSecret</password>
</wlevs:adapter>

3. アセンブリ・ファイルを保存します。

4. encryptMSAConfigコマンドを実行して、アセンブリ・ファイルのpassword要素を暗号化します。次のコマンドを1行で指定します。

/Oracle/Middleware/oep/oep/bin/encryptMSAConfig . assembly_file /Oracle/Middleware/oep/user_projects/domains/<domain>/<server>/.aesinternal.dat

コマンドを実行すると、アセンブリ・ファイルのpassword要素値が暗号化されます。

/Oracle/Middleware/oep/: Oracle Stream Analyticsのインストール・ディレクトリ。

ドット(.): アセンブリ・ファイルが含まれるディレクトリ。ドット(.)は、アセンブリ・ファイルが配置されているディレクトリでコマンドを実行することを意味します。

assembly_file: アセンブリ・ファイルの名前。

~/aesinternal.dat: ドメインと関連付けられている*.aesinternal.dat鍵ファイルの名前と場所。鍵ファイルはアセンブリ・ファイルの<password />要素を暗号化します。

5. 構成されたログイン資格証明のプロパティにアクセスしてパスワードを復号化するよう、アダプタのJavaコードを更新します。

「実行時のログイン資格証明へのアクセス」を参照してください。

6. アプリケーションのMANIFEST.MFファイルを編集し、Import-Packageヘッダーにcom.bea.core.encryptionパッケージを追加します。

7. アプリケーションをアセンブルしなおしてデプロイします。

1.4.2 動的なログイン資格証明の受渡し

独自のXSDファイルを作成してカスタム・アダプタ構成を拡張できます。

XSDファイルの作成

1. カスタム・アダプタ構成が記述されている新しいXSDスキーマ・ファイルを作成します。string型のuserおよびpassword要素を追加します。

たとえば、HelloWorldアダプタ構成を拡張する場合、XSDファイルは次のようになります。

<xs:complexType name="HelloWorldAdapterConfig">
<xs:complexContent>
<xs:extension base="wlevs:AdapterConfig">
<xs:sequence>
<xs:element name="message" type="xs:string"/>
<xs:element name="user" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

詳細は、「アダプタおよびイベントBeanの拡張」を参照してください。

2. アダプタ構成ファイルが含まれるディレクトリに変更します。

3. アダプタ構成ファイルで、<user>および<password>要素にユーザー名とパスワードを入力します。

クリアテキストのパスワード値を指定します。これは手順4で暗号化します。

<?xml version="1.0" encoding="UTF-8"?>
<myExample:config
xmlns:myExample="http://www.bea.com/xml/ns/wlevs/example/myExample">
<adapter>
<name>myAdapter</name>
<user>juliet</user>
<password>superSecret</password>
</adapter>
</myExample:config>

4. encryptMSAConfigコマンドを実行して、アセンブリ・ファイルのpassword要素を暗号化します。次のコマンドを1行で指定します。

/Oracle/Middleware/oep/oep/bin/encryptMSAConfig . assembly_file /Oracle/Middleware/oep/user_projects/domains/<domain>/<server>/.aesinternal.dat

コマンドを実行すると、アセンブリ・ファイルのpassword要素値が暗号化されます。

/Oracle/Middleware/oep/: Oracle Stream Analyticsのインストール・ディレクトリ。

ドット(.): アセンブリ・ファイルが含まれるディレクトリ。ドット(.)は、アセンブリ・ファイルが配置されているディレクトリでコマンドを実行することを意味します。

assembly_file: アセンブリ・ファイルの名前。

~/aesinternal.dat: ドメインと関連付けられている*.aesinternal.dat鍵ファイルの名前と場所。鍵ファイルはアセンブリ・ファイルの<password />要素を暗号化します。

5. アダプタの構成ファイルを保存します。

6. 構成されたログイン資格証明のプロパティにアクセスしてパスワードを復号化するよう、アダプタのJavaコードを更新します。

「実行時のログイン資格証明へのアクセス」を参照してください。

7. アプリケーションのMANIFEST.MFファイルを編集し、Import-Packageヘッダーにcom.bea.core.encryptionパッケージを追加します。

8. アプリケーションをアセンブルしなおしてデプロイします。

アダプタの構成を拡張する場合、OSGi MANIFEST.MFファイルに次のパッケージをインポートする必要があります。

javax.xml.bind;version="2.0",
javax.xml.bind.annotation;version=2.0,
javax.xml.bind.annotation.adapters;version=2.0,
javax.xml.bind.attachment;version=2.0,
javax.xml.bind.helpers;version=2.0,
javax.xml.bind.util;version=2.0,
com.bea.wlevs.configuration;version="11.1.1",
com.bea.wlevs.configuration.application;version="11.1.1",
com.sun.xml.bind.v2;version="2.0.2"

1.4.3 実行時のログイン資格証明へのアクセス

実行時にログイン資格証明にアクセスしてパスワードを復号化するには、カスタム・アダプタJavaクラスにコードを追加します。パスワードを復号化するには、com.bea.core.encryption.EncryptionServiceクラスをインポートして使用します。

ログイン資格証明プロパティへのアクセス

1. 暗号化されたパスワードの復号化に必要な追加のAPIをインポートします。

import com.bea.core.encryption.EncryptionService;
import com.bea.core.encryption.EncryptionServiceException;
import com.bea.wlevs.util.Service;

2. OSGiの@Service注釈を使用して、EncryptionServiceへの参照を取得します。

private EncryptionService encryptionService;

@Service
public void setEncryptionService(EncryptionService encryptionService) {
this.encryptionService = encryptionService;
}

3. @Prepareコールバック・メソッドで、拡張したアダプタ構成のuserおよびpasswordプロパティの値を取得します。例では、passwordの値を取得するコードを示します。@Prepare、@Activateおよび@Rollbackアダプタ・ライフサイクル注釈の詳細は、「アダプタのライフサイクル注釈」を参照してください。

private String password;

public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;

@Prepare
public void checkConfiguration(HelloWorldAdapterConfig adapterConfig) {
if (adapterConfig.getMessage() == null
|| adapterConfig.getMessage().length() == 0) {
throw new RuntimeException("invalid message: " + message);
}
this.password= adapterConfig.getPassword();
}

拡張したアダプタ構成へのアクセスの詳細は、「コンポーネント構成へのアクセス」を参照してください。

4. @Prepareコールバック・メソッドでEncryptionService.decryptStringAsCharArrayメソッドを使用して暗号化されたパスワードを複合化します。

@Prepare
public void checkConfiguration(HelloWorldAdapterConfig adapterConfig) {
if (adapterConfig.getMessage() == null
|| adapterConfig.getMessage().length() == 0) {
throw new RuntimeException("invalid message: " + message);
}
this.password = adapterConfig.getPassword();
try {
char[] decrypted =       encryptionService.decryptStringAsCharArray(password);
System.out.println("DECRYPTED PASSWORD is "+ new String(decrypted));
} catch (EncryptionServiceException e) {
throw new RuntimeException(e);
}
}

decryptStringAsCharArrayメソッドのシグネチャは次のとおりです。

char[] decryptStringAsCharArray(String encryptedString)
throws EncryptionServiceException

5. ベンダーAPIを使用して、これらの資格証明をデータ・フィード・プロバイダに渡します。

1.5 マルチスレッド・アダプタ

複数のスレッドを使用してデータ・ソースから読み取るように、アダプタを実装または構成できます。イベント処理作業に高いオーバーヘッドがある場合、マルチスレッド・アダプタでパフォーマンスを向上できます。マルチスレッドを実装するには、ワーク・マネージャを使用するか、WorkManagerインタフェースを実装してアダプタをマルチスレッド化できます。RunnableまたはRunnableBeanインタフェースを実装して、カスタム・アダプタを並列実行できます。

注意:

シングル・スレッド・アダプタでは、イベントの順序は保証されます。マルチスレッド・アダプタでは、イベントの順序は保証されません。イベントの順序を管理するために、カスタム・アダプタ・クラスにコードを追加することが必要となる場合があります。

ワーク・マネージャ

スレッド化を実装する最も簡単な方法は、ワーク・マネージャを使用してアダプタを構成することです。ワーク・マネージャは、複数のスレッドでのスケジュール用にアプリケーションがコード(Workインタフェースを実装するクラス)を送信できるサーバー機能です。ワーク・マネージャ機能のインタフェースは、commonj.work.WorkManagerです。

Oracle Stream Analyticsでは、WorkManagerインスタンスはサーバーのconfig.xmlファイルで構成できます。また、使用するアプリケーションごとにデフォルトのワーク・マネージャも割り当てられます。

2つのうちいずれかの方法で、アダプタで使用するワーク・マネージャへの参照を取得できます。

- アダプタに注入する(config.xmlファイルで構成された)サーバーをスコープにした特定のワーク・マネージャの名前をユーザーが指定できるアダプタの構成プロパティを作成できます。ワーク・マネージャの明示的な構成をサポートするアダプタの例は、組込みJMSアダプタ用の構成の詳細を参照してください。

- アダプタにcom.bea.wlevs.ede.spi.WorkManagerAwareインタフェースを実装できます。このインタフェースは、アダプタを初期化してアプリケーションにデフォルトのワーク・マネージャを注入するときにシステムによってコールされる単一のメソッドsetWorkManager(WorkManager wm)で構成されます。

WorkManagerインスタンスを取得したら、ワーク・マネージャのスレッド・プールで実行される作業を送信できます。

ワーク・マネージャにアプリケーションと同じ名前を指定することで、ワーク・マネージャとアプリケーションを関連付けできます。アプリケーションのワーク・マネージャを明示的に指定しない場合は、デフォルト値の最小(MIN)および最大(MAX)スレッド数で、デフォルトのワーク・マネージャが作成されます。

WorkManagerAwareインタフェース

スレッドをより詳細に管理する必要がある場合は、カスタム・アダプタにWorkManagerAwareインタフェースを実装できます。この場合、Oracle Stream Analyticsは初期化中にアプリケーションのワーク・マネージャを使用してアダプタを注入します。このワーク・マネージャを使用して、アダプタまたはイベントBeanインタフェースのスレッドを明示的に管理します。

RunnableBeanインタフェース

コードの一部を別のスレッドで実行する必要はあっても、WorkManager APIによって提供されるスレッドを完全に制御する必要はないアダプタは、com.bea.wlevs.ede.api.RunnableBeanインタフェースを実装できます。このインタフェースには、アプリケーションのデフォルト・ワーク・マネージャに属するいずれかのスレッドでシステムによってコールされるrunメソッドが含まれます。RunnableBeanインタフェースは、単一のワーク・マネージャ・スレッドでコードを実行する非常に簡潔なモデルをアダプタに提供します。並列度を高めるために複数のワーク・マネージャ・スレッドを明示的に使用する必要がある場合は、WorkManagerインタフェースを直接使用します。「ワーク・マネージャ」を参照してください。

EPN

このインタフェースの参照情報は、Oracle Stream Analytics Java APIリファレンスを参照してください。

1.6 アダプタ・イベント処理の中断と再開

次のインタフェースを実装して、イベント処理を中断および再開するためのサーバー・サポートを追加できます。たとえば、EPNが中断したときにカスタム・アダプタでイベントの処理を停止し、EPNが再開したときにイベントの処理を再び開始できます。いずれかまたは両方の場合に、必要に応じてリソースを管理できます。

表1-1 アダプタの中断と再開をサポートするインタフェース

インタフェース

説明

com.bea.wlevs.ede.api.SuspendableBean

EPNが中断したときに実行するロジックを提供する。suspendメソッドで、リソースを中断するか、イベントの処理を停止できる。

com.bea.wlevs.ede.api.ResumeableBean

これを実装して、EPNが処理を再開する場合に実行するロジックを提供します。beforeResumeメソッドを実装する場合、アダプタの処理を再開する前に実行する必要があるコードを提供できます。

Oracle Stream Analytics Java APIリファレンスを参照してください。

1.7 アダプタのライフサイクル注釈

カスタム・アダプタのライフサイクル・ステージ(構成の準備ができたとき、構成がアクティブ化したとき、および例外によってアダプタが終了したとき)を処理するカスタム・アダプタ実装のメソッドを指定するには、次の注釈を使用します。

- 構文

- com.bea.wlevs.configuration.Prepare (@Prepare)

- com.bea.wlevs.configuration.Activate (@Activate)

- com.bea.wlevs.configuration.Rollback (@Rollback)

1.7.1 構文

次のシグネチャでカスタム・アダプタ・メソッド上に該当する@Prepare、@Activateまたは@Rollback注釈を配置し、それらのメソッドが構成情報をアダプタに送信することを示します。

public void methodName(AdapterConfigObject adapterConfig)

AdapterConfigObjectは、アプリケーションにデプロイされたアダプタの構成XMLファイルのJava表現を参照します。このクラスのタイプは、デフォルトでcom.bea.wlevs.configuration.application.DefaultAdapterConfigです。アダプタの構成を拡張した場合、このクラスのタイプは、拡張されたXMLファイルを記述するXSDに指定されているものです。たとえば、HelloWorldサンプルでは、タイプはcom.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfigです

実行時に、Oracle Stream AnalyticsはAdapterConfigObjectクラスを作成し、そのクラスにXMLファイルのデータを移入して、作成したインスタンスをアダプタに渡します。@Activateおよび@Rollbackアダプタ・ライフサイクル注釈で注釈されたアダプタ・メソッドは、そのクラスを使用してアダプタ構成の情報を取得します。

これらの@Prepare、@Activateおよび@Rollback注釈には属性はありません。次の例では、HelloWorldAdapterConfigクラスはアダプタの構成XMLファイルを表します。アプリケーションのデプロイ時に、Oracle Stream Analyticsはこのクラスのインスタンスを作成します。HelloWorldの例では、アダプタ構成は拡張されています。「com.bea.wlevs.configuration.Activate (@Activate)」の例を参照してください。

1.7.2 com.bea.wlevs.configuration.Prepare (@Prepare)

Oracle Stream Analyticsサーバーは、構成の変更によってアダプタの状態が更新された場合は常に、@Prepareで注釈されているメソッドをコールします。次の例では、HelloWorldサンプル・アプリケーションのアダプタ・コンポーネントのもので、@Prepare注釈を使用する方法を示します。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Prepare;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldAdapter implements RunnableBean, StreamSource {
...
@Prepare
public void checkConfiguration(HelloWorldAdapterConfig adapterConfig) {
if (adapterConfig.getMessage() == null
|| adapterConfig.getMessage().length() == 0) {
throw new RuntimeException("invalid message: " + message);
}
}
...
}

注釈付きのcheckConfigurationメソッドは、(拡張されたアダプタの構成ファイルに設定されている)アダプタ構成のmessageプロパティがnullまたは空でないことを確認します。nullまたは空の場合、メソッドは例外をスローします。

1.7.3 com.bea.wlevs.configuration.Activate (@Activate)

Oracle Stream Analyticsサーバーは、@Prepare注釈が付いたすべてのメソッドをコールして正常に実行した後、@Activateで注釈されているメソッドをコールします。@Activateメソッドを使用して、残りのアダプタ実装で使用するアダプタ構成データを取得します。次の例では、HelloWorldの例のアダプタ・コンポーネントで@Activate注釈を使用する方法を示します。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Activate;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldAdapter implements RunnableBean, StreamSource {
...
@Activate
public void activateAdapter(HelloWorldAdapterConfig adapterConfig) {
this.message = adapterConfig.getMessage();
}
...
}

次の例は、このXSDファイルで結果のJava構成オブジェクトの完全修飾名(太字の部分)も指定されていることを示します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.bea.com/ns/wlevs/example/helloworld"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
targetNamespace="http://www.bea.com/ns/wlevs/example/helloworld"
elementFormDefault="unqualified" attributeFormDefault="unqualified"
jxb:extensionBindingPrefixes="xjc" jxb:version="1.0">
<xs:annotation>
<xs:appinfo>
<jxb:schemaBindings>
<jxb:package name="com.bea.wlevs.adapter.example.helloworld"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<xs:import namespace="http://www.bea.com/ns/wlevs/config/application"
schemaLocation="wlevs_application_config.xsd"/>
<xs:element name="config">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="adapter" type="HelloWorldAdapterConfig"/>
<xs:element name="processor" type="wlevs:DefaultProcessorConfig"/>
<xs:element name="channel" type="wlevs:DefaultStreamConfig" />
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="HelloWorldAdapterConfig">
<xs:complexContent>
<xs:extension base="wlevs:AdapterConfig">
<xs:sequence>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

Oracle Stream Analyticsは、アプリケーションのデプロイ時にこのクラスのインスタンスを作成します。たとえば、helloworldAdapterの構成ファイルのアダプタ・セクションは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<helloworld:config
...
<adapter>
<name>helloworldAdapter</name>
<message>HelloWorld - the current time is:</message>
</adapter>
</helloworld:config>

注釈付きのactivateAdapterメソッドは、構成オブジェクトのgetMessageメソッドを使用して、アダプタの構成XMLファイルに設定されているmessageプロパティの値を取得します。この例の場合、値はHelloWorld - the current time is:です。この値は、アダプタ実装ファイルの主要部分で使用できます。

1.7.4 com.bea.wlevs.configuration.Rollback (@Rollback)

Oracle Stream Analyticsサーバーは、@Prepareで注釈されているコンポーネントがコールされたが例外がスローされた場合は常に、@Rollbackで注釈されているメソッドをコールします。次の例は、HelloWorldの例のアダプタ・コンポーネントのもので、@Rollback注釈を使用する方法を示します。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Rollback;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.ede.api.StreamSender;
import com.bea.wlevs.ede.api.StreamSource;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;

public class HelloWorldAdapter implements RunnableBean, StreamSource {
@Rollback
...
public void rejectConfigurationChange(HelloWorldAdapterConfig adapterConfig) {
}

このサンプルでは、rejectConfigurationChangeメソッドに@Rollback注釈が付いています。つまり、これは@Prepareメソッドが例外を送出した場合に呼び出されるメソッドです。上記の例では、実際には何も起こりません。

2 アダプタおよびイベントBeanの拡張

XMLスキーマ定義(XSD)またはJava Architecture for XML Binding (JAXB)注釈を使用して、アダプタおよびイベントBeanのデフォルトの構成を拡張できます。

この章の内容は次のとおりです。

- 注釈

- XSDファイル

- コンポーネント構成へのアクセス

2.1 注釈

コンポーネントの構成を拡張する最も簡単で効率的な方法は、JAXB javax.xml.bind.annotationパッケージで指定されている注釈を使用して、カスタム・アダプタまたはイベントBean JavaBeanクラスに注釈を付けることです。詳細は、http://docs.oracle.com/javaee/7/api/javax/xml/bind/annotation/package-summary.htmlおよびhttps://jaxb.java.net/を参照してください。

注釈によるコンポーネント構成の拡張

1. カスタム・アダプタまたはイベントBean JavaBeanクラスを実装します。

2. カスタム・アダプタまたはイベントBeanの属性に注釈を付けて、javax.xml.bind.annotationパッケージの該当する注釈をコンポーネント構成に指定します。

重要なannotations from the javax.xml.bind.annotationパッケージには次のものが含まれます。注釈のないプロパティは、デフォルトでオプションの構成プロパティ(@XmlElement)になります。

- @XmlElement: プロパティは、コンポーネント構成のオプション部分です。

- @XmlElement(required=true): プロパティは、コンポーネント構成の必須部分です。

- @XmlTransient: プロパティは、コンポーネント構成の一部ではありません。

- @XmlJavaTypeAdapter: この注釈付きのプロパティ要素は、ほとんどのJavaデータ型に対応するカスタム処理を指定できます。

注意:

@XmlJavaTypeAdapterを拡張使用する場合は、独自のカスタム・スキーマを定義することを検討してください。「XSDファイル」を参照してください。

次の例では、次のことを指定するためのjavax.xml.bind.annotation注釈で注釈を付けたカスタム・アダプタ実装を示します。

- count: コンポーネント構成の一部ではありません。

- doit: コンポーネント構成の必須部分です。

- size: コンポーネント構成の必須部分です。howBigインスタンス・プロパティにマップします。

@XmlType(name="SampleAdapterConfig", namespace="http://www.oracle.com/ns/cep/config/sample")
public class SampleAdapterImpl implements Adapter {
@XmlTransient
private int count;

@XmlElement(name="size")
private int howBig;

@XmlElement(required=true)
private boolean doit;

...

public void setDoit(boolean doit) {
this.doit = doit;
}

public boolean getDoit() {
return doit;
}
}

3. 「コンポーネント構成へのアクセス」で説明するとおり、カスタム・アダプタまたはイベントBeanコード内で、拡張された構成にアクセスします。

4. アプリケーションのカスタム・コンポーネントを記述するコンポーネント構成XMLファイルを変更します。

詳細は、「カスタム・アダプタの構成」を参照してください。

5. アプリケーションのコンポーネントを記述するコンポーネント構成XMLファイルを作成する場合は、必ず拡張されたXSDファイルを説明として使用します。また、デフォルトのスキーマを使用するのではなく、このスキーマの名前空間を必ず指定するようにします。

次の例では、手順2のSampleAdapterImplカスタム・アダプタのコンポーネント構成ファイルを示します。

<?xml version="1.0" encoding="UTF-8"?>
<app:config
xmlns:app="http://www.bea.com/ns/wlevs/config/application"
xmlns:sample="http://www.oracle.com/ns/cep/config/sample"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.bea.com/ns/wlevs/config/application
http://www.bea.com/ns/wlevs/config/application/wlevs_application_config.xsd
http://www.oracle.com/ns/cep/config/sample
http://www.oracle.com/ns/cep/config/sample/ocep_sample_config.xsd">
<processor>
<name>clusterProcessor</name>
<rules>
<query id="clusterRule"><![CDATA[ select * from clusterInstream [Now] >
</query>
</rules>
</processor>
<sample:adapter>
<name>myadapter</name>
<config>
<size>15</size>      <!-- optional -->
<doit>true</doit>    <!-- required -->
</config>
</sample:adapter>
</app:config>

注意:

拡張コンポーネント構成スキーマでは、ネストされているconfig要素が必要です。

6. アプリケーションをパッケージ化し、デプロイします。

2.2 XSDファイル

XMLスキーマ定義(XSD)ファイルで、アダプタまたはイベントBean構成を拡張できます。新しい各要素にname属性が必要であること以外はほぼ制限なしで、必要な数のカスタム要素をXSDファイルに追加します。

名前空間を設定する場合にelementFormDefault="unqualified"を使用することで、ローカルで定義した要素に名前空間を含めず、グローバル要素でtargetNamespaceを利用することをお薦めします。これによって、接頭辞を過剰に付けなくても、スキーマ間の名前の競合を回避できます。詳細は、http://www.xfront.com/HideVersusExpose.htmlを参照してください。

アプリケーション・スキーマを拡張しないカスタム・スキーマを手動で生成することもできます。これによって、他のすべての要素を定義しなくても独自の名前空間でカスタム構成を作成できます。このメカニズムは、スキーマ生成後の注釈付けの方法と同様に機能します。

2.2.1 XSDファイルによるコンポーネント構成の拡張

1. 拡張されたアダプタまたはイベントBean構成を記述する新規XSDスキーマ・ファイルを作成します。

このXSDファイルには、コンポーネントを記述するのにOracle Stream Analyticsで定義されている組込みのXSDタイプを通常使用する場合でも、アプリケーションの他のコンポーネント(プロセッサやストリーム)の説明も含まれている必要があります。

「XSDファイルの作成」を参照してください。

2. アプリケーション・ビルド・プロセスの一部として、GlassFishリファレンス実装のcom.sun.tools.xjc.XJCTask AntタスクなどのJAXBバインディング・コンパイラを使用して、XSDスキーマ・タイプのJava表現を生成します。ユーザーの利便を図るために、このAntタスクはOracle Stream Analytics配布に含まれています。

次のサンプルbuild.xmlファイルは、この方法を示しています。

<property name="base.dir" value="." />
<property name="output.dir" value="output" />
<property name="sharedlib.dir" value="${base.dir}/../../../../../modules" />
<property name="wlrtlib.dir" value="${base.dir}/../../../../modules"/>
<path id="classpath">
<pathelement location="${output.dir}" />
<fileset dir="${sharedlib.dir}">
<include name="*.jar" />
</fileset>
<fileset dir="${wlrtlib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath refid="classpath" />
</taskdef>
<target name="generate" depends="clean, init">
<copy file="../../../../xsd/wlevs_base_config.xsd"
todir="src/main/resources/extension" />
<copy file="../../../../xsd/wlevs_application_config.xsd"
todir="src/main/resources/extension" />
<xjc extension="true" destdir="${generated.dir}">
<schema dir="src/main/resources/extension"
includes="helloworld.xsd"/>
<produces dir="${generated.dir}" includes="**/*.java" />
</xjc>
</target>

この例では、拡張されたXSDファイルはhelloworld.xsdです。helloworld.xsdはOracle Stream Analytics XSDファイルをインポートするため、ビルド・プロセスによってOracle Stream Analytics XSDファイル(wlevs_base_config.xsdおよびwlevs_application_config.xsd)がhelloworld.xsdファイルと同じディレクトリにコピーされます。

詳細は、https://jaxb.java.net/nonav/2.0.2/docs/xjcTask.htmlを参照してください。

3. 生成されたこれらのJavaファイルをクラスにコンパイルします。

4. コンパイルされたJavaクラス・ファイルをアプリケーション・バンドルにパッケージ化します。

5. カスタム・アダプタまたはイベントBeanをプログラミングします。

詳細は、「実装の基本」を参照してください。

6. 「コンポーネント構成へのアクセス」で説明するとおり、カスタム・アダプタまたはイベントBeanコード内で、拡張された構成にアクセスします。

7. アプリケーションのコンポーネントを記述するコンポーネント構成XMLファイルを作成する場合は、必ず拡張されたXSDファイルを説明として使用します。また、デフォルトのスキーマではなく、このスキーマの名前空間を必ず指定するようにします。

次の例では、「XSDファイルの作成」で作成したXSDのコンポーネント構成ファイルを示します。

<?xml version="1.0" encoding="UTF-8"?>
<helloworld:config
xmlns:helloworld="http://www.bea.com/xml/ns/wlevs/example/helloworld">
<adapter>
<name>helloworldAdapter</name>
<message>HelloWorld - the current time is:</message>
</adapter>
</helloworld:config>

2.2.2 XSDファイルの作成

新しいXSDファイルはwlevs_application_config.xsd XSDを拡張し、アダプタの新しい構成要素などの新しいカスタム情報を追加します。カスタム情報には標準のXSD構文を使用します。

「XSDスキーマ・ファイルの完全な例」のXSDを基本テンプレートとして使用し、ニーズに合わせてコンテンツを変更することをお薦めします。新しい構成要素を追加するとともに、他の変更点としては、生成されたJavaコードのパッケージ名の変更やカスタム・アダプタの要素名の変更などがあります。カスタム・アダプタのみ、またはプロセッサなどの他のコンポーネントをスキーマで使用するかどうかを制御できます。

新しいXSDファイルの作成

1. 必要な名前空間(特にJAXB用のもの)を使用して、基本のXSDファイルを作成します。次に例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.bea.com/xml/ns/wlevs/example/helloworld"
xmlns="http://www.bea.com/xml/ns/wlevs/example/helloworld"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
jxb:extensionBindingPrefixes="xjc" jxb:version="1.0"
elementFormDefault="unqualified" attributeFormDefault="unqualified">
...
</xs:schema>

2. wlevs_application_config.xsdファイルをインポートします。

<xs:import
namespace="http://www.bea.com/ns/wlevs/config/application"
schemaLocation="wlevs_application_config.xsd"/>

wlevs_application_config.xsdファイルは、wlevs_base_config.xsdファイルをインポートします。

3. complexType XSD要素を使用して、拡張されたアダプタ構成のXMLタイプを記述します。

新しいタイプは、wlevs_application_config.xsdに定義されたAdapterConfigタイプを拡張する必要があります。AdapterConfigはConfigurationObjectを拡張します。必要に応じて、基本のアダプタ構成に新しい要素または属性を追加できます。たとえば、次のタイプHelloWorldAdapterConfigは、基本のアダプタ構成にmessage要素を追加します。

<xs:complexType name="HelloWorldAdapterConfig">
<xs:complexContent>
<xs:extension base="wlevs:AdapterConfig">
<xs:sequence>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

4. トップレベル要素を定義し、configという名前にする必要があります。

config要素の定義では、アプリケーションのコンポーネントに対応する子要素のシーケンスを定義します。要素名には任意の名前を付けることができますが、通常は構成するコンポーネント(adapter、processor、channel)を示すようにします。

各要素は、明示的にbase属性値base:ConfigurationObjectでxs:extension要素を使用するか、またはConfigurationObjectを拡張するXMLタイプを指定するかによって、ConfigurationObject XMLタイプを拡張する必要があります。ConfigurationObject XMLタイプは、wlevs_base_config.xsdで定義され、nameという単一の属性を定義します。

アダプタ要素のタイプは、この方法の前述の手順で作成したカスタム・アダプタです。

プロセッサまたはストリームに対応するconfigの子要素には、wlevs_application_config.xsdに記述されている次の組込みXMLタイプを使用できます。

- DefaultProcessorConfig: デフォルト・プロセッサ構成の説明については、Oracle Stream Analytics Java APIリファレンスを参照してください。

- DefaultStreamConfig: デフォルト・チャネル構成の説明については、『Oracle Stream Analyticsによるイベント処理用アプリケーションの開発』を参照してください。

次に例を示します。

<xs:element name="config">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="adapter" type="HelloWorldAdapterConfig"/>
<xs:element name="processor" type="wlevs:DefaultProcessorConfig"/>
</xs:choice>
</xs:complexType>
</xs:element>

5. 必要に応じてjxb:schemaBindingsのjxb:package子要素を使用して、生成されたJavaコードのパッケージ名を指定します。

<xs:annotation>
<xs:appinfo>
<jxb:schemaBindings>
<jxb:package name="com.bea.adapter.wlevs.example.helloworld"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>

2.2.3 XSDスキーマ・ファイルの完全な例

次の拡張されたXSDファイルをテンプレートとして使用します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.bea.com/xml/ns/wlevs/example/helloworld"
xmlns="http://www.bea.com/xml/ns/wlevs/example/helloworld"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
jxb:extensionBindingPrefixes="xjc" jxb:version="1.0"
elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xs:annotation>
<xs:appinfo>
<jxb:schemaBindings>
<jxb:package name="com.bea.adapter.wlevs.example.helloworld"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<xs:import namespace="http://www.bea.com/ns/wlevs/config/application"
schemaLocation="wlevs_application_config.xsd"/>
<xs:element name="config">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="adapter" type="HelloWorldAdapterConfig"/>
<xs:element name="processor" type="wlevs:DefaultProcessorConfig"/>
<xs:element name="channel" type="wlevs:DefaultStreamConfig"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="HelloWorldAdapterConfig">
<xs:complexContent>
<xs:extension base="wlevs:AdapterConfig">
<xs:sequence>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

2.3 コンポーネント構成へのアクセス

アプリケーションをデプロイする場合、Oracle Stream Analyticsでは、コンポーネント構成ファイルに指定された各コンポーネントの構成が、JAXB標準に準拠したJavaオブジェクトにマップされます。各コンポーネントの構成データは単一のXML要素に含まれるため、JAXBでもこの構成データを表現する単一のJavaクラスが生成されます。コンポーネントの初期化時およびコンポーネントの構成が動的に変更されるたびに、Oracle Stream Analyticsでは実行時にこのJavaクラスのインスタンスがコンポーネント(プロセッサ、チャネルまたはアダプタ)に渡されます。

このコンポーネント構成には、実行時に次の方法でアクセスできます。

- 「リソース・インジェクション」で説明するとおり、リソース・インジェクションを使用します。
これは実行時の、最も簡単で効率的なコンポーネント構成へのアクセス方法です。

- 「ライフサイクル・コールバック」で説明するとおり、コールバックを使用します。
これは、実行時にコンポーネント構成にアクセスするための最も柔軟な方法です。リソース・インジェクションがニーズに合わない場合は、このオプションを検討してください。

注意:

プロバイダからのスキーマを使用する必要があるクライアントは、プロバイダのバンドルから適切なパッケージをインポートし、プロバイダのObjectFactoryがクライアント・バンドルに表示されるようにする必要があります。

2.3.1 リソース・インジェクション

デフォルトでは、Oracle Stream AnalyticsはそのJavaBeanプロパティの直接インジェクション、およびその後の通常の構成コールバックにより、アダプタおよびイベントBeanを構成します。

注釈を付けられたカスタム・アダプタ実装を検討します。

@XmlType(name="SampleAdapterConfig", namespace="http://www.oracle.com/ns/cep/config/sample")
public class SampleAdapterImpl implements Adapter {
private boolean doit;

public void setDoit(boolean doit) {
this.doit = doit;
}

public boolean getDoit() {
return doit;
}
}

このカスタム・アダプタのインスタンスの構成ファイルを検討します。

<?xml version="1.0" encoding="UTF-8"?>
<app:config
xmlns:app="http://www.bea.com/ns/wlevs/config/application"
xmlns:sample="http://www.oracle.com/ns/cep/config/sample"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.bea.com/ns/wlevs/config/application
http://www.bea.com/ns/wlevs/config/application/wlevs_application_config.xsd
http://www.oracle.com/ns/cep/config/sample
http://www.oracle.com/ns/cep/config/sample/ocep_sample_config.xsd">
<processor>
<name>clusterProcessor</name>
<rules>
<query id="clusterRule"><![CDATA[ select * from clusterInstream [Now] ></query>
</rules>
</processor>
<sample:adapter>
<name>myadapter</name>
<config>
<doit>true</doit>
</config>
</sample:adapter>
</app:config>

実行時に、Oracle Stream Analyticsは、アダプタ・インスタンスのsetDoItメソッドをコールし、引数の値として値trueを渡します。

注意:

拡張コンポーネント構成スキーマでは、ネストされているconfig要素が必要です。

2.3.2 ライフサイクル・コールバック

アダプタまたはイベントBean実装では、メタデータ注釈を使用して、実行時にOracle Stream Analyticsで起動されるJavaメソッドを指定できます。Oracle Stream Analyticsは、構成Javaクラスのインスタンスを、指定したそれらのメソッドに渡します。これらのメソッドをプログラミングし、アダプタまたはイベントBeanについて特定の実行時の構成情報を取得できます。

次の例では、アダプタ構成が最初に有効化されたときに起動されるメソッドを指定するよう、@Activate注釈でactivateAdapterメソッドに注釈を付ける方法を示します。

@Activate
public void activateAdapter(HelloWorldAdapterConfig adapterConfig) {
this.message = adapterConfig.getMessage();
}

デフォルトでは、アダプタ構成のJavaクラスのデータ型はcom.bea.wlevs.configuration.application.DefaultAdapterConfigです。構成XMLファイルを記述する独自のXSDファイルを作成してアダプタ(またはイベントBean)の構成を拡張した場合は、XSDファイルで型を指定します。上記の例では、Java構成オブジェクトのデータ型はcom.bea.wlevs.example.helloworld.HelloWorldAdapterConfigです。

2.3.3 ライフサイクル・コールバック注釈

次のメタデータ注釈を使用して、ライフサイクル・コールバック・メソッドを指定できます。

- com.bea.wlevs.management.Activate: 構成がアクティブ化されたときに起動されるメソッドを指定します。

- com.bea.wlevs.management.Prepare: 構成が準備されたときに起動されるメソッドを指定します。アダプタ・コードでこの注釈を使用する方法の詳細は、Oracle Stream Analyticsイベント処理スタート・ガイドを参照してください。

- com.bea.wlevs.management.Rollback: 例外が原因でアダプタが停止した場合に起動されるメソッドを指定します。

2.3.4 アダプタおよびイベントBeanのライフサイクル

Oracle Stream Analyticsでは次のライフ・サイクルを使用してアダプタおよびイベントBeanを作成します。

1. アダプタまたはイベントBeanインスタンスを作成します。

2. 静的プロパティをインジェクトします。

3. afterPropertiesSetメソッドをコールします。

4. フェーズを準備します。

a. 1つ以上の構成引数のある@Prepareがある場合は、これを呼び出します。ない場合は、構成プロパティを直接インジェクトします。

b. 引数のない@Prepareがある場合は、これを呼び出します。

5. フェーズをアクティブ化します。

a. 1つ以上の構成引数のある@Activateがある場合は、これを呼び出します。

b. 引数のない@Activateがある場合は、これを呼び出します。

6. afterConfigurationActiveを呼び出します。

7. その他の構成で続行します。

3 アダプタおよびイベントBeanファクトリ

アダプタまたはイベントBeanファクトリ・クラスを実装して構成することで、複数のEPNで単一のカスタム・アダプタまたはイベントBean実装を使用できます。このファクトリ・クラスは、アダプタまたはイベントBeanオブジェクトを、その要求元Oracle Stream Analyticsアプリケーションに対してインスタンス化します。

ここで説明しているAPIの詳細は、Oracle Stream Analytics Java APIリファレンスを参照してください。

この章の内容は次のとおりです。

- アダプタ・ファクトリの作成

- イベントBeanファクトリの作成

3.1 アダプタ・ファクトリの作成

1. アダプタ・クラスでは、アダプタがファクトリで返されるよう、com.bea.wlevs.ede.api.Adapterインタフェースを実装します。
これはマーカー・インタフェースなので、メソッドは実装されません。

public class BusStopAdapter implements Adapter, StreamSource {
// Adapter implementation code.
}

2. com.bea.wlevs.ede.api.AdapterFactoryインタフェースを実装するアダプタ・ファクトリ・クラスを作成します。
createメソッドは、カスタム・アダプタのインスタンスを作成して返します。

import com.oracle.cep.sample.spatial.BusStopAdapter;
import com.bea.wlevs.ede.api.AdapterFactory;

public class BusStopAdapterFactory implements AdapterFactory {
public BusStopAdapterFactory() {}
public synchronized BusStopAdapter create() throws IllegalArgumentException {
// Your code might have a particular way to create the instance.
return new BusStopAdapter();
}
}

3. アセンブリ・ファイルで、wlevs:factory要素を使用してファクトリ・クラスを登録します。

<wlevs:factory provider-name="busStopAdapterProvider"
class="com.oracle.cep.sample.spatial.BusStopAdapterFactory"/>

4. osgi:service要素を使用して、アセンブリ・ファイルにOSGiサービスとしてファクトリを登録します。
OSGiサービス・レジストリの範囲はOracle Stream Analytics全体です。特定のサーバーにデプロイされた複数のアプリケーションが同じアダプタ・ファクトリを使用する場合は、ファクトリをOSGiサービスとして1回登録します。

a. エントリを追加して、サービスをcom.bea.wlevs.ede.api.AdapterFactoryインタフェースの実装として登録します。key属性にtypeを指定し、このアダプタ・プロバイダを参照する名前を使用して、プロパティを指定します。

b. ネストした標準のSpring bean要素を追加して、Springアプリケーション・コンテキストで特定のアダプタ・クラスを登録します。

<osgi:service interface="com.bea.wlevs.ede.api.AdapterFactory">
<osgi:service-properties>
<entry key="type" value="busStopAdapterProvider"</entry>
</osgi:service-properties>
<bean class="com.oracle.cep.sample.spatial.BusStopAdapterFactory" />
</osgi:service>

5. 次の例に示すとおり、(アダプタをクラス名で指定するのではなく)構成したファクトリをプロバイダとして指定し、アダプタのインスタンスを使用するアプリケーションでアダプタを構成します。

<wlevs:adapter id="BusStopAdapter"
provider="busStopAdapterProvider">
// ...
</wlevs:adapter>

3.2 イベントBeanファクトリの作成

1. イベントBeanクラスでは、Beanがファクトリで返されるよう、com.bea.wlevs.ede.api.EventBeanインタフェースを実装します。
これはマーカー・インタフェースなので、メソッドは実装されません。

public class TradeListener implements EventBean, StreamSink {
// Bean implementation code.
}

2. com.bea.wlevs.ede.api.EventBeanFactoryインタフェースを実装するイベントBeanクラスを作成します。
createメソッドは、イベントBeanのインスタンスを作成して返します。

import com.oracle.cep.example.tradereport.TradeListener;
import com.bea.wlevs.ede.api.EventBeanFactory;

public class TradeListenerFactory implements EventBeanFactory {
public TradeListenerFactory() { }
public synchronized TradeListener create() throws IllegalArgumentException {
// Your code might have a particular way to create the instance.
return new TradeListener();
}
}

3. アセンブリ・ファイルで、wlevs:factory要素を使用してファクトリ・クラスを登録します。

<wlevs:factory provider-name="tradeListenerProvider"
class="com.oracle.cep.example.tradereport.TradeListenerFactory"/>

4. osgi:service要素を使用して、アセンブリ・ファイルにOSGiサービスとしてファクトリを登録します。
OSGiサービス・レジストリの範囲はOracle Stream Analytics全体です。特定のサーバーにデプロイされた複数のアプリケーションが同じアダプタ・ファクトリを使用する場合は、ファクトリをOSGiサービスとして1回登録します。

a. エントリを追加して、サービスを com.bea.wlevs.ede.api.EventBeanFactoryインタフェースの実装として登録します。key属性にtypeを指定し、このアダプタ・プロバイダを参照する名前を使用して、プロパティを指定します。

b. ネストした標準のSpring bean要素を追加して、Springアプリケーション・コンテキストで特定のアダプタ・クラスを登録します。

<osgi:service interface="com.bea.wlevs.ede.api.EventBeanFactory">
<osgi:service-properties>
<entry key="type" value="tradeListenerProvider"</entry>
</osgi:service-properties>
<bean class="com.oracle.cep.example.tradereport.TradeListenerFactory" />
</osgi:service>

5. 次の例に示すとおり、(Beanをクラス名で指定するのではなく)構成したイベントBeanファクトリをプロバイダとして指定し、イベントBeanのインスタンスを使用するアプリケーションでイベントBeanを構成します。

<wlevs:event-bean id="TradeListenerBean" provider="tradeListenerProvider">

4 アダプタまたはイベントBeanのアセンブル

通常、カスタム・アダプタおよびイベントBeanは、他のEPNコンポーネントが含まれる同じアプリケーションJARファイルにバンドルします。あるいは、カスタム・アダプタとそのファクトリまたはイベントBeanとそのファクトリを独自の個別のJARファイルにバンドルし、他のアプリケーション・バンドルから参照することもできます。

たとえば、2つの異なるアプリケーションが同じデータ・フィード・プロバイダから受け取ったデータを読み取り、両方のアプリケーションに同じイベント・タイプが存在するとき、1つのアダプタ実装を共有すると有効な場合があります。この場合、2つの異なるアプリケーションでカスタム・アダプタ実装を複製する必要がなくなります。

この章の内容は次のとおりです。

- 独自のバンドルでのカスタム・アダプタのアセンブル

- 独自のバンドルでのイベントBeanのアセンブル

4.1 独自のバンドルでのカスタム・アダプタのアセンブル

カスタム・アダプタを独自のバンドルでアセンブルする場合、アセンブリ・ファイルでwlevs:adapter要素を使用してそれを宣言しないでください。この要素は、カスタム・アダプタを使用するアプリケーション・バンドルのアセンブリ・ファイルで宣言に使用します。

1. Javaクラスのカスタム・アダプタ・クラス、そのJavaBeanイベント・タイプ・クラスおよびそのアダプタ・ファクトリ・クラスが含まれるOSGIバンドルを作成します。

この手順では、バンドルはGlobalAdapterと呼ばれます。

2. GlobalAdapterバンドル・アセンブリ・ファイルで次の手順を実行します。

- アダプタ・ファクトリをOSGiサービスとして登録します。

- カスタム・アダプタのJavaBeanイベント・タイプ・クラスをOSGiサービスとして登録します。

3. MANIFEST.MFで、Export-Packageヘッダーを付けてJavaBeanイベント・タイプ・クラスをエクスポートします。

4. GlobalAdapterバンドルをアセンブルしてデプロイします。

5. カスタム・アダプタを使用するアプリケーションのアセンブリ・ファイルで、「カスタム・アダプタの構成」の説明に従って、カスタム・アダプタ・コンポーネントを宣言します。

引き続きprovider属性を使用してOSGI登録済アダプタ・ファクトリを指定しますが、この場合、OSGi登録は、アダプタを実際に使用するアセンブリ・ファイルとは別の(GlobalAdapterバンドルの)アセンブリ・ファイルで行います。

6. JavaBeanイベント・タイプをGlobalAdapterバンドルにエクスポートしている場合は、それを使用するアプリケーションに明示的にインポートする必要があります。

これを行うには、アプリケーション・バンドルのMANIFEST.MFファイルのImport-Packageヘッダーにパッケージを追加します。

4.2 独自のバンドルでのイベントBeanのアセンブル

イベントBeanを独自のバンドルでアセンブルする場合、アセンブリ・ファイルでwlevs:event-bean要素を使用してそれを宣言しないでください。この要素は、カスタム・イベントBeanを使用するアプリケーション・バンドルのアセンブリ・ファイルで宣言に使用します。

1. JavaクラスのイベントBean JavaクラスおよびそのイベントBeanファクトリ・クラスが含まれるOSGiバンドルを作成します。

この手順では、バンドルはGlobalEventBeanと呼ばれます。

2. GlobalEventBeanアセンブリ・ファイルで、イベントBeanファクトリをOSGiサービスとして登録します。

3. GlobalEventBeanバンドルをアセンブルしてデプロイします。

4. イベントBeanを使用するアプリケーションのアセンブリ・ファイルで、カスタム・イベントBeanコンポーネントを宣言します。

引き続きprovider属性を使用してOSGi登録済イベントBeanファクトリを指定しますが、この場合、OSGi登録は、イベントBeanを実際に使用するアセンブリ・ファイルとは別の(GlobalEventBeanバンドルの)アセンブリ・ファイルで行います。

5 カスタム・イベント・ストア・プロバイダ

カスタム永続イベント・ストアを作成して、記録したイベントを格納できます。たとえば、永続イベント・ストアとしてOracle DatabaseやDerbyなどのリレーショナル・データベース管理システム(RDBMS)を指定できます。

この章の内容は次のとおりです。

- イベント・ストアAPI

- インタフェース。

5.1 イベント・ストアAPI

Oracle Stream Analyticsは、カスタム・イベント・ストアを作成するために使用できるイベント・ストアAPIを備えています。OracleはRDBMSベースの実装を提供しており、リレーショナル・データベースにイベントを格納するため、またはJDBC接続をサポートするために使用できます。別の種類のデータベースにイベントを格納する場合またはOracle RDBMSプロバイダがニーズを満たさない場合は、イベント・ストアAPIを使用して独自のイベント・ストア・プロバイダを作成できます。

5.2 インタフェース

イベント・ストアAPIは、com.bea.wlevs.eventstoreパッケージにあります。次のリストは、最も重要なインタフェースについて説明しています。

- EventStore: 1つのイベント・ストアを表します。メソッドを使用すると、イベントをストアに保持し、プロバイダ固有の問合せを使用してイベント・ストアに問合せできます。

- EventStoreManager: イベント・ストアを管理します。EventStoreManagerの1つのインスタンスは、特定のOracle Stream Analyticsサーバー上に存在できます。イベント・ストア・プロバイダがイベント・ストア・マネージャに登録できるように、このインスタンスをOSGiレジストリに登録します。このインタフェースを使用して、既存のイベント・ストアの検出、新しいイベント・ストアの作成、特定のイベント・ストアのプロバイダの取得およびイベント・プロバイダの登録を行います。イベント・ストア・マネージャは、作業をイベント・ストア・プロバイダに委任します。

- EventStoreProvider: イベント・ストア・サービスをクライアントに提供する、基礎となるリポジトリ。

詳細は、Oracle Stream Analytics Java APIリファレンスを参照してください。

オラクルの法律上の注意点について

コピーライトについて

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

アルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のアルファ版およびベータ版ドラフト・ドキュメントについて

このドキュメントが非公開の試作版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のベータ・トライアル契約のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle PartnerNetwork Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティについて

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。