ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Adaptive Access Manager開発者ガイド
11gリリース2 (11.1.2.2)
B71697-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

18 Java Message Serviceキュー(JMSQ)の統合

複数のアプリケーションやデータ・ソースを必要とするアクセス監視要件のあるカスタマは、セキュリティおよびコンプライアンスについて率先した姿勢で措置を講じることができるようになりました。付属のJava Message Service Queue (JMSQ)を使用すると、カスタマはほぼリアルタイムのリスク分析を実装できるため、疑わしい不正や誤用を積極的に特定できます。

この章では、OAAMとJava Message Service Queue (JMSQ)の非同期統合の統合方法について説明します。この章の内容は、次のとおりです。

18.1 JMS定義

表18-1に、JMSの用語と定義を示します。Java Message Serviceの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JMSの構成と管理』を参照してください。

表18-1 JMS定義

用語 定義

メッセージング

メッセージングは、ソフトウェア・コンポーネントまたはアプリケーション間の通信方法です。メッセージング・システムは、peer-to-peerの機能です。メッセージング・クライアントは、別のクライアントにメッセージを送信したり、そこからメッセージを受信したりできます。各クライアントは、メッセージの作成、送信、受信および読取り機能を提供するメッセージング・エージェントに接続します。メッセージングによって、疎結合な分散通信が可能です。コンポーネントが宛先にメッセージを送信し、受信者がメッセージを宛先から取得します。通信する際には、送信者と受信者の両方が同時に使用可能である必要はありません。実際、送信者は受信者に関する情報を知る必要はなく、また受信者も送信者に関する情報を知る必要はありません。送信者と受信者が知る必要があるのは、使用するメッセージの書式と宛先のみです。メッセージングは、人との間、またはソフトウェア・アプリケーションと人との間の通信方式である電子メール(Eメール)とも異なります。メッセージングは、ソフトウェア・アプリケーションまたはソフトウェア・コンポーネント間の通信に使用されます。

Java Message Service (JMS)

Java Message Service (JMS)は、アプリケーションによるメッセージの作成、送信、受信および読取りを可能にするJava APIです。これには、信頼できる非同期の疎結合通信が使用されます。JMS APIには、共通のインタフェースおよび関連するセマンティックが定義されており、Javaプログラミング言語で書かれたプログラムと他のメッセージングの実装との通信を可能にします。

JMSキュー

JMSキューは、ソフトウェアまたはアプリケーションが非同期に情報を交換できるメッセージ・キューです。各メッセージは特定のキューに送信され、受信するクライアントはメッセージを保持するために確立されたキューからメッセージを抽出します。メッセージが消費されるか、または期限が切れるまで、キューに送信されたすべてのメッセージがキューに保持されます。

JNDI

JNDIは、Javaネーミングおよびディレクトリ・サービスです。JNDIの名前を使用してJMSキューにアクセスできます。

JMSキュー宛先

アプリケーションはメッセージをキューに送信します。プロバイダは、OAAMがメッセージを受信するまで、メッセージごとにコピーを1つ格納しています。

JMSリスナー

JMSリスナーは、XML形式のメッセージに関してJMSキューをリスニングするように構成されています。クライアントは、コンシューマでメッセージ・リスナーを登録できます。メッセージ・リスナーは、イベント・リスナーと類似しています。メッセージが宛先に到達するたびにJMSプロバイダはメッセージを配信し、メッセージの内容が処理されます。メッセージ形式の詳細は、第18.4.2項「メッセージの書式のXMLスキーマの例」のXMLスキーマを参照してください。

OAAM JMSメッセージ

OAAM JMSメッセージのコンテンツは、Oracle Adaptive Access ManagerのWeb Services APIコールと類似しています。メッセージ形式の詳細は、第18.4.2項「メッセージの書式のXMLスキーマの例」のXMLスキーマを参照してください。


18.2 非同期統合オプションのインストール

表18-2に、非同期統合オプションのインストールに関するタスクのサマリーを示します。

表18-2 非同期統合オプションのインストール

番号 タスク 情報

1

前提条件をレビューします。

詳細は、前提条件を参照してください。

2

非同期統合オプションをインストールします。

詳細は、「非同期統合オプションのインストール」を参照してください。

3

JMSキューを設定します。

詳細は、「JMSキューの設定」を参照してください。

4

OAAM拡張ライブラリを更新します。

詳細は、「OAAM拡張ライブラリの更新」を参照してください。

5

データベースを更新します。

詳細は、「OAAMデータベースの更新」を参照してください。


18.2.1 前提条件

継続する前に、Oracle Adaptive Access Manager 11gのインストールと構成が完了していることを確認してください。この項では、非同期統合オプションのインストールに必要な手順について説明します。

