この記事では、Oracle SOA SuiteとWeblogicサーバーを使用してビジネスプロセスWebサービス用のBPELプラグインを実装する方法を示します
挑戦する
1つのシステムのストレステストを行うプロジェクトがあります。 サーバー間の相互作用のスキームには、テストオブジェクトに参加しない外部システムがあります。それらはエミュレーターまたはスタブに置き換える必要があります。 SOAPプロトコル。 BPEL上のコンポジット。 スタンドはありません。 すごく面白い!
解決策
まあ、私はそれが簡単だと思います。 WSDL、XSDスキーム、リクエストとレスポンスの例を求めます。 お気に入りのEclipse、Tomcatを使用して、クラスをすばやく生成し、サンプルの応答を挿入してから、デプロイして確認します。
Eclipseは非常にinしていました。WSDLには、クラスの通常の生成に必要な情報がありません。 私はそれを編集し始め、エンドポイントを処方しましたが、それでも動作しませんでした。 次に、これはBPELプロセスであり、別の方法で行う必要があることがわかりました。
BPEL自体は、ビジネスプロセスの正式な記述と相互のやり取りのためのプロトコルのためのXMLベースの言語です。 Eclipseはこれをすべて実行できます。プラグインがあり、Apache ODEアプリケーションサーバーがあります。 EclipseのBPELプロセスのプロジェクトは手動で収集する必要があり、コンポジットにあるファイルは作成しないようです。 機能的なスタンドからアンロードされたコンポジットをインポートすることもできません。 WeblogicからEclipseにコンポジットをインポートしたのは驚きでした。
Oracle JDeveloperでの開発であるOracle Database + Oracle Weblogic + Oracle SOA Suiteの生産性とまったく同じことを行うというアイデアを訪れました。
次に話をします:
- スタンドを広げる
- MDS接続
- 既存のコンポジットをインポートする
- 外部システムへの電話を切る
- 成功した応答の例を挿入
- 演算子の使用例
- 新しいWebサービスをコンポジットに追加する
- 非同期サービス呼び出し
- コンポジットをデプロイする
- 変更された複合検証
- テスト中の問題の分析
- 監視および作業上の注意
BPELは、ビジネスプロセスの正式な記述と、相互のやり取りのためのプロトコルのためのXMLベースの言語です。
BPELは、さまざまな演算子、デバッグ、Javaなどのコードを挿入できる、かなり大きく便利なものだと言わなければなりません。
ビジネスプロセスは次のようになります。
スタンドを拡大しましょう。 したがって、必要なものとバージョンは次のとおりです。
- JDK 1.7.79
- Oracle Database 11gリリース2
- Oracle SOA Suite 11.1.1.7.0
- Oracle RCU 11.1.1.7.0
- Weblogic 10.3.6
- JDeveloper 11.1.1.7.0
- 既製のビジネスプロセス複合材料
- MDSアーカイブ
- リクエストとレスポンスの例
スタンドを広げる
ソフトウェアのインストールおよび構成手順
インストーラーを起動します。
java -jar wls1036_generic.jar
ホームフォルダーのパスを選択します。
アップデートの登録をスキップします。
標準インストールを選択します。
JDKでフォルダーを指定します。
次に、Weblogic自体を配置するフォルダーを指定します。
インストールとおめでとうございます。
インストールには複雑なことは何もありません。いくつかの点についてのみ説明します。
最小要件をスキップして、Windows用のOracle Database 11gリリース2 x32をインストールし、デスクトップ・クラスを選択します。 開発するのに十分です。
Habréを含むインターネットには、インストールに関する多くの記事があります。 ローカル管理者でのインストールと環境変数の設定のみに注意してください。 ただし、ORACLE_UNQNAMEの欠如によるエラーは停止せず、すべてが開始されました。
インストーラーを開始するには、JREまたはJDKへのパスを指定する必要があります。
ofm_soa_generic_11.1.1.7.0/Disk1/setup.exe -jreLoc c:\Oracle\Middleware\jdk160_24
ソフトウェアの更新をスキップします。
オペレーティングシステムと物理メモリの確認;エラーが発生した場合は、無視できます。
ミドルウェアホームの選択とSOAのディレクトリ名。
次に、インストーラーはホームフォルダーでWeblogicを見つけました。
インストールとおめでとうございます。 接続を確認しましょう。
sqlplus sys@ORCL as sysdba
または、SQL Developerを実行して接続を構成します。
c:\app\admin\product\11.2.0\dbhome_1\sqldeveloper\sqldeveloper.exe
RCUを実行します。
ofm_rcu_win_11.1.1.7.0_64_disk1_1of1/rcuHome/bin/rcu.bat
[リポジトリの作成]を選択します。
データベースパラメータを指定します。この場合は、localhost、1521、sys、およびパスワードです。 次はチェックです。
次に、データスキーマ名のプレフィックス(デフォルトではDEV)を指定し、リポジトリコンポーネントを選択する必要があります。メタデータサービスとSOAインフラストラクチャが必要です。ユーザーメッセージングサービスが自動的に選択されます。
リポジトリのデータを持つスキームの所有者であるユーザーのパスワードを指定します。
その後、リポジトリデータスキーマの表スペースを選択できます。
表領域の作成を開始します。
できた
インストールを開始します。
作成するには、フォルダー内のconfig.cmdファイルを実行します
C:\Oracle\Middleware\Oracle_SOA1\common\bin
私はJDK 1.7を持っているので、彼は誓った
それを回避します-ファイルでjavawをjavaに変更します
c:\Oracle\Middleware\wlserver_10.3\common\bin\config.cmd
認識されないVMオプション「UseSpinning」の説明を取得します
ファイル内の-XX:+ UseSpinningオプション (1.6ではなくなりました)を削除します。
c:\Oracle\Middleware\wlserver_10.3\common\bin\commEnv.cmd
再度実行します。
新しいドメインを作成することを選択します。
Oracle SOA Suite、Enterprise Managerを選択します。 WSM Policy ManagerとJRFが自動的に選択されます。
ドメインとアプリケーションの名前とパスを指定します。
weblogicユーザーのパスワード。
JDKおよびインストールのタイプ。 開発モードを終了します。
スキーム、ホスト、およびsidのパスワードを登録します。
検証
設定しません。空のままにします。
クリックして作成します。
できた 管理サーバーを起動します。
「サーバーの状態が実行中に変更されました」というメッセージを待ちます
soa_server1を実行します。
c:\Oracle\Middleware\user_projects\domains\base_domain\bin\startManagedWebLogic.cmd soa_server1
ログインとパスワードの入力を求められたら、ドメイン管理者から入力します。 尋ねないようにするには、ファイルを作成します。
c:\Oracle\Middleware\user_projects\domains\base_domain\servers\soa_server1\security\boot.properties
username=weblogic password=welcome1
WebLogic管理コンソールの確認: http:// localhost:7001 / console (インストール中にデフォルトポートを使用した場合)。
Enterprise Managerの検証: http:// localhost:7001 / em
Enterprise Managerでは、左側のツリーの「SOA」タブが使用可能になっているはずです。
コンポジットを作成するには、JDeveloperをインストールする必要があります。 バージョン11.1.1.9.0を使用します。
既存のミドルウェアホームを使用して設定します。
コンポジットを使用するには、JDeveloperの拡張機能をインストールする必要があります。
開発の準備
展開するコンポジットは、データベースのMDSに保存されているスキームを使用します。 機能テストのために要求または収縮できます。
開発
コンポジットとザデロイムの発見
上の図では、右側に外部システムがあり、ビジネスプロセスはinvokeメソッドを使用してそれを呼び出しています。
この不要なものを削除しましょう。 私はノートでそれをします。 しかし、それはインターフェースで可能です。
短い遠足。
ファイルはブロックで構成されていますが、さらにバリエーションがあります。いくつかリストします。
process-プロセスのルートタグ
partnerLinks-サービス間のパートナーシップ
変数-変数の宣言
faultHandlers-エラーハンドラー
シーケンスメイン-ビジネスプロセス
receive-クライアントからリクエストを受け取ります
assign-変数割り当てブロック
copy-あるオブジェクトから別のオブジェクトにデータをコピーします
invoke-Webサービス呼び出し
if、elseif、else-条件の宣言
状態-状態の説明
forEach-ループ宣言
startCounterValue-ループの開始
finalCounterValue-ループの終わり
スコープ-ユニオン
外部システムに関する契約の一部を削除します。
<partnerLink name="GetCustomerPartyAccountBS" partnerLinkType="ns2:GetCustomerPartyAccount" partnerRole="GetCustomerPartyAccountProvider" myRole="GetCustomerPartyAccountRequester"/>
簡単にするために、エラーハンドラも削除します。 faultHandlersタグ全体。
<faultHandlers/>
外部システムへの割り当て要求を削除します。要求を識別するために、要求からのデータのコピーのみを残します。
<copy> <from>$inputVariable.payload/SYSTEM/MSG_ID/@Value</from> <to>$outputVariable.payload/SYSTEM/MAIN_ID/@Value</to> </copy>
ファイルへの最後の呼び出しを除き、外部呼び出しシステムへのすべての呼び出しを削除します。ここでは、クライアントに対する応答が必要です。
<invoke name="callbackClient" partnerLink="getcustomerpartyaccountsystreqa_client" portType="ns1:GetCustomerPartyAccountsystReqACallback" operation="processResponse" inputVariable="outputVariable"/>
答えを書く必要がある変数を見てみましょう。 私たちの場合、これはoutputVariableです
開発者が友好的に提供した回答、または機能的な立場でSOAから撤退した回答の例を取り上げます。 そして、目的のタグに値を書き込みます。 例えば
ペイロードメソッド、応答操作AnsSearchGetCustomerPartyAccおよびxpathが独自に設定します。
BEGIN [$ itr]-ループ内の要素 。親内の$ itr番目のBEGIN要素を意味します。
<copy bpelx:insertMissingToData="yes" ignoreMissingFromData="yes"> <from>"0"</from> <to>$outputVariable.payload/DATA/AnsSearchGetCustomerPartyAcc/BEGIN_/accClntList/BEGIN_[$itr]/accClnt/BEGIN_/status/BEGIN_/code/@Value</to> </copy>
- 外部サービスからwsdlインポートを削除しましょう。
<import importType="wsdl" location="oramds:/apps/EDM/EnterpriseBusinessServiceLibrary/GetCustomerPartyAccountBS/V1/GetCustomerPartyAccountBSV1.wsdl" namespace="http://www.ru/EnterpriseBusinessServiceLibrary/GetCustomerPartyAccountBS/V1"/>
- 外部サービスへの別のリンクを削除します。
<reference name="GetCustomerPartyAccountBS">
- そして、 GetCustomerPartyAccountBS削除されたサービスへの別のワイヤー接続
<wire> ```GetCustomerPartyAccountsystReqA/GetCustomerPartyAccountBS</source.uri> <target.uri>GetCustomerPartyAccountBS</target.uri> </wire>
- これらのファイルから外部サービスへのリンクを削除します。
<reference name="GetCustomerPartyAccountBS">
- 収集しようとしています。 プロジェクトを右クリック->作成。
すべてが問題なければ、展開します、いいえ-理解します。
展開しようとしています。
操作の選択。
同じ名前で異なるバージョンの複数のサービスを作成できます。
すべてを呼び出すことができますが、デフォルトのリビジョンのみが標準アドレスで機能します。 Enterprise Managerでは、デプロイされたコンポジットにデフォルトを適用できます。
サーバーの選択。
ローカルサーバーを追加します。 プラスをクリックします。
SOAサーバーの選択。
まとめ
展開ログ
興味深い機能のいくつかの例。
正規表現。
<if name="If_ChooseSync"> <documentation>sender_bic</documentation> <condition>xp20:matches($sender_bic,'(?!044525716|046577413|044030811|043602955|045004751|042007738|040349585|040813827)\d{9}') = true()</condition> ...
行の割り当て
<extId Value="0000000001CA3B1"/>
<copy ignoreMissingFromData="yes" bpelx:insertMissingToData="yes"> <from>"0000000001CA3B1"</from> <to>$CITResponse/DATA/ReqSyncFinancialTransactionBatch/BEGIN_/documentList/BEGIN_/document/BEGIN_/extId/@Value</to> </copy>
ループとイテレータ。
<forEach parallel="no" counterName="ForEach1CounterSync" name="ForEachSync"> <startCounterValue>1</startCounterValue> <finalCounterValue>count($onMessage_ExecuteFinancialTransactionBatch_InputVariable.part1/DATA/ReqExecFinancialTransactionBatch/BEGIN_/documentList/BEGIN_)</finalCounterValue> ...
ループでイテレーターを使用します。
<copy ignoreMissingFromData="yes" bpelx:insertMissingToData="yes"> <from>"BQ.00000.1415807097.277059967"</from> <to>$CITResponse/DATA/ReqSyncFinancialTransactionBatch/BEGIN_/documentList/BEGIN_[$ForEach1CounterInc]/document/BEGIN_/extId/@Value</to> </copy>
guid生成などの多くの組み込み関数。
<copy> <from>oraext:generate-guid()</from> <to>$CITResponse/SYSTEM/MSG_ID/@Value</to> </copy>
または比較。
<condition>xp20:compare($sender_bic,$recipient_bic) != 0</condition>
おいしい。 Javaを挿入できます。
<extensionActivity> <bpelx:exec language="java"> <![CDATA[XMLElement elem = (XMLElement) getVariableData("output", "payload"); String t = elem.getTextContent(); elem.setTextContent(t + ", set by java exec 2");]]> </bpelx:exec> </extensionActivity>
外部システムを呼び出すビジネスプロセスがあり、しばらくすると、テスト対象のシステムにリクエストを送信します。 これは私たちのビジネスプロセスではありません。
新しいサービスとのパートナーシップ契約を設定し、変数を登録し、ReqSyncFinancialTransactionBatchリクエストでinvokeサービスをビジネスプロセスに挿入する必要があります。
ReqSyncFinancialTransactionBatchリクエストを受け入れるサービスプロバイダーもSOA上に構築されており、幸いなことに、コンポジットがあります。
これを解凍し、プロバイダーの呼び出しに関連するすべてをコンポジットにドラッグする必要があります。
プロバイダーおよび要求タイプから名前空間をリストに追加します。
xmlns:ns27="urn:syst-ws:ws_soap-provider_ta" xmlns:ns28="http://www.mybank.ru/ApplicationObjectLibrary/syst/Providers/DistributedFinancialTransactionProcessingBatchsystProvA/V1/SyncFinancialTransactionBatch_Request"
パートナーシップ契約の追加。
<import namespace="urn:syst-ws:ws_soap-provider_ta" location="oramds:/apps/EDM/mybank/ApplicationObjectLibrary/syst/wsdls/ProviderTA/V1/PROVIDER_TA.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
また、スキーマをインポートする必要がありました。
<import namespace="urn:syst-ws:ws_soap-provider_ta" location="oramds:/apps/EDM/mybank/ApplicationObjectLibrary/syst/wsdls/ProviderTA/V1/PROVIDER_TA.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/> <import namespace="http://www.mybank.ru/ApplicationObjectLibrary/syst/Providers/DistributedFinancialTransactionProcessingBatchsystProvA/V1/SyncFinancialTransactionBatch_Request" location="oramds:/apps/EDM/mybank/ApplicationObjectLibrary/syst/schemas/Providers/DistributedFinancialTransactionProcessingBatchsystProvA/V1/SyncFinancialTransactionBatch_Request.xsd" importType="http://www.w3.org/2001/XMLSchema"/>
変数を書きましょう。
<variable name="CITResponse" element="ns28:CIT_REQUEST"/> <variable name="processPutSoapIn" messageType="ns27:PROCESSPUTSoapIn"/>
必要に応じて、スキームに従って新しいリクエストで割り当てを行います。
<assign name="AssignOK"> <copy ignoreMissingFromData="yes" bpelx:insertMissingToData="yes"> <from>"cm.System.syst"</from> <to>$CITResponse/DATA/ReqSyncFinancialTransactionBatch/BEGIN_/systemTo/@Value</to> </copy> <copy ignoreMissingFromData="yes" bpelx:insertMissingToData="yes"> <from>"cm.System.BQ"</from> <to>$CITResponse/DATA/ReqSyncFinancialTransactionBatch/BEGIN_/systemFrom/@Value</to> </copy> <copy ignoreMissingFromData="yes" bpelx:insertMissingToData="yes"> <from>$onMessage_ExecuteFinancialTransaction_InputVariable.part2/DATA/ReqExecFinancialTransaction/BEGIN_/document/BEGIN_/id/@Value</from> <to>$CITResponse/DATA/ReqSyncFinancialTransactionBatch/BEGIN_/documentList/BEGIN_/document/BEGIN_/id/@Value</to> </copy> </assign>
サービスを呼び出すための変数を入力変数に割り当てます。 プロバイダーwsdlで、彼が理解しているメッセージを探します。
<wsdl:message name="PROCESSPUTSoapIn"> <wsdl:part name="parameters" element="tns:PROCESSPUT"/> </wsdl:message>
<assign name="assignResponse"> <copy ignoreMissingFromData="yes" bpelx:insertMissingToData="yes"> <from>$CITResponse</from> <to>$processPutSoapIn.parameters/ns27:REQUESTPUT</to> </copy> </assign>
呼び出しサービス呼び出しを行い、必要に応じて受信応答を減算します。
必要に応じて、bpelx:toPropertiesを使用して、要求に必要なヘッダーを配置します。
<sequence> <invoke name="sendResponse" inputVariable="processPutSoapIn" partnerLink="ProviderTAWSImport" portType="ns27:PROVIDER_TASoap" operation="Async_PROCESSPUT" bpelx:invokeAsDetail="no"> <bpelx:toProperties> <bpelx:toProperty name="replyToAddress">'null'</bpelx:toProperty> </bpelx:toProperties> </invoke> <receive name="receiveResponse" createInstance="no" partnerLink="ProviderTAWSImport" portType="ns27:PROVIDER_TACallbackSoap" operation="Async_PROCESSPUTCallback" variable="processPutSoapOut" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"/> </sequence>
新しいコンポーネントとの関係を.componentTypeファイルに追加します
... <reference name="ProviderTAWSImport" ui:wsdlLocation="PROVIDER_TAWrapper.wsdl"> <interface.wsdl interface="urn:syst-ws:ws_soap-provider_ta#wsdl.interface(PROVIDER_TASoap)" callbackInterface="urn:syst-ws:ws_soap-provider_ta#wsdl.interface(PROVIDER_TACallbackSoap)"/> </reference> </componentType>
サービスからプロジェクトにwsdl PROVIDER_TAWrapper.wsdlを配置します
cfgplanファイルへの参照を追加します
<composite name="DistributedFinancialTransactionProcessingBatchsystReqA"> <reference name="ProviderTAWSImport"> <binding type="ws"> <attribute name="location"> <replace>@@@systDistributedFinancialTransactionProviderTAWSDL@@@</replace> </attribute> <property name="oracle.webservices.httpConnTimeout"> <replace>@@@systDistributedFinancialTransactionTAWSDL_httpConnTimeout@@@</replace> </property> <property name="oracle.webservices.httpReadTimeout"> <replace>@@@systDistributedFinancialTransactionTAWSDL_httpReadTimeout@@@</replace> </property> </binding> </reference> </composite>
wsdl、参照およびワイヤのインポートをcomposit.xmlファイルに追加します
サービスプロバイダーの場所= " http://k10systwp.mybank.ru:7030/webproxy/WS/PROVIDER_TA?wsdlの wsdlへのリンクに注意してください。
<import importType="wsdl" location="PROVIDER_TAWrapper.wsdl" namespace="urn:syst-ws:ws_soap-provider_ta"/> <import importType="wsdl" location="PROVIDER_TAWrapper1.wsdl" namespace="urn:syst-ws:ws_soap-provider_ta"/> <import importType="wsdl" location="PROVIDER_TAWrapper2.wsdl" namespace="urn:syst-ws:ws_soap-provider_ta"/>
<reference name="ProviderTAWSImport" ui:wsdlLocation="oramds:/apps/EDM/mybank/ApplicationObjectLibrary/syst/wsdls/ProviderTA/V1/PROVIDER_TA.wsdl"> <interface.wsdl callbackInterface="urn:syst-ws:ws_soap-provider_ta#wsdl.interface(PROVIDER_TACallbackSoap)" interface="urn:syst-ws:ws_soap-provider_ta#wsdl.interface(PROVIDER_TASoap)"/> <binding.ws location="http://k10systwp.mybank.ru:7030/webproxy/WS/PROVIDER_TA?wsdl" port="urn:syst-ws:ws_soap-provider_ta#wsdl.endpoint(PROVIDER_TA/PROVIDER_TASoap)" soapVersion="1.1"> <property many="false" name="weblogic.wsee.wsat.transaction.flowOption" type="xs:string">WSDLDriven</property> </binding.ws> <callback> <binding.ws port="urn:syst-ws:ws_soap-provider_ta#wsdl.endpoint(PROVIDER_TA/PROVIDER_TACallbackSoap_pt)"/> </callback> </reference>
<wire> ```DistributedFinancialTransactionProcessingBatchsystReqA/ProviderTAWSImport</source.uri> <target.uri>ProviderTAWSImport</target.uri> </wire>
- すべて、私たちは収集して展開しようとします
複合試験
行ったことを確認してください。
- また、SoapUIを取得し、サービスプロバイダーのwsdlを使用してmoskサービスを生成します。
- wsdlアドレスをコピーして、サービスのcomposite.xmlファイルに書き込みます。 したがって、埋め込み要求がどこに行くかを示します。
<binding.ws location="http://k10-emul:8089/mockPROVIDER_TASoap?WSDL" port="urn:ws:ws_soap-provider_ta#wsdl.endpoint(PROVIDER_TA/PROVIDER_TASoap)" soapVersion="1.1">
- 保存して、異なるバージョンでデプロイします。 また、デフォルトボックスのチェックを外して、デバッグが煩わされないようにします。
- すべてがエラーなしで一緒になったことを確認し、EMに進みます。 私たちは新しい改訂版のサービスを探しています。
- 要求を行い、埋め込み呼び出しがスタブに届いたことを確認します。 写真はクリック可能です。
職場での問題の分析
開発者が私たちのスタブが遅くなっていると言って、彼らがうまくやっているとしたらどうでしょう?
わかります。
彼に何が起こったのかを理解するためにコンテンツクエリを見つける必要がありました。 DEV_SOAINFRAスキーマのCUBE_INSTANCEテーブルには、コンポジットの履歴全体が含まれています。 しかし、表示するには、それをブロブから引き出す必要があります。
ここでこれを行う関数を見つけました
CREATE OR REPLACE PACKAGE SOA_UTIL AS ------------------------------------------------------------------------------------------- -- Written by : Gilberto Holms (https://gibaholms.wordpress.com/) -- Last update : 07/11/2014 -- Version : 1.1 -- Description : Utility code to handle Oracle SOA Suite tables -- Release notes: -- 1.0: Initial release -- 1.1: Bug fix to work properly on SOA 10g ------------------------------------------------------------------------------------------- FUNCTION GET_AUDIT_TRAIL(P_SCHEMA_NAME VARCHAR2, P_CIKEY NUMBER) RETURN CLOB; END SOA_UTIL; / CREATE OR REPLACE PACKAGE BODY SOA_UTIL AS ------------------------------------------------------------------------------------------- -- Written by : Gilberto Holms (https://gibaholms.wordpress.com/) -- Last update : 07/11/2014 -- Version : 1.1 -- Description : Utility code to handle Oracle SOA Suite tables -- Release notes: -- 1.0: Initial release -- 1.1: Bug fix to work properly on SOA 10g ------------------------------------------------------------------------------------------- FUNCTION GET_AUDIT_TRAIL(P_SCHEMA_NAME VARCHAR2, P_CIKEY NUMBER) RETURN CLOB AS V_AUDIT_BLOB BLOB; V_AUDIT_CLOB CLOB; V_CUR_AUDIT SYS_REFCURSOR; TYPE TP_AUDIT_RECORD IS RECORD( BLOCK NUMBER(38,0), LOG BLOB ); TYPE TP_AUDIT_ARRAY IS TABLE OF TP_AUDIT_RECORD; V_AUDIT_ARRAY TP_AUDIT_ARRAY; V_AUDIT_COMPLETE BLOB; V_BUFFER_LENGTH PLS_INTEGER := 32767; V_BUFFER VARCHAR2(32767); V_READ_START PLS_INTEGER := 1; BEGIN DBMS_LOB.CREATETEMPORARY(V_AUDIT_BLOB, TRUE); DBMS_LOB.CREATETEMPORARY(V_AUDIT_CLOB, TRUE); DBMS_LOB.CREATETEMPORARY(V_AUDIT_COMPLETE, TRUE); OPEN V_CUR_AUDIT FOR 'SELECT BLOCK, LOG FROM ' || P_SCHEMA_NAME || '.AUDIT_TRAIL WHERE CIKEY = :cikey ORDER BY COUNT_ID' USING P_CIKEY; FETCH V_CUR_AUDIT BULK COLLECT INTO V_AUDIT_ARRAY; CLOSE V_CUR_AUDIT; FOR j IN 1..V_AUDIT_ARRAY.COUNT LOOP IF j = 1 THEN DBMS_LOB.APPEND (V_AUDIT_BLOB, V_AUDIT_ARRAY(j).LOG); ELSE IF ( V_AUDIT_ARRAY(j).BLOCK = V_AUDIT_ARRAY(j-1).BLOCK ) THEN DBMS_LOB.APPEND (V_AUDIT_BLOB, V_AUDIT_ARRAY(j).LOG); ELSE DBMS_LOB.APPEND (V_AUDIT_COMPLETE, UTL_COMPRESS.LZ_UNCOMPRESS(V_AUDIT_BLOB)); DBMS_LOB.CREATETEMPORARY(V_AUDIT_BLOB, TRUE); DBMS_LOB.APPEND (V_AUDIT_BLOB, V_AUDIT_ARRAY(j).LOG); END IF; END IF; END LOOP; DBMS_LOB.APPEND (V_AUDIT_COMPLETE, UTL_COMPRESS.LZ_UNCOMPRESS(V_AUDIT_BLOB)); V_AUDIT_ARRAY.DELETE; FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(V_AUDIT_COMPLETE) / V_BUFFER_LENGTH) LOOP V_BUFFER := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(V_AUDIT_COMPLETE, V_BUFFER_LENGTH, V_READ_START)); DBMS_LOB.WRITEAPPEND(V_AUDIT_CLOB, LENGTH(V_BUFFER), V_BUFFER); V_READ_START := V_READ_START + V_BUFFER_LENGTH; END LOOP; RETURN V_AUDIT_CLOB; END; END SOA_UTIL; /
および使用例
SELECT ci.ecid, CI.COMPOSITE_NAME, SOA_UTIL.GET_AUDIT_TRAIL('DEV_SOAINFRA', CI.CIKEY) AS AUDIT_TRAIL_XML, ci.* FROM DEV_SOAINFRA.CUBE_INSTANCE CI WHERE CI.CREATION_DATE > to_date('21.04.2017 09:57:00','dd.mm.yyyy hh24:mi:ss') and CI.CREATION_DATE < to_date('21.04.2017 19:59:00','dd.mm.yyyy hh24:mi:ss') and CI.CREATION_DATE > sysdate-0.3 and SOA_UTIL.GET_AUDIT_TRAIL('DEV_SOAINFRA', CI.CIKEY) like '%40702810312080005917%';
写真はクリック可能です。
ここで複雑なことはありません
- システムリソースとメトリックを監視するために、素晴らしいパフォーマンスサマリータブがあります。
- 30秒ごとに1回SOAP要求をスタブに送信し、応答時間を測定するスクリプトがあります。 Grafana、Zabbix、Sitescopeのどれにでもねじ込むことができます
- 作業時には、ヒープのメモリを4096に増やす必要がありました。これは、16 GBのRAMを持つマシン自体です。
- クエリ履歴が大きくなると、それに応じてsoaスキーマも大きくなります。 表スペースを拡張する必要がありました。 コードはインターネットで見つけることができます、念のためにあげます
ALTER TABLESPACE DEV_SOAINFRA ADD DATAFILE 'C:\APP\KALISTRATOVKA\ORADATA\ORCL\DEV_SOAINFRA07.DBF' size 20000M AUTOEXTEND ON NEXT 100M MAXSIZE 20000M;
表スペースのサイズは、dba_tablespace_usage_metrics表で確認できます
おわりに
未知のものを取り上げることができ、そうすべきであり、間違いを恐れることはありません。 はい、私はEclipseよりもJDevが好きでした。
ソースへの参照:
http://www.oracle-adf.info/2014/03/oracle-soa-suite.html
https://shouab.wordpress.com/oracle-soa-11g-step-by-step-installation-guide/
http://www.theserverside.com/news/1364554/BPEL-and-Java
http://samolisov.blogspot.ru/2009/06/soa-bpel.html
http://docs.oracle.com/cd/E15586_01/integration.1111/e10224/bp_java.htm
https://gibaholms.wordpress.com/2014/02/03/export-audit-trail-from-database-soa-10g-and-11g/