| Oracle® Fusion MiddlewareOracle Adaptive Access Manager開発者ガイド 11gリリース2 (11.1.2.3.0) E67356-01 |
|
![]() 前 |
![]() 次 |
複数のアプリケーションやデータ・ソースを必要とするアクセス監視要件のあるカスタマは、セキュリティおよびコンプライアンスについて率先した姿勢で措置を講じることができるようになりました。付属のJava Message Service Queue (JMSQ)を使用すると、カスタマはほぼリアルタイムのリスク分析を実装できるため、疑わしい不正や誤用を積極的に特定できます。
この章では、OAAMとJava Message Service Queue (JMSQ)の非同期統合の統合方法について説明します。この章の内容は、次のとおりです。
表19-1に、JMSの用語と定義を示します。Java Message Serviceの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JMSの構成と管理』を参照してください。
表19-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プロバイダはメッセージを配信し、メッセージの内容が処理されます。メッセージ形式の詳細は、第19.4.2項「メッセージの書式のXMLスキーマの例」のXMLスキーマを参照してください。 |
|
OAAM JMSメッセージ |
OAAM JMSメッセージのコンテンツは、Oracle Adaptive Access ManagerのWeb Services APIコールと類似しています。メッセージ形式の詳細は、第19.4.2項「メッセージの書式のXMLスキーマの例」のXMLスキーマを参照してください。 |
表19-2に、非同期統合オプションのインストールに関するタスクのサマリーを示します。
表19-2 非同期統合オプションのインストール
| 番号 | タスク | 情報 |
|---|---|---|
|
1 |
前提条件をレビューします。 |
詳細は、前提条件を参照してください。 |
|
2 |
非同期統合オプションをインストールします。 |
詳細は、「非同期統合オプションのインストール」を参照してください。 |
|
3 |
JMSキューを設定します。 |
詳細は、「JMSキューの設定」を参照してください。 |
|
4 |
OAAM拡張ライブラリを更新します。 |
詳細は、「OAAM拡張ライブラリの更新」を参照してください。 |
|
5 |
データベースを更新します。 |
詳細は、「OAAMデータベースの更新」を参照してください。 |
継続する前に、Oracle Adaptive Access Manager 11gのインストールと構成が完了していることを確認してください。この項では、非同期統合オプションのインストールに必要な手順について説明します。
非同期統合オプションには、Oracle Business Intelligence Publisherのレポート・テンプレートとしての様々なレポートが含まれています。非同期統合オプションをインストールする前に、Oracle Business Intelligence Publisherのインストールと構成が完了していることを確認してください。Oracle Business Intelligence Publisherのインストール方法の詳細は、Oracle Fusion Middleware Oracle Business Intelligenceインストレーション・ガイドを参照してください。
非同期統合オプションには、osg_integration_kit.zipファイルが含まれています。
非同期統合オプションをインストールするには、次の手順を実行します。
OAAMがインストールされているマシン上で、osg_installという作業ディレクトリを作成します。このフォルダは、インストール・ディレクトリ以外であればどこにでも作成できます。
osg_integration_kitディレクトリをosg_installディレクトリ内に作成します。
IAM_Home/oaam/oaam_extensions/genericディレクトリに格納されているosg_integration_kit.zipを特定します。
osg_integration_kit.zipのコンテンツをosg_install/osg_integration_kitディレクトリに抽出します。
非同期実行機能は、Oracle Adaptive Access Managerの拡張として実装されています。次の手順に従って、デフォルトの拡張ライブラリを置換します。
Oracle Adaptive Access Managerサーバーを停止します。たとえば、oaam_server_server1とoaam_admin_server1。
Oracle Adaptive Access ManagerがデプロイされているWebLogic Serverを起動して、Oracle WebLogic管理コンソールにログインします。
「ロックして編集」をクリックします。
「oracle.oaam.extensions」を選択し、「削除」をクリックします。
ドメイン環境→「デプロイメント」に移動して、コンソールをロックします。
「インストール」ボタンをクリックします。
osg_oaam_extensions.warファイルの場所を参照し、WARファイルの横のオプションをクリックして選択します。その後、「次へ」をクリックします。
「このデプロイメントをライブラリとしてインストールする」が選択されていることを確認して、「次へ」をクリックします。
すべてのOAAMサーバーをデプロイ先として選択します。たとえば、oaam_admin_server1とoaam_server_server1。
「次へ」を再度クリックしてこの次のページでデフォルトを受け入れ、「終了」をクリックします。
「保存」ボタンをクリックしてから、「変更のアクティブ化」をクリックします。
必要なすべてのOracle Adaptive Access Managerサーバーを開始します。
OAAMは、統合メカニズムの1つとしてJMS (Java Message Service)キューを使用します。OAAMは、1つ以上のJMSキューでXMLメッセージをリスニングします。たとえば、電子カルテ(EMR)は、OAAMサーバーで使用されるトランザクション詳細を送信するためにメッセージ・キューを必要とします。XMLスキーマとリスナー構成の詳細は、第19.3項「JMSの統合」を参照してください。
osg_oaam_extension.warに含まれているデフォルトの構成では、OAAMは、t3://localhost:7001でJNDI名jms/oaamDefaultQueueのJMSキューにあるメッセージをリスニングします。第19.3「JMSの統合」に示す詳細に従ってこの構成をレビューし、デプロイメントの必要に応じて更新します。
リスナー構成で指定されたJMSキューが存在し、アクティブであることを確認します。存在しないものがあれば、適切なWebLogic Serverにそれを作成してください。WebLogic ServerでのJMSキュー設定の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JMSの構成と管理』を参照してください。
エンティティとトランザクションのデータベース・ビューは、ルール条件とレポートで使用するために作成できます。これらのデータベース・ビューの詳細は、第19.5項「エンティティとトランザクションのデータベース・ビュー」を参照してください。OAAMデータベース・ユーザーのデータベース権限を更新し、ビューの作成や他のデータベース操作を行えるようにする必要があります。
必要な権限を付与するには、管理者の資格証明を使用してOracleデータベースにログインし、次のSQL文を実行してください。dev_oaamはOAAMデータベース・スキーマで置き換える必要があります。
grant create view to dev_oaam.
非同期デプロイメントでのJMSリスナーの実装によって、XML形式のメッセージ用のJMSキュー(またはトピック)をリスニングするようにOracle Adaptive Access Managerを構成できます。メッセージの書式の詳細は、第19.4.2項「メッセージの書式を表すXMLスキーマの例」に示すXMLスキーマを参照してください。パラメータの詳細は、Oracle Adaptive Access Manager Java APIリファレンスを参照してください。JMSメッセージのコンテンツは、OAAM WebサービスAPIのコールと類似しています。
WebサービスAPIのサブセットで、JMSを通して使用できるものは次のとおりです。
次の図に、OAAMとのJMS統合の概要を示します。
統合のフローは次のとおりです。
アプリケーション(JMS送信者)がメッセージをJMSキューに送信します。アプリケーションは、JNDIネームスペースによってキュー宛先を識別します。
キューイング・システムはJMS送信者からメッセージを受信して、そのメッセージを宛先にルーティングします。
OAAMサーバーは、構成済JMSリスナーを使用してメッセージをリスニングします。
メッセージは、メッセージ・プロセッサにより処理されます。
情報は、トランザクション・データまたはログイン・データとしてデータベースにロードされます。
オフラインのログインおよびトランザクション・データに対してルールが実行されます。
Oracle Adaptive Access Managerのプロパティとユーザー定義列挙を使用して、JMS統合の様々な要素を構成できます。ユーザー定義列挙の詳細は、第7.2項「列挙の編集によるOAAMのカスタマイズまたは拡張について」を参照してください。
表19-3に、JMSの構成プロパティのリストを示します。監視するキュー(またはトピック)ごとに、ユーザー定義列挙oracle.oaam.jms.listeners.enumに列挙要素を追加して、1つのリスナーを構成する必要があります。リスナー・リストまたはプロパティを変更する場合は、リスナーが実行されているOAAMサーバーを再起動する必要があります。
表19-3 JMSの構成プロパティ
| プロパティ名 | 説明 |
|---|---|
|
jms.message.processor.default.user |
デフォルト値: |
|
jms.message.processor.default.usergroup |
デフォルト値: |
|
jms.message.processor.default.ip |
デフォルト値: |
|
jms.message.processor.default.clientver |
デフォルト値: 1.0 |
|
jms.message.processor.default.authtype |
デフォルト値:normal |
|
jms.message.processor.default.sessionid |
|
|
jms.message.processor.default.browser.fingerprint |
|
|
jms.message.processor.default.flash.fingerprint |
|
|
oracle.oaam.jms.listeners.default.initial.cont ext.factory |
初期コンテキスト・ファクトリを実装するJavaクラスの名前。この値は、Java Namingコンテキストの初期化に使用されます。 デフォルト値: |
|
oracle.oaam.jms.listeners.default.connection.factory |
キュー/トピックの接続の作成に使用されるJMSコネクション・ファクトリのJNDI名。 デフォルト値: |
|
oracle.oaam.jms.listeners.enum.lsnr_1 |
有効な値: この列挙で他のどの要素にも割り当てられていない整数 |
|
oracle.oaam.jms.listeners.enum. lsnr_1.type |
リスナーがJMSキューまたはJMSトピックに接続するかどうかを指定します。 有効な値: |
|
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.enum.lsnr_1.connection.factory |
キュー/トピックの接続の作成に使用されるJMSコネクション・ファクトリのJNDI名。 デフォルト値: プロパティ |
|
oracle.oaam.jms.listeners.enum.lsnr_1.processor |
メッセージ・プロセッサ・インタフェースを実装するJavaクラスの名前。このリスナーにより受信されるメッセージを処理するために、このクラスのインスタンスが作成されます。 デフォルト値: |
|
oracle.oaam.jms.listeners.enum.lsnr_1.instancecount |
指定されたキュー/トピックからのメッセージを作成、処理するリスナーの数。 デフォルト値: |
Oracle Adaptive Access Managerのプロパティとユーザー定義列挙を使用して、メッセージ・プロセッサのプロパティを構成します。ユーザー定義列挙の詳細は、第7.2項「列挙の編集によるOAAMのカスタマイズまたは拡張について」を参照してください。
OAAMのデフォルトのJMSメッセージ・プロセッサでは、タイプjavax.jms.TextMessageのみが処理されます。JMSメッセージ・プロセッサによって、その他のタイプのメッセージは無視されます。
その他のタイプのメッセージを処理するには、カスタム・プロセッサを実装する必要があります。これを行うには、oracle.oaam.jms.JmsAbstractMessageProcessorまたはoracle.oaam.jms.JmsDefaultMessageProcessorを拡張して、プロセッサをJmsListenerに関連付けます。
さらに、TextMessageのコンテキストが、第19.4.2項「メッセージの書式を表すXMLスキーマの例」に示すXMLスキーマに準拠したXML文字列であるかぎり、デフォルトのJMSメッセージ・プロセッサによる処理が行われます。
この項の内容は次のとおりです。
この項では、JMSメッセージの例を示します。含まれる内容は、次のとおりです。
これらのメッセージの例には、メッセージでサポートされるすべてのデータ要素が含まれているわけではありません。サポートされるデータ要素の完全なリストは、第19.4.2項「メッセージの書式を表すXMLスキーマの例」を参照してください。
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 Adaptive Access Manager Java APIリファレンスを参照してください。
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 Adaptive Access Manager Java APIリファレンスを参照してください。
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 Adaptive Access Manager Java APIリファレンスを参照してください。
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 Adaptive Access Manager Java APIリファレンスを参照してください。
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に有用なデフォルト値を提供します。
transactionLogIdがprocessRulesメッセージで明示的に指定されていない場合、前のcreateTranasctionメッセージから返された値がある場合は、その値が使用されます。
requestIdがcreateTransaction、processRulesまたはupdateEntityメッセージで明示的に指定されていない場合は、(このMessageList内の)前のメッセージから返されたrequestIdデータ要素の値が使用されます。
次の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>
次の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);
ユーザーは、任意の数のデータ・フィールドを使用して、Oracle Adaptive Access Managerにエンティティとトランザクションを定義できます。さらに、トランザクションはエンティティを参照するように定義することもできます。Oracle Adaptive Access Managerでは、エンティティ・データとトランザクション・データがデータベースに永続化されます。OAAMデータベース・スキーマは、任意のタイプのエンティティとトランザクション・データを格納できるようにデザインされています。しかし、この汎用的なスキーマでは、エンティティとトランザクション・データと使用できるSQL問合せを書き込むのは簡単ではありません。
Oracle Adaptive Access Managerには、Oracle Adaptive Access Managerでのエンティティとトランザクションのビューを作成するためのSQL問合せを含むSQLスクリプト・ファイルを生成するコマンド行ツールがあります。これらのデータベース・ビューによって、トランザクションとエンティティのデータへの問合せとOracle Business Intelligence Publisherを使用したレポートの作成が簡素化されます。
SQLスクリプトを生成するには次を実行します。
OAAM CLI環境を設定します。
OAAMコマンド行環境の設定手順については、『Oracle Adaptive Access Managerの管理』のCLI環境の設定手順に関する項を参照してください。
SQLスクリプト・ファイルを生成します。
SQLスクリプト・ファイルを生成するには、次のコマンドをOAAM CLI作業フォルダから実行します。
$ sh generateTrxEntityViewsSQL.sh
デフォルトのファイル名はcreateTrxEntityViews.sqlです。オプションで、管理者は、oaam.trxentityview.filenameという名前のプロパティを追加して必要なファイル名を値として指定することによって、デフォルトのファイル名を変更できます。
エンティティおよびトランザクションのデータベース・ビューを作成します。
次の手順に従って、OAAMデータベース内に格納されているエンティティとトランザクションのデータベース・ビューを作成します。
OAAMデータベース・スキーマにビューの作成権限があることを確認します。
OAAMデータベース・スキーマ・ユーザーとしてデータベースに接続します。
たとえば、次のようになります。
sqlplus DEV_OAAM/PASSWORD
createTrxEntityViews.sqlスクリプトを実行します。
SQL>@ createTrxEntityViews.sql
このスクリプトにより、OAAMデータベース内に定義されているエンティティおよびトランザクションごとにデータベース・ビューが作成されます。
Oracle Adaptive Access Manager内に定義されているエンティティごとに、1つのビューがoaam_ent_entity_keyという名前で作成されます。entity_keyは、Oracle Adaptive Access Managerに定義されているエンティティ・キーによって置き換わります。
作成されたビューには、エンティティで定義されているデータごとに1つの列が存在します。データ列の命名規則とビュー名の詳細は、第19.5.4項「識別子」を参照してください。
これらのデータ列に加えて、作成されたビューには次の列が含まれます。
entity_id: エンティティ・インスタンスの一意の識別子
create_time: エンティティの作成時
update_time: エンティティの最終更新時
Oracle Adaptive Access Manager内に定義されているトランザクションごとに、1つのビューがoaam_trx_transaction_keyという名前で作成されます。transaction_keyは、Oracle Adaptive Access Managerに定義されているトランザクション名に置き換わります。
作成されたビューには、トランザクションで定義されているデータごとに1つの列が存在します。データ列の命名規則とビュー名の詳細は、第19.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: 最も近い年に切り捨てた作成時
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問合せを書き込む際には、トリミングされた列名やビュー名に注意してください。
名前に含まれるスペース、ダッシュ(-)およびピリオド(.)は、下線に置き換えられます。
Pythonルール条件を使用して、OAAMオブジェクトを使用するPython式を評価できます。
非同期統合オプションには、Pythonの式を実行するOAAM条件が含まれています。この条件をosg_install/osg_integration_kit/osg_rule_conditions.zipファイルからインポートする必要があります。Pythonの式によって、カスタムJavaコードを記述しなくても、洗練された条件を記述できます。この条件に使用する式には、関数コール、SQL問合せ、複数の文などの、任意のPython構成を含めることができます。唯一の要件は、式が条件結果(ブール値)をoaamResultという名前の変数に返す必要があるということです。式には、第19.6.2項「Pythonで使用可能なオブジェクト」に記載されているセッション、ユーザー、デバイス、場所、トランザクション、ロガーなどのOAAM APIやOAAMオブジェクトへのアクセスが設定されています。
表19-4に、Pythonの式からアクセス可能なオブジェクト(変数)を示します。使用可能なメソッドの詳細は、Oracle Adaptive Access Manager Java APIリファレンスの各変数の対応するJavaインタフェースを参照してください。
表19-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 |
デバッグ用のロガー・オブジェクト |
表19-5に、Pythonの式の条件に使用できる複数の式を示します。
表19-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); |
|
現在のトランザクションの |
oaamResult = (oaamTrx.AccessType == "Prescription"); |
|
現在のトランザクションにある患者とプロバイダのエンティティに同じ苗字が含まれていますか。 |
oaamResult = (oaamTrx.provider.LastName == oaamTrx.patient.LastName); |
|
シングル・サインオンのログイン・タイプが |
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); |