非同期統合オプションには、Oracle Business Intelligence Publisherのレポート・テンプレートとしての様々なレポートが含まれています。非同期統合オプションをインストールする前に、Oracle Business Intelligence Publisherのインストールと構成が完了していることを確認してください。Oracle Business Intelligence Publisherのインストール方法の詳細は、Oracle Fusion Middleware Oracle Business Intelligenceインストレーション・ガイドを参照してください。

18.2.2 非同期統合オプションのインストール

非同期統合オプションには、osg_integration_kit.zipファイルが含まれています。

非同期統合オプションをインストールするには、次の手順を実行します。

  1. OAAMがインストールされているマシン上で、osg_installという作業ディレクトリを作成します。このフォルダは、インストール・ディレクトリ以外であればどこにでも作成できます。

  2. osg_integration_kitディレクトリをosg_installディレクトリ内に作成します。

  3. IAM_Home/oaam/oaam_extensions/genericディレクトリに格納されているosg_integration_kit.zipを特定します。

  4. osg_integration_kit.zipのコンテンツをosg_install/osg_integration_kitディレクトリに抽出します。

18.2.3 OAAM拡張ライブラリの更新

非同期実行機能は、Oracle Adaptive Access Managerの拡張として実装されています。次の手順に従って、デフォルトの拡張ライブラリを置換します。

  1. Oracle Adaptive Access Managerサーバーを停止します。たとえば、oaam_server_server1oaam_admin_server1

  2. Oracle Adaptive Access ManagerがデプロイされているWebLogic Serverを起動して、Oracle WebLogic管理コンソールにログインします。

  3. 「ロックして編集」をクリックします。

  4. 「oracle.oaam.extensions」を選択し、「削除」をクリックします。

  5. ドメイン環境「デプロイメント」に移動して、コンソールをロックします。

  6. 「インストール」ボタンをクリックします。

  7. osg_oaam_extensions.warファイルの場所を参照し、WARファイルの横のオプションをクリックして選択します。その後、「次へ」をクリックします。

  8. 「このデプロイメントをライブラリとしてインストールする」が選択されていることを確認して、「次へ」をクリックします。

  9. すべてのOAAMサーバーをデプロイ先として選択します。たとえば、oaam_admin_server1oaam_server_server1

  10. 「次へ」を再度クリックしてこの次のページでデフォルトを受け入れ、「終了」をクリックします。

  11. 「保存」ボタンをクリックしてから、「変更のアクティブ化」をクリックします。

  12. 必要なすべてのOracle Adaptive Access Managerサーバーを開始します。

18.2.4 JMSキューの設定

OAAMは、統合メカニズムの1つとしてJMS (Java Message Service)キューを使用します。OAAMは、1つ以上のJMSキューでXMLメッセージをリスニングします。たとえば、電子カルテ(EMR)は、OAAMサーバーで使用されるトランザクション詳細を送信するためにメッセージ・キューを必要とします。XMLスキーマとリスナー構成の詳細は、第18.3項「JMS統合」を参照してください。

osg_oaam_extension.warに含まれているデフォルトの構成では、OAAMは、t3://localhost:7001でJNDI名jms/oaamDefaultQueueのJMSキューにあるメッセージをリスニングします。第18.3「JMS統合」に示す詳細に従ってこの構成をレビューし、デプロイメントの必要に応じて更新します。

リスナー構成で指定されたJMSキューが存在し、アクティブであることを確認します。存在しないものがあれば、適切なWebLogic Serverにそれを作成してください。WebLogic ServerでのJMSキュー設定の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JMSの構成と管理』を参照してください。

18.2.5 OAAMデータベースの更新

エンティティとトランザクションのデータベース・ビューは、ルール条件とレポートで使用するために作成できます。これらのデータベース・ビューの詳細は、第18.5項「エンティティとトランザクションのデータベース・ビュー」を参照してください。OAAMデータベース・ユーザーのデータベース権限を更新し、ビューの作成や他のデータベース操作を行えるようにする必要があります。

必要な権限を付与するには、管理者の資格証明を使用してOracleデータベースにログインし、次のSQL文を実行してください。dev_oaamはOAAMデータベース・スキーマで置き換える必要があります。

grant create view to dev_oaam.

18.3 JMS統合

非同期デプロイメントでのJMSリスナーの実装によって、XML形式のメッセージ用のJMSキュー(またはトピック)をリスニングするようにOracle Adaptive Access Managerを構成できます。メッセージの書式の詳細は、第18.4.2項「メッセージの書式を表すXMLスキーマの例」に示すXMLスキーマを参照してください。パラメータの詳細は、『Oracle Fusion Middleware Oracle Adaptive Access Manager Java APIリファレンス』を参照してください。JMSメッセージのコンテンツは、OAAM WebサービスAPIのコールと類似しています。

18.3.1 WebサービスAPI

