プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle CQLデータ・カートリッジによるアプリケーションの開発
12c リリース(12.1.3)
E57539-03
目次へ移動
目次

前
前へ
次
次へ

2 Oracle JDBCカートリッジおよびOracle Spatialデータ・カートリッジ

この章では、Oracle Event Processingで使用するOracle Continuous Query Language (CQL)を拡張するOracle JDBCカートリッジおよびOracle Spatialデータ・カートリッジの構成方法を説明します。

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

2.1 Oracle空間アプリケーション・コンテキストの構成方法

Oracle Event ProcessingアプリケーションのEvent Processing Network (EPN)アセンブリ・ファイルのspatial:context要素を使用して、Oracle Spatialのインスタンスのアプリケーション・コンテキストを定義します。

com.oracle.cartridge.spatial.GeometryからのすべてのコンストラクタとメソッドおよびOracle Spatial機能は、spatial:contextを認識します。たとえば、SRIDがOracle Spatialアプリケーション・コンテキストの値から自動的に設定されます。

詳細は、Oracle Spatial開発者ガイド(http://download.oracle.com/docs/cd/E11882_01/appdev.112/e11830/sdo_objrelschema.htm#SPATL492)の「SDO_SRID」を参照してください。

Oracle Spatialアプリケーション・コンテキストを構成する手順:

  1. Oracle JDeveloperで、EPNダイアグラムを開きます。
  2. com.oracle.cep.cartridge.spatialパッケージをOracle Event ProcessingアプリケーションのMANIFEST.MFファイルにインポートします。
  3. EPNノードを右クリックして、Spatialコンテキストの構成新規Spatialコンテキストの順に選択します。
  4. 次のようにEPNファイルを編集して、必要なネームスペースおよびスキーマの場所のエントリを追加します。
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:osgi="http://www.springframework.org/schema/osgi"
           xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
           xmlns:spatial="http://www.oracle.com/ns/ocep/spatial"
           xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/osgi
      http://www.springframework.org/schema/osgi/spring-osgi.xsd
      http://www.bea.com/ns/wlevs/spring
      http://www.bea.com/ns/wlevs/spring/ocep-epn.xsd  
    http://www.oracle.com/ns/ocep/spatial
      http://www.oracle.com/ns/ocep/spatial/ocep-spatial.xsd">
    
  5. 次のように、EPNファイルを編集してspatial:context要素を追加します。
    <spatial:context id="SpatialGRS80" />
    
  6. このEPN内で一意の値をid属性に割り当てます。

    これは、以降のOracle CQL問合せで、このアプリケーション・コンテキストを参照するときに使用される名前です。

    注意:

    id値は、Oracle Spatial名のspatialと異なる必要がります。

  7. アプリケーション要件に応じて、spatial:context要素の他の属性を構成します。

    表2-1は、spatial:context要素の属性のリストを示します。

    表2-1 spatial:context要素の属性

    属性 説明

    anyinteract-tolerance

    containまたはinside演算子のデフォルトの許容度。

    デフォルト: 0.0000005

    rof

    バッファリングとプロジェクト化に使用するReciprocal Of Flattening (ROF)パラメータを定義します。

    デフォルト: 298.257223563

    sma

    バッファリングとプロジェクト化に使用するSemi-Major Axis (SMA)パラメータを定義します。

    デフォルト: 6378137.0

    srid

    SRID整数です。有効な値は次のとおりです。

    • CARTESIAN: 直交座標系の場合。

    • LAT_LNG_WGS84_SRID: WGS84座標系の場合。

    • Oracle Spatial SDO_COORD_SYS表のCOORD_SYS_ID列の整数値。

    デフォルト: LAT_LNG_WGS84_SRID

    tolerance

    バッファリングなどの幾何演算で無視される最短距離。

    デフォルト: 0.000000001

    次の例では、Geodetic Reference System 1980 (GRS80)座標系(srid="4269")を使用して、EPNアセンブリ・ファイルにSpatialGRS80という名前の空間コンテキストを作成する方法を説明します。

    <spatial:context id="SpatialGRS80" srid="4269" sma="63787.0" rof="298.25722101" />
    
  8. 名前によってこのアプリケーション・コンテキストを参照するOracle CQL問合せを作成します。

    次の例は、Oracle CQL問合せでspatial:contextを参照する方法を示しています。この場合、問合せでリンク名SpatialGRS80が使用され、このアプリケーション・コンテキストがOracle Spatialに伝播されます。SpatialGRS80spatial:context属性設定は、createPointメソッド・コールに適用されます。アプリケーション・コンテキストはSRIDを定義するため、createPointメソッドにその引数を渡す必要はありません。

    <view  id="createPoint">
        select com.oracle.cep.cartridge.spatial.Geometry.createPoint@SpatialGRS80(lng, lat, 0d)
        from CustomerPos[NOW]
    </view>
    

2.2 Oracle JDBCデータ・カートリッジ・アプリケーション・コンテキストの構成方法

次を使用して、Oracle JDBCデータ・カートリッジのインスタンスのアプリケーション・コンテキストを定義します。

  • EPNアセンブリ・ファイルのjdbc:jdbc-context要素

  • コンポーネント構成ファイルのjc:jdbc-ctx要素

    jc:jdbc-ctx要素では次のことが可能です。

    • jdbc:jdbc-contextを1つだけ参照する

    • data-sourceを1つだけ参照する

    • 1つ以上のSQL関数を定義する

注意:

SQL関数のすべてのSELECTリスト列に対して、別名を指定する必要があります。

Oracle JDBCデータ・カートリッジ・アプリケーション・コンテキストを構成する手順:

  1. Oracle JDeveloperでEPNエディタを開きます。
  2. EPNノードを右クリックし、「空間コンテキストの構成」「新規空間コンテキスト」の順に選択します。
  3. 次のようにEPNファイルを編集して、必要なネームスペースおよびスキーマの場所のエントリを追加します。
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:osgi="http://www.springframework.org/schema/osgi"
           xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
           xmlns:jdbc="http://www.oracle.com/ns/ocep/jdbc"
           xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/osgi
      http://www.springframework.org/schema/osgi/spring-osgi.xsd
      http://www.bea.com/ns/wlevs/spring
     http://www.bea.com/ns/wlevs/spring/ocep-epn.xsd
      http://www.oracle.com/ns/ocep/jdbc
      http://www.oracle.com/ns/ocep/jdbc/ocep-jdbc.xsd">
    
  4. 次のように、EPNファイルを編集してjdbc:jdbc-context要素を追加します。
    <jdbc:jdbc-context id="JdbcCartridgeOne"/>
    
  5. このEPN内で一意の値をid属性に割り当てます。

    これは、以降のOracle CQL問合せで、このアプリケーション・コンテキストを参照するときに使用される名前です。

    注意:

    id値は、Oracle JDBCデータ・カートリッジ名のjdbcと異なる必要があります。

  6. 必要なプロセッサを右クリックし、「構成のソースに移動」を選択します。
  7. 次のように、コンポーネント構成ファイルを編集して、必要なネームスペース・エントリを追加します。
    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config
        xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jc="http://www.oracle.com/ns/ocep/config/jdbc
        xsi:schemaLocation="
           http://www.oracle.com/ns/ocep/config/jdbc
           http://www.oracle.com/ns/ocep/config/jdbc/ocep_jdbc_context_config.xsd">
    
  8. 次のように、コンポーネント構成ファイルを編集してjc:jdbc-ctx要素を追加します。
    <jc:jdbc-ctx>
    </jc:jdbc-ctx>
    
  9. 次のように、name子要素を追加します。この値は、EPNアセンブリ・ファイルで定義したOracle JDBCアプリケーション・コンテキストの名前です。
    <jc:jdbc-ctx>
        <name>JdbcCartridgeOne</name>
    </jc:jdbc-ctx>
    
  10. data-source子要素を追加します。この値はOracle Event Processingサーバーのconfig.xmlファイルで定義したデータ・ソースの名前です。

    次の例は、StockDSという名前のデータ・ソースを指定する方法を示しています。

    <jc:jdbc-ctx>
        <name>JdbcCartridgeOne</name> 
        <data-source>StockDS</data-source>
    </jc:jdbc-ctx>
    
    
  11. 次のように、function子要素を使用して、1つ以上のSQL関数を作成します。
    <jc:jdbc-ctx>
        <name>JdbcCartridgeOne</name> 
        <data-source>StockDS</data-source>
        <function name="getDetailsByOrderIdName">
            <param name="inpOrderId" type="int" />
            <param name="inpName" type="char" />
            <return-component-type>
                com.oracle.cep.example.jdbc_cartridge.RetEvent
            </return-component-type>
            <sql><![CDATA[
                SELECT
                    Employee.empName as employeeName,
                    Employee.empEmail as employeeEmail,
                    OrderDetails.description as description
                FROM
                     PlacedOrders, OrderDetails , Employee
                WHERE
                    PlacedOrders.empId = Employee.empId AND
                    PlacedOrders.orderId = OrderDetails.orderId AND
                    Employee.empName = :inpName AND
                    PlacedOrders.orderId = :inpOrderId
            ></sql>
        </function>
    </jc:jdbc-ctx>
    

    注意:

    SQL問合せのすべてのSELECTリスト列に対して、別名を指定する必要があります。

  12. Oracle JDBCデータ・カートリッジ・アプリケーション・コンテキストを使用して、SQL関数を起動するOracle CQL問合せを作成します。

    次の例は、Oracle CQL問合せでjdbc:jdbc-contextを参照する方法を示しています。この場合、問合せでリンク名JdbcCartridgeOneが使用され、このアプリケーション・コンテキストがOracle JDBCデータ・カートリッジに伝播されます。Oracle CQL問合せで、Oracle JDBCデータ・カートリッジ・コンテキストJdbcCartridgeOneで定義したgetDetailsByOrderIdName関数が呼び出されます。

    <processor>
            <name>Proc</name>
            <rules>
                <query id="q1"><![CDATA[
                    RStream(
                       select
                         currentOrder.orderId,
                         details.orderInfo.employeeName,
                         details.orderInfo.employeeemail,
                         details.orderInfo.description
                       from
                         OrderArrival[now] as currentOrder,
                         TABLE(getDetailsByOrderIdName@JdbcCartridgeOne(
                                   currentOrder.orderId, currentOrder.empName
                               ) as orderInfo
                         ) as details
                    )
                ></query>
            </rules>
    </processor>