WebサービスAPIのサブセットで、JMSを通して使用できるものは次のとおりです。

18.3.2 JMS統合の図

次の図に、OAAMとのJMS統合の概要を示します。

図18-1 OAAMとのJMS統合

図18-1の説明が続きます
「図18-1 OAAMとのJMS統合」の説明

統合のフローは次のとおりです。

  1. アプリケーション(JMS送信者)がメッセージをJMSキューに送信します。アプリケーションは、JNDIネームスペースによってキュー宛先を識別します。

  2. キューイング・システムはJMS送信者からメッセージを受信して、そのメッセージを宛先にルーティングします。

  3. OAAMサーバーは、構成済JMSリスナーを使用してメッセージをリスニングします。

  4. メッセージは、メッセージ・プロセッサにより処理されます。

  5. 情報は、トランザクション・データまたはログイン・データとしてデータベースにロードされます。

  6. オフラインのログインおよびトランザクション・データに対してルールが実行されます。

18.3.3 JMSリスナーの登録

Oracle Adaptive Access Managerのプロパティとユーザー定義列挙を使用して、JMS統合の様々な要素を構成できます。ユーザー定義列挙の詳細は、第7.2項「列挙の編集によるOAAMのカスタマイズまたは拡張」を参照してください。

表18-3に、JMSの構成プロパティのリストを示します。監視するキュー(またはトピック)ごとに、ユーザー定義列挙oracle.oaam.jms.listeners.enumに列挙要素を追加して、1つのリスナーを構成する必要があります。リスナー・リストまたはプロパティを変更する場合は、リスナーが実行されているOAAMサーバーを再起動する必要があります。

表18-3 JMSの構成プロパティ

プロパティ名 説明

jms.message.processor.default.user

loginIdフィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。

デフォルト値: JmsDefaultUser

jms.message.processor.default.usergroup

groupIdフィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。

デフォルト値: default

jms.message.processor.default.ip

remoteIPAddrフィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。

デフォルト値: 127.0.0.1

jms.message.processor.default.clientver

clientVersionフィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。

デフォルト値: 1.0

jms.message.processor.default.authtype

clientTypeフィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。

デフォルト値:normal

jms.message.processor.default.sessionid

requestIdフィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。値が指定されていない場合は、「remoteIPAddr」フィールドを使用して生成された値が使用されます。

requestIdフィールドがcreateTransaction/updateEntity/processRulesメッセージに対して指定されていないときに1つのMessageListで複数のメッセージが送信された場合、前のupdateLogメッセージ(存在する場合)で使用したrequestIdが使用されます。

jms.message.processor.default.browser.fingerprint

fingerPrintフィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。

jms.message.processor.default.flash.fingerprint

fingerPrint2フィールドがVCryptTracker.updateLogメッセージに指定されていない場合は、このプロパティの値が使用されます。

oracle.oaam.jms.listeners.default.initial.cont ext.factory

初期コンテキスト・ファクトリを実装するJavaクラスの名前。この値は、Java Namingコンテキストの初期化に使用されます。

デフォルト値: weblogic.jndi.WLInitialContextFactory

oracle.oaam.jms.listeners.default.connection.factory

キュー/トピックの接続の作成に使用されるJMSコネクション・ファクトリのJNDI名。

デフォルト値: weblogic.jms.ConnectionFactory

oracle.oaam.jms.listeners.enum.lsnr_1

lsnr_1という名前の新規リスナーを定義します。リストされているプロパティを使用して、このリスナーに様々な属性を指定できます。

有効な値: この列挙で他のどの要素にも割り当てられていない整数

oracle.oaam.jms.listeners.enum. lsnr_1.type

リスナーがJMSキューまたはJMSトピックに接続するかどうかを指定します。

有効な値: queueまたはtopic

oracle.oaam.jms.listeners.enum. lsnr_1.url

キュー(またはトピック)の名前を解決するJNDIプロバイダのURL。

oracle.oaam.jms.listeners.enum.lsnr_1.jndiname

キューまたはトピックのJNDI名

oracle.oaam.jms.listeners.enum.lsnr_1.initial.context.factory

初期コンテキスト・ファクトリを実装するJavaクラスの名前。この値は、Java Namingコンテキストの初期化に使用されます。

デフォルト値: プロパティoracle.oaam.jms.listeners.default.initial.context.factoryの値

oracle.oaam.jms.listeners.enum.lsnr_1.connection.factory

キュー/トピックの接続の作成に使用されるJMSコネクション・ファクトリのJNDI名。

デフォルト値: プロパティoracle.oaam.jms.listeners.default.connection.factoryの値

oracle.oaam.jms.listeners.enum.lsnr_1.processor

メッセージ・プロセッサ・インタフェースを実装するJavaクラスの名前。このリスナーにより受信されるメッセージを処理するために、このクラスのインスタンスが作成されます。

デフォルト値: oracle.oaam.jms.JmsDefaultMessageProcessor

oracle.oaam.jms.listeners.enum.lsnr_1.instancecount

指定されたキュー/トピックからのメッセージを作成、処理するリスナーの数。

デフォルト値: 1


18.3.4 メッセージ・プロセッサの構成

Oracle Adaptive Access Managerのプロパティとユーザー定義列挙を使用して、メッセージ・プロセッサのプロパティを構成します。ユーザー定義列挙の詳細は、第7.2項「列挙の編集によるOAAMのカスタマイズまたは拡張」を参照してください。

OAAMのデフォルトのJMSメッセージ・プロセッサでは、タイプjavax.jms.TextMessageのみが処理されます。JMSメッセージ・プロセッサによって、その他のタイプのメッセージは無視されます。

その他のタイプのメッセージを処理するには、カスタム・プロセッサを実装する必要があります。これを行うには、oracle.oaam.jms.JmsAbstractMessageProcessorまたはoracle.oaam.jms.JmsDefaultMessageProcessorを拡張して、プロセッサをJmsListenerに関連付けます。

さらに、TextMessageのコンテキストが、第18.4.2項「メッセージの書式を表すXMLスキーマの例」に示すXMLスキーマに準拠したXML文字列であるかぎり、デフォルトのJMSメッセージ・プロセッサによる処理が行われます。

18.4 JMSメッセージ

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

18.4.1 JMSメッセージの例

この項では、JMSメッセージの例を示します。含まれる内容は、次のとおりです。

これらのメッセージの例には、メッセージでサポートされるすべてのデータ要素が含まれているわけではありません。サポートされるデータ要素の完全なリストは、第18.4.2項「メッセージの書式を表すXMLスキーマの例」を参照してください。

18.4.1.1 VCryptTracker.updateLog

VCryptTracker.updateLogメッセージは、Oracle Adaptive Access Managerでのユーザー・セッション(ログイン)の作成または更新に使用されます。requestIdデータ要素に値が指定されていない場合は、一意の値が生成され使用されます。

VCryptTracker.updateLogメッセージの例を次に示します。

<?xml version="1.0"?>
<OaamJmsMessage>
  <VCryptTracker.updateLog>
    <UpdateAuthResultRequest>
      <requestId>20110721_00_9004_terminal_1</requestId>
      <requestTime>07/21/2011 00:21:01</requestTime>
      <userId>9004</userId>
      <loginId>jjames</loginId>
      <isSecure>false</isSecure>
      <groupId>HealthcareUsers</groupId>
      <result>0</result>
      <clientType>10</clientType>
      <clientVersion>1.0</clientVersion>
      <remoteIPAddr>192.168.0.0</remoteIPAddr>
      <remoteHost>server.domain.com</remoteHost>
    </UpdateAuthResultRequest>
  </VCryptTracker.updateLog>
<OaamJmsMessage>

このメッセージは、OAAM API VCryptTracker.updateLog()に対するJMS等価です。データ要素(パラメータ)の詳細は、『Oracle Fusion Middleware Oracle Adaptive Access Manager Java APIリファレンス』を参照してください。

18.4.1.2 VCryptTracker.updateEntity

VCryptTracker.updateEntity メッセージは、Oracle Adaptive Access Managerでのユーザー定義のエンティティ・インスタンスの作成または更新に使用されます。

VCryptTracker.updateEntityメッセージの例を次に示します。

<?xml version="1.0"?>
<OaamJmsMessage>
  <VCryptTracker.updateEntity>
    <updateEntity>
      <entityDefKey>Patient</entityDefKey>
      <contexts>
        <context>
          <name>Patient_ID</name>
          <value>21600481</value>
        </context>
        <context>
          <name>MR_Number</name>
          <value>21600481</value>
        </context>
        <context>
          <name>Short_Name</name>
          <value>Jane</value>
        </context>
        <context>
          <name>Last_Name</name>
          <value>Celebrity</value>
        </context>
        <context>
          <name>First_Name</name>
          <value>Jane</value>
        </context>
        <context>
          <name>Phone_Number</name>
          <value>603.555.0100</value>
        </context>
        <context>
          <name>Email_Address</name>
          <value>Jane.Celebrity@hotmail.com</value>
        </context>
        <context>
          <name>Date_Of_Birth</name>
          <value>1979-05-12 00:00:00 -0800</value>
        </context>
        <context>
          <name>Confidential_Indicator</name>
          <value>true</value>
        </context>
        <context>
          <name>homeAddr.Line1</name>
          <value>6819 Park Blvd</value>
        </context>
        <context>
          <name>homeAddr.City</name>
          <value>Los Angeles</value>
        </context>
        <context>
          <name>homeAddr.State</name>
          <value>California</value>
        </context>
        <context>
          <name>homeAddr.Zip</name>
          <value>90001</value>
        </context>
        <context>
    </updateEntity>
  </VCryptTracker.updateEntity>
</OaamJmsMessage>

このメッセージは、OAAM API VCryptTracker.updateEntity()に対するJMS等価です。データ要素(パラメータ)の詳細は、『Oracle Fusion Middleware Oracle Adaptive Access Manager Java APIリファレンス』を参照してください。

18.4.1.3 VCryptTracker.createTransaction

VCryptTracker.createTransactionメッセージは、Oracle Adaptive Access Managerでのトランザクションの作成に使用されます。

VCryptTracker.createTransactionメッセージの例を次に示します。

<?xml version="1.0"?>
<OaamJmsMessage>
  <VCryptTracker.createTransaction>
    <createTransaction>
      <requestId>20110721_00_9004_terminal_1</requestId>
      <requestTime>07/21/2011 00:21:01</requestTime>
      <transactionDefKey>pat_rec_acc</transactionDefKey>
      <status>0</status>
      <contexts>
        <context>
          <name>Person_ID</name>
          <value>9004</value>
        </context>
        <context>
          <name>Patient_ID</name>
          <value>21600481</value>
        </context>
        <context>
          <name>Action</name>
          <value>View_Records</value>
        </context>
        <context>
          <name>Application_ID</name>
          <value>Healthcare_App</value>
        </context>
        <context>
          <name>Terminal_ID</name>
          <value>terminal_1</value>
        </context>
        <context>
          <name>Item_Key</name>
          <value>image-x-20110720-156</value>
        </context>
        <context>
          <name>Is_Restricted_Item</name>
          <value>false</value>
        </context>
        <contexts>
    </createTransaction>
  </VCryptTracker.createTransaction>
</OaamJmsMessage>

このメッセージは、OAAM API VCryptTracker.createTransaction()に対するJMS等価です。データ要素(パラメータ)の詳細は、『Oracle Fusion Middleware Oracle Adaptive Access Manager Java APIリファレンス』を参照してください。

18.4.1.4 VCryptRulesEngine.processRules

VCryptRulesEngine.processRulesメッセージは、OAAMルールの実行に使用されます。

VCryptRulesEngine.processRulesメッセージの例を次に示します。

<?xml version="1.0"?>
<OaamJmsMessage>
  <VCryptRulesEngine.processRules>
    <ProcessRulesRequest>
      <requestId>20110721_00_9004_terminal_1</requestId>
      <requestTime>07/21/2011 00:21:01</requestTime>
      <profileTypeList>
        <profileType>800</profileType>
      </profileTypeList>
      <contexts></contexts>
    </ProcessRulesRequest>
  </VCryptRulesEngine.processRules>
</OaamJmsMessage>

このメッセージは、OAAM API VCryptRulesEngine.processRules()に対するJMS等価です。データ要素(パラメータ)の詳細は、『Oracle Fusion Middleware Oracle Adaptive Access Manager Java APIリファレンス』を参照してください。

18.4.1.5 MessageList

MessageListメッセージは、1つのJMSメッセージで1つ以上のメッセージの送信に使用されます。

MessageListメッセージの例を次に示します。

<?xml version="1.0"?>
<OaamJmsMessage>
  <MessageList>
    <VCryptTracker.updateLog>
    </VCryptTracker.updateLog>

    <VCryptTracker.updateEntity>
    </VCryptTracker.updateEntity>

    <VCryptTracker.updateEntity>
    </VCryptTracker.updateEntity>

    <VCryptTracker.createTransaction>
    </VCryptTracker.createTransaction>

    <VCryptRulesEngine.processRules>
    </VCryptRulesEngine.processRules>
  </MessageList>
</OaamJmsMessage>

このメッセージは、1つのバッチで複数のOAAM APIコールをコールする場合のJMS等価です。

MessageListメッセージは、メッセージをバッチ処理するだけでなく、データ要素requestIdおよびtransactionLogIdに有用なデフォルト値を提供します。

  • transactionLogIdprocessRulesメッセージで明示的に指定されていない場合、前のcreateTranasctionメッセージから返された値がある場合は、その値が使用されます。

  • requestIdcreateTransactionprocessRulesまたはupdateEntityメッセージで明示的に指定されていない場合は、(このMessageList内の)前のメッセージから返されたrequestIdデータ要素の値が使用されます。

18.4.2 メッセージの書式を表すXMLスキーマの例

次のXMLスキーマの例に、メッセージの書式の詳細を示します。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="OaamJmsMessage"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="OaamJmsMessage" type="MessageList"/>

    <xs:complexType name="MessageList">
      <xs:sequence>
          <xs:element name="MessageList" type="MessageList"
                    minOccurs="0" maxOccurs="unbounded"/>
          <xs:element name="VCryptTracker.updateLog"
                    type="updateLog"
                    minOccurs="0" maxOccurs="unbounded"/>
          <xs:element name="VCryptTracker.createTransaction"
                    type="createTransaction"
                    minOccurs="0" maxOccurs="unbounded"/>
          <xs:element name="VCryptRulesEngine.processRules"
                    type="processRules"
                    minOccurs="0" maxOccurs="unbounded"/>
          <xs:element name="VCryptTracker.updateEntity"
                    type="updateEntity"
                    minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
  </xs:complexType>

  <xs:complexType name="updateLog">
    <xs:sequence>
    <xs:element name="UpdateAuthResultRequest">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="requestId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="requestTime" type="xs:string"
                      minOccurs="1" maxOccurs="1"/>
          <xs:element name="userId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="loginId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="isSecure" type="xs:boolean"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="groupId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="result" type="xs:integer"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="secureCookie" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="digitalCookie" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="clientType" type="xs:integer"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="clientVersion" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="remoteIPAddr" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="remoteHost" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="fingerPrintType" type="xs:integer"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="fingerPrint" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="fingerPrintType2" type="xs:integer"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="fingerPrint2" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="createTransaction">
    <xs:sequence>
    <xs:element name="createTransaction">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="requestId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="requestTime" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="transactionDefKey" type="xs:string"
                      minOccurs="1" maxOccurs="1"/>
          <xs:element name="status" type="xs:integer"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="contexts"
                      minOccurs="0" maxOccurs="1">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="context"
                            minOccurs="0" maxOccurs="unbounded">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="name" type="xs:string"
                            minOccurs="1" maxOccurs="1"/>
                      <xs:element name="value" type="xs:string"
                            minOccurs="1" maxOccurs="1"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="updateEntity">
    <xs:sequence>
     <xs:element name="updateEntity">
       <xs:complexType>
        <xs:sequence>
          <xs:element name="requestId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="entityDefKey" type="xs:string"
                      minOccurs="1" maxOccurs="1"/>
          <xs:element name="status" type="xs:integer"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="isReplace" type="xs:boolean"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="createTime" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="updateTime" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="unlinkEntities"
                      minOccurs="0" maxOccurs="1">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="entityRelation"
                              type="xs:string"
                              minOccurs="0"
                              maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="contexts"
                      minOccurs="1" maxOccurs="1">
              <xs:complexType>
              <xs:sequence>
                  <xs:element name="context"
                              minOccurs="0 maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="name" type="xs:string"
                                    minOccurs="1" maxOccurs="1"/>
                        <xs:element name="value" type="xs:string"
                                    minOccurs="1" maxOccurs="1"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="processRules">
    <xs:sequence>
    <xs:element name="ProcessRulesRequest">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="requestId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="requestTime" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="transactionLogId" type="xs:integer"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="extTransactionId" type="xs:string"
                      minOccurs="0" maxOccurs="1"/>
          <xs:element name="profileTypeList"
                      minOccurs="1" maxOccurs="1">
            <xs:complexType>
              <xs:sequence>
              <xs:element name="profileType" type="xs:integer"
                          minOccurs="1" maxOccurs="unbounded"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

18.4.3 JMSキューへのメッセージの送信

次のJavaコードの例は、JMSキューに送信するメッセージを書き込む方法を示しています。

/* XML Message */ 
String xmlString = ; 
 
/* get reference to queue from its JNDI name */ 
javax.jms.Queue queue = ; 
 
/* get a queue connection from connection factory */ 
QueueConnection queueConn = ; 
 
QueueSession queueSess   = conn.createQueueSession(...); 
QueueSender  queueSender = queueSess.createSender(queue); 
 
TextMessage msg = queueSess.createTextMessage(xmlString); 
 
queueSender.send(msg); 

18.5 エンティティおよびトランザクションのデータベース・ビュー

ユーザーは、任意の数のデータ・フィールドを使用して、Oracle Adaptive Access Managerにエンティティとトランザクションを定義できます。さらに、トランザクションはエンティティを参照するように定義することもできます。Oracle Adaptive Access Managerでは、エンティティ・データとトランザクション・データがデータベースに永続化されます。OAAMデータベース・スキーマは、任意のタイプのエンティティとトランザクション・データを格納できるようにデザインされています。しかし、この汎用的なスキーマでは、エンティティとトランザクション・データと使用できるSQL問合せを書き込むのは簡単ではありません。

Oracle Adaptive Access Managerには、Oracle Adaptive Access Managerでのエンティティとトランザクションのビューを作成するためのSQL問合せを含むSQLスクリプト・ファイルを生成するコマンド行ツールがあります。これらのデータベース・ビューによって、トランザクションとエンティティのデータへの問合せとOracle Business Intelligence Publisherを使用したレポートの作成が簡素化されます。

18.5.1 SQLスクリプト・ファイルの生成

SQLスクリプトを生成するには次を実行します。

  1. OAAM CLI環境を設定します。

    OAAMコマンド行環境の設定手順については、『Oracle Fusion Middleware Oracle Adaptive Access Manager管理者ガイド』のCLI環境の設定手順に関する項を参照してください。

  2. SQLスクリプト・ファイルを生成します。

    SQLスクリプト・ファイルを生成するには、次のコマンドをOAAM CLI作業フォルダから実行します。

    $ sh generateTrxEntityViewsSQL.sh
    

    デフォルトのファイル名はcreateTrxEntityViews.sqlです。オプションで、管理者は、oaam.trxentityview.filenameという名前のプロパティを追加して必要なファイル名を値として指定することによって、デフォルトのファイル名を変更できます。

  3. エンティティおよびトランザクションのデータベース・ビューを作成します。

    次の手順に従って、OAAMデータベース内に格納されているエンティティとトランザクションのデータベース・ビューを作成します。

    1. OAAMデータベース・スキーマにビューの作成権限があることを確認します。

    2. OAAMデータベース・スキーマ・ユーザーとしてデータベースに接続します。

      たとえば、次のようになります。

      sqlplus DEV_OAAM/PASSWORD
      
    3. createTrxEntityViews.sqlスクリプトを実行します。

      SQL>@ createTrxEntityViews.sql
      

      このスクリプトにより、OAAMデータベース内に定義されているエンティティおよびトランザクションごとにデータベース・ビューが作成されます。

18.5.2 エンティティ・ビューの詳細

Oracle Adaptive Access Manager内に定義されているエンティティごとに、1つのビューがoaam_ent_entity_keyという名前で作成されます。entity_keyは、Oracle Adaptive Access Managerに定義されているエンティティ・キーによって置き換わります。

作成されたビューには、エンティティで定義されているデータごとに1つの列が存在します。データ列の命名規則とビュー名の詳細は、第18.5.4項「識別子」を参照してください。

これらのデータ列に加えて、作成されたビューには次の列が含まれます。

  • entity_id: エンティティ・インスタンスの一意の識別子

  • create_time: エンティティの作成時

  • update_time: エンティティの最終更新時

18.5.3 トランザクション・ビューの詳細

Oracle Adaptive Access Manager内に定義されているトランザクションごとに、1つのビューがoaam_trx_transaction_keyという名前で作成されます。transaction_keyは、Oracle Adaptive Access Managerに定義されているトランザクション名に置き換わります。

作成されたビューには、トランザクションで定義されているデータごとに1つの列が存在します。データ列の命名規則とビュー名の詳細は、第18.5.4項「識別子」を参照してください。

作成されたビューには、トランザクションで参照されているエンティティごとに1つの列が存在します。ここに、参照されたエンティティのentity_idが格納されます。これは、oaam_ent_entity_keyビューのentity_id列です。インスタンス名に含まれるスペースは、列名では下線に置き換えられます。

これらのデータ列に加えて、作成されたビューには次の列が含まれます。

  • log_id: トランザクションの一意の識別子

  • user_id: このトランザクションの実行ユーザー

  • request_id: このトランザクションが実行されたセッション

  • ext_trx_id: このトランザクションの外部ID

  • status: トランザクションのステータス

  • create_time: エンティティの作成時

  • update_time: エンティティの最終更新時

  • created_hour: 最も近い時間に切り捨てた作成時

  • created_day: 最も近い日に切り捨てた作成時

  • created_week: 最も近い週に切り捨てた作成時

  • created_month: 最も近い月に切り捨てた作成時

  • created_year: 最も近い年に切り捨てた作成時

18.5.4 識別子

Oracleデータベースでは、表名、ビュー名および列名などの識別子の長さが30文字に制限されます。このスクリプトで生成されたビューをこの要件に準拠させるには、エンティティ、トランザクションおよびデータ・フィールドの名前の長さを次のように制限してください。

  • エンティティ: 21(ビューの名前はoaam_ent_ + entity_keyになる)

  • トランザクション: 21(ビューの名前はoaam_trx_ + transaction_keyになる)

  • データ・フィールド: 28(列の名前はd_ + data_element_nameになる)

  • entity-ref: 20(列の名前はrelationship_name + _entity_idになる)

スクリプトでは、これらの制限よりも長い名前の識別子はトリミングされます。作成されたビューに対するSQL問合せを書き込む際には、トリミングされた列名やビュー名に注意してください。

名前に含まれるスペース、ダッシュ(-)およびピリオド(.)は、下線に置き換えられます。

18.6 Pythonルール条件

Pythonルール条件を使用して、OAAMオブジェクトを使用するPython式を評価できます。

18.6.1 Pythonの式

非同期統合オプションには、Pythonの式を実行するOAAM条件が含まれています。この条件をosg_install/osg_integration_kit/osg_rule_conditions.zipファイルからインポートする必要があります。Pythonの式によって、カスタムJavaコードを記述しなくても、洗練された条件を記述できます。この条件に使用する式には、関数コール、SQL問合せ、複数の文などの、任意のPython構成を含めることができます。唯一の要件は、式が条件結果(ブール値)をoaamResultという名前の変数に返す必要があるということです式には、第18.6.2項「Pythonで使用可能なオブジェクト」に記載されているセッション、ユーザー、デバイス、場所、トランザクション、ロガーなどのOAAM APIやOAAMオブジェクトへのアクセスが設定されています。

18.6.2 Pythonで使用可能なオブジェクト

表18-4に、Pythonの式からアクセス可能なオブジェクト(変数)を示します。使用可能なメソッドの詳細は、『Oracle Fusion Middleware Oracle Adaptive Access Manager Java APIリファレンス』の各変数の対応するJavaインタフェースを参照してください。

表18-4 Pythonで使用可能なオブジェクト

Pythonの変数 Javaインタフェース 説明

oaamAuth

VCryptAuth

OAAM Java API

oaamTracker

VCryptTracker

OAAM Java API

oaamRulesEngine

VCryptRulesEngine

OAAM Java API

oaamCommon

VCryptCommon

OAAM Java API

oaamCC

VCryptCC

OAAM Java API

oaamSession

VCryptTrackerSession

現在のセッション

oaamUser

VCryptTrackerUser

現在のセッション・ユーザー

oaamDevice

VCryptTrackerDevice

現在のセッション・デバイス

oaamLocation

VCryptTrackerLocation

現在のセッションの場所

oaamTrx

OaamTrxHelper

現在のトランザクション

oaamDb

OaamDbHelper

OAAM DB問合せインタフェース

oaamLogger

Logger

デバッグ用のロガー・オブジェクト


18.6.3

表18-5に、Pythonの式の条件に使用できる複数の式を示します。

表18-5 Pythonの式

説明 Pythonの式

このデバイスは初めてのユーザーによって使用されましたか。

oaamResult = oaamDevice.isUserFirstTime(oaamUser.userId);

24時間以内に現在の場所に6つ以上のデバイスがありましたか。

deviceCount = 5;

durationUnit = 24;

durationUnitType = 4; # hours

authStatus = 0; # success

oaamResult = oaamLocation.checkDeviceCountMorethan(

deviceCount, authStatus,

durationUnit, durationUnitType);

現在のデバイスには、この1時間で5人を超えるユーザーが割り当てられましたか。

users = oaamDevice.getAllUsersForDevice(3600);

oaamResult = (len(users) > 5);

現在のトランザクションのAccessType属性に値Prescriptionが設定されていますか。

oaamResult = (oaamTrx.AccessType == "Prescription");

現在のトランザクションにある患者とプロバイダのエンティティに同じ苗字が含まれていますか。

oaamResult = (oaamTrx.provider.LastName == oaamTrx.patient.LastName);

シングル・サインオンのログイン・タイプがCOOKIE_LOGIN、つまりauthClientType=1である場合、このデバイスを初めて使用したユーザーであるかどうかを確認します。

oaamResult =

((oaamSession.authClientType == 11) and oaamDevice.isUserFirstTime(oaamUser.userId));

現在のトランザクションにあるプロバイダに、指定された期間に患者との予約がありましたか。

from jarray import array;

from java.lang import String;

from java.lang import Object;

apptCount = oaamDb.executeSqlSelectSingleValue(

"select count(*)from oaam_ent_appointmentinfo appt where appt.PatientId=:patientId and appt.ProviderId=:providerId and appt.StartTime between (:trxTime - (:withinHours / 24.0)) and (:trxTime)'",

array(['patientId', 'providerId', 'trxTime', 'withinHours'], String),

array([oaamTrx.patient.PatientId, oaamTrx.provider.ProviderId, oaamTrx.createTime, 1], Object));

oaamResult = (apptCount.intValue() > 0);

ユーザー定義のSQL機能を実行し、患者とプロバイダが同僚かどうかを決定します。

from jarray import array;

from java.lang import String;

from java.lang import Object;

isCoworker = oaamDb.executeSqlSelectSingleValue(

"select IsSameWorkLocation(:patientID, :providerID) from dual",

array(['patientID', 'providerID'], String),

array([oaamTrx.patient.PatientID, oaamTrx.provider.ProviderID], Object));

oaamResult = (isCoworker.intValue() > 0);