Cisco WebEx Meetings Server 管理ガイド リリース 2...CSR(証明書署名リクエスト)の生成244 SSL証明書をインポートする245 SSL証明書をエクスポート247
サポートエンジニアが語る。WebLogic Server...
-
Upload
oracle-fusion-middleware -
Category
Technology
-
view
1.389 -
download
0
Transcript of サポートエンジニアが語る。WebLogic Server...
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
サポートエンジニアが語る。 WebLogic Server リクエスト処理フロー見える化! 第 58 回 WebLogic Server 勉強会@東京
日本オラクル株式会社 Fusion Middleware 製品サポート 東 健太郎 (Azuma, Kentaro) 2016 年 7 月 21 日
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
2
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
はじめに
検証アプリケーションの動作シナリオ説明
各ポイントでの見える化実践
Java Flight Recorder からの見える化
まとめ
1
2
3
4
5
3
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
はじめに
検証アプリケーションの動作シナリオ説明
各ポイントでの見える化実践
Java Flight Recorder からの見える化
まとめ
1
2
3
4
5
4
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
日々、サポートへいろいろな問い合わせがあります
•サーバが応答しません
• アプリと DB は問題ないはずなので、WLS がだめみたいです
• トランザクションが動いていないみたいです
• WLS ってどんなふうに動いていますか?
5
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
私たちも特別なツールは持っていません
•一般のツールやコマンドなどを使って問題の調査をします
•欲しい情報が得られるように工夫しています
• デバッグログやダンプなどとじっくり向き合う地味な作業もあります・・・
6
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
見える化しましょう
•製品サポートの経験から得られたいくつかの有用な Tips を共有します
• WebLogic Server (WLS) のこんな処理フローも見えるようになります
7
–HTTP (SOAP) リクエスト / レスポンス
–Web サービス (JAX-WS サーブレット)
–Enterprise Java Beans (EJB)
– Java Persistence API (JPA)
–トランザクション (JTA)
–データソース / JDBC ドライバ / データベース
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
こんな人たちに聞いてほしいです
• WLS や Java EE について基本的な理解があるエンジニア
• WLS 上で動く Java EE アプリの開発をしている方や、これから始める方
•製品サポートへ WLS についての SR を登録する機会のある方
•今後の問題調査やトラブルシュートに役立てて頂けると嬉しいです!
8
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
はじめに
検証アプリケーションの動作シナリオ説明
各ポイントでの見える化実践
Java Flight Recorder からの見える化
まとめ
1
2
3
4
5
9
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
使用したソフトウェア / 仕様のバージョン
• Oracle WebLogic Server 12.2.1.0.0 – JDBC Thin Driver 12.1.0.2.0
• Java SE 1.8.0_66 – Java Flight Recorder 5.5.0
• Java EE 7.0 – Servlet 3.0
– JAX-WS 2.0
– EJB 3.0
– JPA 2.0
• Oracle JDeveloper 12.2.1.0.0
• Oracle Database 11.2.0.4.0
10
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
リクエスト処理フローの全体図
11
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
SOAP Client (soapUI)
Database
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
トランザクションの境界
12
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
EJB から Database まで
SOAP Client (soapUI)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
ECID で関連づけできる範囲
13
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Client から Database まですべて
SOAP Client (soapUI)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
ECID って?
• Execution Context ID (実行コンテキスト ID)
• WLS や Database を流れるリクエストを一意に識別できる識別子
• フォーマットの例 : 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020
• ECID に着目することで、リクエストの流れを紐付けて追うことができます
14
※ 参考情報 [Java, WLS, FMW] Using Diagnostic Context for Correlation (日本語) https://orablogs-jp.blogspot.jp/2015/12/using-diagnostic-context-for-correlation.html 12.5.1 メッセージの関連付けでのECIDおよびRIDの理解 http://docs.oracle.com/cd/E72987_01/core/ASADM/logs.htm#CIHDHJIG
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
リクエスト処理シーケンス
15
Data Source
SQL Insert
lock table ...
Web Service EJB JTA JDBC
SOAP Client rollback
Oracle Database
JPA
SOAP Request
SOAP Response
Rollback 実行まで、 SQL Insert 文はブロックされる
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
はじめに
検証アプリケーションの動作シナリオ説明
各ポイントでの見える化実践
Java Flight Recorder からの見える化
まとめ
1
2
3
4
5
16
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) リクエスト / レスポンスの確認
17
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) リクエスト・ヘッダの確認 [soapUI] : [Request] –> [Raw (tab)]
18
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) リクエスト・ボディの確認 [soapUI] : [Request] –> [XML (tab)]
19
COMM = 900 DEPTNO = 30 EMPNO = 9999 ENAME = SHERYL HIREDATE = 1986-07-31T00:00:00+09:00 JOB=SALESMAN MGR=7698 SAL=2000
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) レスポンス・ヘッダの確認 [soapUI] : [Response] -> [Raw (tab)]
20
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) レスポンス・ボディの確認. [soapUI] : [Response] -> [XML (tab)]
21
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
データベースに Insert / Commit されたデータの確認
22
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
データベースに Insert / Commit されたデータの確認. [SQL*Plus] : 検証アプリケーション実行後の SELECT 結果
23
SQL> SELECT * FROM scott.emp ORDER BY empno DESC; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------- -------- --------- ------ ------------------- ------ ------ -------- 9999 SHERYL SALESMAN 7698 1986-07-31/00:00:00 2000 900 30 7934 MILLER CLERK 7782 1982-01-23/00:00:00 1300 10 7902 FORD ANALYST 7566 1981-12-03/00:00:00 3000 20 ... ...
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) リクエスト / レスポンスのパケットを確認
24
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) リクエスト / レスポンスのパケットを確認 [Wireshark] : [packet list pane]
25
SOAP リクエスト・ヘッダ SOAP リクエスト・ボディ
...
SOAP レスポンス・ヘッダ SOAP レスポンス・ボディ
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) リクエスト・ヘッダのパケットを確認 [Wireshark] : [packet bytes pane]
26
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) リクエスト・ボディのパケットを確認 [Wireshark] : [packet bytes pane]
27
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) レスポンス・ヘッダのパケットを確認 [Wireshark] : [packet bytes pane]
28
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP (SOAP) レスポンス・ボディのパケットを確認 [Wireshark] : [packet bytes pane]
29
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Wireshark を使ったパケットダンプの取得
•パケットキャプチャの開始ウィザードを起動する
30
※ 参考情報 Wireshark https://www.wireshark.org/
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
tcpdump を使ったパケットダンプの取得.
• tcpdump コマンドを実行する
31
※ 参考情報 【tcpdump】ネットワークトラフィックをダンプ出力する http://itpro.nikkeibp.co.jp/article/COLUMN/20140512/556024/?rt=nocnt
$ su – # tcpdump -i eth0 -w packetdump.dmp tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes ... ^C 42 packets captured 44 packets received by filter 0 packets dropped by kernel
※ バイナリ (-w) で出力することで、パケットダンプを Wireshark で解析できます
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP Server を流れるリクエストを確認
32
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP アクセスログの確認 [access.log]
33
#Version: 1.0 #Fields: c-ip s-ip date time cs-method cs-uri sc-status bytes time-taken ctx-ecid ctx-rid #Software: WebLogic # Start-Date: 2016-06-27 11:59:49 ... 10.188.146.159 10.185.152.210:8001 2016-06-27 11:59:49 POST /SampleClient/SessionEJBWebServicePort 200 458 23.357 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 0 ... ECID も出力することができる
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP アクセスログの設定 [WLS Console] : [Servers] –> [<server-name>] –> [Logging] –> [HTTP]
34
...
c-ip s-ip date time cs-method cs-uri sc-status bytes time-taken ctx-ecid ctx-rid
※ 参考情報 12.1.1 Oracle Fusion Middleware HTTPアクセス・ロギングの理解 http://docs.oracle.com/cd/E72987_01/core/ASADM/logs.htm#CIHEHEEB
拡張ログ・フォーマット
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP デバッグログから HTTP リクエスト・ヘッダを確認 [DebugHttp] : HTTP Request Header
35
※ 実際は 1 行
####<Jun 27, 2016 11:59:26 AM JST> <Debug> <Http> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> <1466996366184> ... invoking servlet for : weblogic.servlet.internal.ServletRequestImpl@599a3e95[ POST /SampleClient/SessionEJBWebServicePort HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: application/soap+xml;charset=UTF-8 Content-Length: 533 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5) ]>
Server Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTP デバッグログから HTTP レスポンス・ヘッダを確認 [DebugHttp] : HTTP Response Header
36
※ 実際は 1 行
####<Jun 27, 2016 11:59:49 AM JST> <Debug> <Http> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <Response committed. request: 'HttpRequest@1503280789 - /SampleClient/SessionEJBWebServicePort' response: weblogic.servlet.internal.ServletResponseImpl@2a4a4ced[ HTTP/1.1 200 OK Date: : Mon, 27 Jun 2016 02:59:26 GMT Content-Length: : 458 Content-Type: : application/soap+xml; charset=utf-8 X-ORACLE-DMS-ECID: 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 X-ORACLE-DMS-RID: 0 ]>
Server Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
HTTPデバッグログの設定. [WLS Console] : [Servers] –> [<server-name>] –> [Debug]
37
...
※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)
...
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Web サービス (Servlet + JAX-WS) を流れるリクエストを確認
38
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Servlet フィルタを使って HTTP リクエストを確認
39
### SessionEJBWebServiceFilter.doFilter - Started ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ HTTP Request Headers ------------------------ Content-Type : application/soap+xml;charset=UTF-8 Content-Length : 533 Host : 10.185.152.210:8001 ------------------------ HTTP Request Body ------------------------ <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:cli="http://client/"> <soap:Header/> <soap:Body> <cli:persistEmp><arg0> ... <empno>9999</empno> <ename>SHERYL</ename> ... </arg0></cli:persistEmp> </soap:Body> </soap:Envelope>
Stdout Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Servlet フィルタを使って HTTP レスポンスを確認
40
### SessionEJBWebServiceFilter.doFilter - Finished ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ HTTP Response Headers ------------------------ X-ORACLE-DMS-ECID : 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 X-ORACLE-DMS-RID : 0 ------------------------ HTTP Response Body ------------------------ <S:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <env:Header/> <S:Body> <ns0:persistEmpResponse xmlns:ns0="http://client/"><return> ... <empno>9999</empno> <ename>SHERYL</ename> ... </return></ns0:persistEmpResponse> </S:Body> </S:Envelope>
Stdout Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Servlet フィルタの設定 [SessionEJBWebServiceFilter.java] : Servlet フィルタ実装クラス
41
@WebFilter(filterName = "WebServiceFilter", servletNames = { "SessionEJBWebServicePort" }) public class SessionEJBWebServiceFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) ... { System.out.println("### SessionEJBWebServiceFilter.doFilter - Started ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); printRequestHeaders(req); printRequestBody(req); chain.doFilter(req, res); // <-- ここで Servlet を実行する System.out.println("### SessionEJBWebServiceFilter.doFilter - Finished ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); printResponseHeaders(res); printResponseBody(res); }
weblogic.diagnostics.context.DiagnosticContextHelper.getContextId()
※ 参考情報 javax.servlet.annotation Annotation Type WebFilter https://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebFilter.html
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
アプリケーションでの ECID 文字列の取得
• DiagnosticContextHelper.getContextId() で ECID 文字列を取得できる
•サーバの診断コンテキストを有効化しておく必要がある
42
※ 参考情報 [WLS] WebLogic Server?Use the Execution Context ID in Applications?Lessons From Hansel and Gretel (日本語) https://orablogs-jp.blogspot.jp/2011/06/weblogic-serveruse-execution-context-id.html weblogic.diagnostics.context Class DiagnosticContextHelper http://docs.oracle.com/middleware/1221/wls/WLAPI/weblogic/diagnostics/context/DiagnosticContextHelper.html
[WLS Console] : [Diagnostics] –> [Context]
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
SOAP メッセージハンドラを使って SOAP リクエストを確認
43
### SessionEJBSOAPHandler.handleMessage ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ SOAP Inbound (Request) Envelope ------------------------ <soap:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:cli="http://client/"> <soap:Header/> <soap:Body> <cli:persistEmp><arg0> ... <empno>9999</empno> <ename>SHERYL</ename> ... </arg0></cli:persistEmp> </soap:Body> </soap:Envelope>
Stdout Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
SOAPメッセージハンドラを使って SOAP レスポンスを確認
44
### SessionEJBSOAPHandler.handleMessage ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ SOAP Outbound (Response) Envelope ------------------------ <S:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:S="http://www.w3.org/2003/05/soap-envelope"> <env:Header/> <S:Body> <ns0:persistEmpResponse xmlns:ns0="http://client/"><return> ... <empno>9999</empno> <ename>SHERYL</ename> ... </return></ns0:persistEmpResponse> </S:Body> </S:Envelope>
Stdout Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
SOAP メッセージハンドラの設定 (1) [SessionEJBSOAPHandler.java] : SOAP ハンドラ実装クラス
45
※ 実際は 1 行
public class SessionEJBSOAPHandler implements SOAPHandler<SOAPMessageContext> { @Override public boolean handleMessage(SOAPMessageContext context) { System.out.println("### SessionEJBSOAPHandler.handleMessage ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); // ... SOAPMessage soapMessage = context.getMessage(); SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); System.out.println("------------------------ SOAP " + direction + " Envelope ------------------------"); System.out.println(soapEnvelope); } ※ 参考情報
18 SOAPメッセージ・ハンドラの作成と使用 http://docs.oracle.com/cd/E72987_01/wls/WSGET/jax-ws-soaphandlers.htm javax.xml.ws.handler.soap Interface SOAPHandler<T extends SOAPMessageContext> https://docs.oracle.com/javaee/7/api/javax/xml/ws/handler/soap/SOAPHandler.html
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
SOAP メッセージハンドラの設定 (2) [sessionejb-soap-handler-chain.xml] : ハンドラチェイン定義ファイル
46
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> <handler-chain> <handler> <handler-class>handler.SessionEJBSOAPHandler</handler-class> </handler> </handler-chain> </handler-chains>
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
SOAP メッセージハンドラの設定 (3).. [SessionEJBWebService.java] : JAX-WS Servlet クラス
47
@WebService(serviceName = "SessionEJBWebService") @HandlerChain(file = "../handler/sessionejb-soap-handler-chain.xml") @BindingType(SOAPBinding.SOAP12HTTP_BINDING) public class SessionEJBWebService { @WebMethod public Emp persistEmp(@WebParam(name = “arg0”) Emp emp) { // ... Emp _emp = sessionEJB.persistEmp(emp); // <-- ここで EJB のメソッドを実行する // ... return _emp; }
Emp 表への永続化のために公開している Web サービスのオペレーション
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
EJB (Stateless Session Bean) の処理を確認
48
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
EJB インターセプタを使って処理するデータを確認
49
### SessionEJBInterceptor.intercept - Started ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ------------------------ EJB Method Parameters ------------------------ sample.Emp@6e07fada[comm=900,deptno=30,empno=9999,ename=SHERYL,hiredate=Thu Jul 31 00:00:00 JST 1986,job=SALESMAN,mgr=7698,sal=2000] ... ### SessionEJBBean.persistEmp ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0 ... ### SessionEJBInterceptor.intercept - Finished ### ECID = 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020, RID = 0
EJB メソッド実行中
EJB メソッド実行後
EJB メソッド実行前
Stdout Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
EJB インターセプタの設定 (1) [SessionEJBInterceptor.java] : EJB インターセプタクラス
50
※ 実際は 1 行
public class SessionEJBInterceptor { @AroundInvoke public Object intercept(InvocationContext context) throws Exception { // ... System.out.println("### SessionEJBInterceptor.intercept - Started ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); System.out.println("------------------------ EJB Method Parameters ------------------------"); for (Object obj : context.getParameters()) { if(obj.getClass().getName().equals("sample.Emp")) System.out.println(((Emp)obj).toString()); } Object result = context.proceed(); // <-- ここで EJB のメソッドを実行する System.out.println("### SessionEJBInterceptor.intercept - Finished ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID());
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
EJB インターセプタの設定 (2). [SessionEJBBean.java] : EJB Stateless Session Bean クラス
51
@Stateless(name = "SessionEJB", mappedName = "SessionEJB") @Interceptors(SessionEJBInterceptor.class) public class SessionEJBBean implements SessionEJB, SessionEJBLocal { // ... @TransactionAttribute(TransactionAttributeType.REQUIRED) public Emp persistEmp(Emp emp) { System.out.println("### SessionEJBBean.persistEmp ### ECID = " + DiagnosticContextHelper.getContextId() + ", RID = " + DiagnosticContextHelper.getRID()); em.persist(emp); // ここで JPA のメソッドを実行する (Database にデータを永続化 (Insert) する) // ... } ※ 参考情報
javax.interceptor Annotation Type AroundInvoke https://docs.oracle.com/javaee/7/api/javax/interceptor/AroundInvoke.html javax.interceptor Annotation Type Interceptors https://docs.oracle.com/javaee/7/api/javax/interceptor/Interceptors.html
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
EJB デバッグログから処理を確認 [DebugEjbInvoke]
52
※ 実際は 1 行
####<Jun 27, 2016 11:59:26 AM JST> <Debug> <EjbInvoke> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[BaseRemoteObject] preInvoke called with: ... Method: persistEmp(sample.Emp) TransactionAttribute: REQUIRED on remote interface of EJB: SessionEJB> ####<Jun 27, 2016 11:59:27 AM JST> <Debug> <EjbInvoke> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[BaseRemoteObject] Committing our tx: Name=[EJB sample.SessionEJBBean.persistEmp(sample.Emp)],Xid=BEA1-0000301B662DD776A418(866435730), ...> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <EjbInvoke> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[BaseRemoteObject] Committing our tx: SUCCESS>
トランザクションの開始
トランザクションのコミット成功
トランザクションのコミット開始と XID の確認
Server Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
EJBデバッグログの設定. [WLS Console] : [Servers] –> [<server-name>] –> [Debug]
53
...
...
...
※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
トランザクションを確認
54
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
SOAP Client (soapUI)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
管理コンソールを使用した確認 [WLS Console] : [Servers] -> [<server-name>] –> [Monitoring] –> [JTA] –> [Transactions]
55
...
実行中のトランザクション
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
データベース上で実行中のトランザクションを確認 [SQL*Plus]
56
SQL> SELECT globalid, branchid, formatid, state FROM v$global_transaction; GLOBALID BRANCHID FORMATID STATE -------------------- ---------------------------------------- -------- ------ 0000301B662DD776A418 53616D706C6544535F626173655F646F6D61696E 48801 ACTIVE
※ 参考情報 V$GLOBAL_TRANSACTION http://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_1168.htm#sthref3362
WLS 上で確認したトランザクション BEA1-0000301B662DD776A418 に相当
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
トランザクションデバッグログを確認 [DebugJTA2PC]
57
####<Jun 27, 2016 11:59:49 AM JST> <Debug> <JTA2PC> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <... : [EJB sample.SessionEJBBean.persistEmp(sample.Emp)]: TX[BEA1-0000301B662DD776A418] preparing-->prepared> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <JTA2PC> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <XAResource[SampleDS_base_domain].commit (xid=BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, ...)> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <JTA2PC> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <... : [EJB sample.SessionEJBBean.persistEmp(sample.Emp)]: TX[BEA1-0000301B662DD776A418] committing-->committed>
Server Log
トランザクションコミット前の準備フェーズ
トランザクションのコミット成功
トランザクションのコミット開始
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
トランザクションデバッグログの設定. [WLS Console] : [Servers] –> [<server-name>] –> [Debug]
58
...
...
...
※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JPA (EclipseLink) の処理を確認
59
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JPA (EclipseLink) のデバッグログを確認 [DebugJpaJdbcJdbc, DebugJpaJdbcSql]
60
####<Jun 27, 2016 11:59:27 AM JST> <Debug> <EclipseLink> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[DebugJpaJdbcJdbc] ... --persist() operation called on: sample.Emp@6e07fada[comm=900,deptno=30,empno=9999,ename=SHERYL,hiredate=Thu Jul 31 00:00:00 JST 1986,job=SALESMAN,mgr=7698,sal=2000].> ####<Jun 27, 2016 11:59:27 AM JST> <Debug> <EclipseLink> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[DebugJpaJdbcSql] ... --INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (?, ?, ?, ?, ?, ?, ?, ?) bind => [9999, 900, 30, SHERYL, 1986-07-31, SALESMAN, 7698, 2000]> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <EclipseLink> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[DebugJpaJdbcJdbc] ... --TX afterCompletion callback, status=COMMITTED>
Server Log
永続化 (Insert) 処理の開始
トランザクションのコミット成功
実行 SQL (Insert) 文の確認
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JPA (EclipseLink) のデバッグログの設定 (1) [WLS Console] : [Servers] –> [<server-name>] –> [Debug]
61
...
...
...
※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JPA (EclipseLink) のデバッグログの設定 (2).. [persistence.xml] : データベースとの設定情報定義ファイル
62
<persistence ... version="2.0"> <persistence-unit name="SamplePU" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>SampleDS</jta-data-source> <class>sample.Emp</class> <properties> <property name="eclipselink.logging.level" value="FINEST"/> <property name="eclipselink.target-server" value="WebLogic_12"/> <property name="eclipselink.target-database" value="Oracle11"/> </properties> </persistence-unit> </persistence>
※ 参考情報 Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 5.1.4 ロギング http://docs.oracle.com/cd/E72987_01/toplink/jpa-extensions-reference/persistenceproperties_ref.htm#sthref733
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Data Source が管理するデータベース接続を確認
63
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
v$session ビューからデータベース接続を確認 [SQL*Plus] : 検証アプリケーション実行直後の SELECT 結果
64
SQL> SELECT s.sid,s.serial#,s.username,s.program,s.machine,s.sql_id,s.prev_sql_id,p.spid,s.ecid,q.sql_text,q.last_active_time 2 FROM v$session s, v$sql q, v$process p 3 WHERE q.sql_id = (CASE WHEN s.sql_id IS NOT NULL THEN s.sql_id ELSE s.prev_sql_id END) 4 and s.username = 'SCOTT' and s.program like '%SampleDS%' and s.paddr = p.addr 5 ORDER BY q.last_active_time DESC; SID SERIAL# USERNAME PROGRAM MACHINE --- ------- -------- -------------------------------- ---------------------- 29 5 SCOTT JDBC Thin - SampleDS on Server-0 kazuma01.jp.oracle.com SQL_ID PREV_SQL_ID SPID ECID ------------- ------------- ---- --------------------------------------------- 1bkaadbg3pq92 1bkaadbg3pq92 4432 7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020 SQL_TEXT LAST_ACTIVE_TIME ---------------------------------------------------------------------------------------------------- ------------------- INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (:1 , :2 , :3 , :4 , :5 2016-06-27/11:59:48
※ 参考情報 Oracle Databaseリファレンス http://docs.oracle.com/cd/E16338_01/server.112/b56311/toc.htm
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Data Source のデバッグログを確認 [JDBCSQL]
65
####<Jun 27, 2016 11:59:27 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... prepareStatement(INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (?, ?, ?, ?, ?, ?, ?, ?))> ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setInt(1, 9999)> ... ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setString(4, SHERYL)> ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setDate(5, 1986-07-31)> ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <JDBCSQL> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... setString(6, SALESMAN)> ...
Server Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Data Source のデバッグログの設定 [WLS Console] : [Servers] –> [<server-name>] –> [Debug]
66
...
...
...
※ 参考情報 Note:1755211.1 WebLogic Server におけるデバッグログの取得方法について (KROWN:152352)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
v$session ビューの PROGRAM 列へ特定の文字列を設定 [WLS Console] : [Services] –> [Data Sources] –> [Configuration] –> [Connection Pool]
67
...
※ 参考情報 [WLS] Setting V$SESSION for a WLS Datasource (日本語) https://orablogs-jp.blogspot.jp/2014/08/setting-vsession-for-wls-datasource.html [WLS, Database, FMW] Data Source System Property Enhancement in WLS 12.2.1 (日本語) https://orablogs-jp.blogspot.jp/2015/11/data-source-system-property-enhancement.html
v$session.program=JDBC Thin - SampleDS on Server-0
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
v$session ビューの ECID 列へ ECID 値を設定 (1) [WLS Console] : [Services] –> [Data Sources] –> [Configuration] –> [Diagnostics]
68
...
Driver Interceptor=diag. JDBCDriverInterceptor
※ 参考情報 JDBC Data Source: Configuration: Diagnostics - Driver Interceptor http://docs.oracle.com/cd/E72987_01/wls/WLACH/pagehelp/JDBCjdbcdatasourcesjdbcdatasourceconfigdiagnosticstitle.html ドライバ・レベルの統計をモニタリングするためのコールバック(非推奨) http://docs.oracle.com/cd/E72987_01/wls/JDBCA/monitor.htm#sthref108
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
v$session ビューの ECID 列へ ECID 値を設定 (2) [JDBCDriverInterceptor.java] : DriverInterceptor 実装クラス
69
public class JDBCDriverInterceptor implements DriverInterceptor { @Override public Object preInvokeCallback(Object obj, String mtd, Object[] objs) throws SQLException { if (o.getClass().getName().matches("oracle¥¥.jdbc¥¥.driver¥¥.OraclePreparedStatement.*") && mtd.equals("executeUpdate")) { Connection conn = (Connection)((PreparedStatement)obj).getConnection(); conn.setClientInfo("OCSID.ECID", weblogic.diagnostics.context.DiagnosticContextHelper.getContextId()); // ... } // ...
※ 参考情報 weblogic.jdbc.extensions Interface DriverInterceptor (Deprecated) http://docs.oracle.com/cd/E72987_01/wls/WLAPI/weblogic/jdbc/extensions/DriverInterceptor.html setClientInfo Method https://docs.oracle.com/cd/E49329_01/java.121/b71308/jdbcvers.htm#BABDAEEC java.sql インタフェース Connection http://docs.oracle.com/javase/jp/7/api/java/sql/Connection.html
ECID をクライアント情報プロパティとしてデータベースに設定
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
v$session ビューの ECID 列へ ECID 値を設定 (3)..
• PRE_CLASSPATH 環境変数を使用
• <domain-home>/lib にライブラリを配置
DriverInterceptor 実装クラスを含むライブラリを WLS のクラスパスに配置
70
$ export PRE_CLASSPATH=<work-dir>/SampleDiagnostics.jar ... $ cd <domain-home>/bin $ ./startManagedWebLogic.sh <server-name> ...
<domain-home>/lib/SampleDiagnostics.jar
どちらの方法でもライブラリを WLS のクラスパスに配置できる
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver (Thin XA) が処理するデータを確認
71
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver のトランザクションデバッグログを確認 [oracle.jdbc.xa.client]
72
####<Jun 27, 2016 11:59:26 AM JST> <Debug> <oracle.jdbc.xa.client> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.xa.client.OracleXAResource:start] EB40847 Public Enter: BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, 0> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <oracle.jdbc.xa.client> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.xa.client.OracleXAResource:end] EB40847 Public Enter: BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, 67108864> ####<Jun 27, 2016 11:59:49 AM JST> <Debug> <oracle.jdbc.xa.client> ... <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.xa.client.OracleXAResource:commit] EB40847 Public Enter: BEA1-0000301B662DD776A418-53616D706C6544535F626173655F646F6D61696E, true>
Server Log
トランザクション・ブランチの開始
トランザクション・ブランチのコミット
トランザクション・ブランチの終了
※ 参考情報 oracle.jdbc.xa.client Class OracleXAResource http://docs.oracle.com/cd/E57425_01/121/JAJDB/oracle/jdbc/xa/client/OracleXAResource.html
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver の実行 SQL デバッグログを確認 [oracle.jdbc.driver]
73
####<Jun 27, 2016 11:59:27 AM JST> <Trace> <oracle.jdbc.driver> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.driver.T4CPreparedStatement:<init>] 69945535 Enter: oracle.jdbc.driver.T4CConnection@1d8a0869, "INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", -1, -1> ... ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <oracle.jdbc.driver> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.driver.OraclePreparedStatement:setInt] 69945535 Public Enter: 1, 9999> ... ####<Jun 27, 2016 11:59:28 AM JST> <Debug> <oracle.jdbc.driver> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.jdbc.driver.OraclePreparedStatement:setString] 69945535 Public Enter: 4, "SHERYL“> ...
Server Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver の送受信パケットを確認 (1) [oracle.net.ns]
74
####<Jun 27, 2016 11:59:29 AM JST> <Trace> <oracle.net.ns> ... <BEA1-0000301B662DD776A418> <7b80c4eb-acad-4a13-b677-eeff11508e2d-00000020> ... <[oracle.net.ns.DataPacket:send] 532EF555 Debug: Packet size=417 ... 00 00 37 62 38 30 63 34 |..7b80c4| 65 62 2D 61 63 61 64 2D |eb-acad-| 34 61 31 33 2D 62 36 37 |4a13-b67| 37 2D 65 65 66 66 31 31 |7-eeff11| 35 30 38 65 32 64 2D 30 |508e2d-0| 30 30 30 30 30 32 30 03 |0000020.| ... (続く)
Server Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver の送受信パケットを確認 (2) [oracle.net.ns]
75
00 01 00 00 00 00 00 49 |.......I| 4E 53 45 52 54 20 49 4E |NSERT.IN| 54 4F 20 45 4D 50 20 28 |TO.EMP.(| 45 4D 50 4E 4F 2C 20 43 |EMPNO,.C| 4F 4D 4D 2C 20 44 45 50 |OMM,.DEP| 54 4E 4F 2C 20 45 4E 41 |TNO,.ENA| 4D 45 2C 20 48 49 52 45 |ME,.HIRE| 44 41 54 45 2C 20 4A 4F |DATE,.JO| 42 2C 20 4D 47 52 2C 20 |B,.MGR,.| 53 41 4C 29 20 56 41 4C |SAL).VAL| 55 45 53 20 28 3A 31 20 |UES.(:1.| 2C 20 3A 32 20 2C 20 3A |,.:2.,.:| ... (続く)
Server Log
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver の送受信パケットを確認 (3). [oracle.net.ns]
76
33 20 2C 20 3A 34 20 2C |3.,.:4.,| 20 3A 35 20 2C 20 3A 36 |.:5.,.:6| 20 2C 20 3A 37 20 2C 20 |.,.:7.,.| 3A 38 20 29 01 01 01 01 |:8.)....| ... 03 C2 64 64 02 C2 0A 02 |..dd....| C1 1F 06 53 48 45 52 59 |...SHERY| 4C 07 77 BA 07 1F 01 01 |L.w.....| 01 08 53 41 4C 45 53 4D |..SALESM| 41 4E 03 C2 4D 63 02 C2 |AN..Mc..| 15 |. | ...
SQL> SELECT dump(hiredate, 16) FROM scott.emp WHERE empno = 9999; DUMP(HIREDATE,16) ------------------------------ Typ=12 Len=7: 77,ba,7,1f,1,1,1 1986-07-31/00:00:00
Typ=2 : NUMBER 型
Typ=12 : DATE 型
※ 参考情報 Oracleの組込みデータ型 http://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements001.htm#i54330
Server Log
9999
SQL> SELECT dump(9999, 16) FROM dual; DUMP(9999,16) --------------------- Typ=2 Len=3: c2,64,64
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver のデバッグログの設定 (1) [OracleLog.properties] : デバッグログ設定ファイル
77
java.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter handlers = java.util.logging.ConsoleHandler ... oracle.jdbc.xa.level = FINEST oracle.jdbc.xa.client.level = FINEST oracle.jdbc.driver.level = FINEST oracle.net.ns.level = FINEST ...
実行 SQL を確認
トランザクションを確認
送受信パケットを確認
※ 参考情報 JDBCロギングの有効化と使用 https://docs.oracle.com/cd/E49329_01/java.121/b71308/diagnose.htm#sthref983 Enable native Oracle JDBC logging for WebLogic Server (Doc ID 1249585.1) How To Log SQL Statement/PreparedStatement of Oracle SQL Driver in WebLogic Server (Doc ID 1352042.1)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver のデバッグログの設定 (2).. WLS の起動方法
78
$ export PRE_CLASSPATH=<oracle-home>/oracle_common/modules/oracle.jdbc/ojdbc7_g.jar $ export JAVA_OPTIONS="-Doracle.jdbc.Trace=true -Djava.util.logging.config.file=<work-dir>/OracleLog.properties $JAVA_OPTIONS“ ... $ cd <domain-home>/bin $ ./startManagedWebLogic.sh <server-name> ...
※ 参考情報 JDBCロギングの有効化と使用 https://docs.oracle.com/cd/E49329_01/java.121/b71308/diagnose.htm#sthref983 Enable native Oracle JDBC logging for WebLogic Server (Doc ID 1249585.1) How To Log SQL Statement/PreparedStatement of Oracle SQL Driver in WebLogic Server (Doc ID 1352042.1)
JDBC デバッグ用 JAR ファイル
ロギングを有効化 ロギング構成ファイルの指定
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC Driver とデータベース間の送受信パケットを確認
79
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle Net Trace を確認 (1) [svr_4432.trc (svr_<SPID>.trc)]
80
[27-JUN-2016 11:59:29:183] nsbasic_brc: packet dump ... [27-JUN-2016 11:59:29:183] nsbasic_brc: 00 00 37 62 38 30 63 34 |..7b80c4| [27-JUN-2016 11:59:29:183] nsbasic_brc: 65 62 2D 61 63 61 64 2D |eb-acad-| [27-JUN-2016 11:59:29:183] nsbasic_brc: 34 61 31 33 2D 62 36 37 |4a13-b67| [27-JUN-2016 11:59:29:183] nsbasic_brc: 37 2D 65 65 66 66 31 31 |7-eeff11| [27-JUN-2016 11:59:29:183] nsbasic_brc: 35 30 38 65 32 64 2D 30 |508e2d-0| [27-JUN-2016 11:59:29:183] nsbasic_brc: 30 30 30 30 30 32 30 03 |0000020.| ... (続く)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle Net Trace を確認 (2) [svr_4432.trc (svr_<SPID>.trc)]
81
[27-JUN-2016 11:59:29:183] nsbasic_brc: 00 01 00 00 00 00 00 49 |.......I| [27-JUN-2016 11:59:29:183] nsbasic_brc: 4E 53 45 52 54 20 49 4E |NSERT.IN| [27-JUN-2016 11:59:29:183] nsbasic_brc: 54 4F 20 45 4D 50 20 28 |TO.EMP.(| [27-JUN-2016 11:59:29:183] nsbasic_brc: 45 4D 50 4E 4F 2C 20 43 |EMPNO,.C| [27-JUN-2016 11:59:29:183] nsbasic_brc: 4F 4D 4D 2C 20 44 45 50 |OMM,.DEP| [27-JUN-2016 11:59:29:183] nsbasic_brc: 54 4E 4F 2C 20 45 4E 41 |TNO,.ENA| [27-JUN-2016 11:59:29:183] nsbasic_brc: 4D 45 2C 20 48 49 52 45 |ME,.HIRE| [27-JUN-2016 11:59:29:183] nsbasic_brc: 44 41 54 45 2C 20 4A 4F |DATE,.JO| [27-JUN-2016 11:59:29:184] nsbasic_brc: 42 2C 20 4D 47 52 2C 20 |B,.MGR,.| [27-JUN-2016 11:59:29:184] nsbasic_brc: 53 41 4C 29 20 56 41 4C |SAL).VAL| [27-JUN-2016 11:59:29:184] nsbasic_brc: 55 45 53 20 28 3A 31 20 |UES.(:1.| [27-JUN-2016 11:59:29:184] nsbasic_brc: 2C 20 3A 32 20 2C 20 3A |,.:2.,.:| ... (続く)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle Net Trace を確認 (3). [svr_4432.trc (svr_<SPID>.trc)]
82
[27-JUN-2016 11:59:29:184] nsbasic_brc: 33 20 2C 20 3A 34 20 2C |3.,.:4.,| [27-JUN-2016 11:59:29:184] nsbasic_brc: 20 3A 35 20 2C 20 3A 36 |.:5.,.:6| [27-JUN-2016 11:59:29:184] nsbasic_brc: 20 2C 20 3A 37 20 2C 20 |.,.:7.,.| [27-JUN-2016 11:59:29:184] nsbasic_brc: 3A 38 20 29 01 01 01 01 |:8.)....| ... [27-JUN-2016 11:59:29:184] nsbasic_brc: 03 C2 64 64 02 C2 0A 02 |..dd....| [27-JUN-2016 11:59:29:184] nsbasic_brc: C1 1F 06 53 48 45 52 59 |...SHERY| [27-JUN-2016 11:59:29:184] nsbasic_brc: 4C 07 77 BA 07 1F 01 01 |L.w.....| [27-JUN-2016 11:59:29:184] nsbasic_brc: 01 08 53 41 4C 45 53 4D |..SALESM| [27-JUN-2016 11:59:29:184] nsbasic_brc: 41 4E 03 C2 4D 63 02 C2 |AN..Mc..| [27-JUN-2016 11:59:29:184] nsbasic_brc: 15 |. | [27-JUN-2016 11:59:29:184] nsbasic_brc: exit: oln=0, dln=407, tot=417, rc=0
※ 参考情報 Oracle Net Servicesのトレース・ファイルの評価 http://docs.oracle.com/cd/E16338_01/network.112/b56288/trouble.htm#i459469
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle Net Trace を trcasst で検証 [svr_4432.trc (svr_<SPID>.trc)]
83
$ trcasst svr_4432.trc ... Start Timestamp : 27-JUN-2016 11:52:08:018 End Timestamp : 27-JUN-2016 12:03:23:456 ... ORACLE NET SERVICES: Total Calls : 20 sent, 21 received, 0 oci Total Bytes : 5475 sent, 5731 received Average Bytes: 273 sent per packet, 272 received per packet Maximum Bytes: 2349 sent, 2585 received Grand Total Packets: 20 sent, 21 received ※ 参考情報
トレース・アシスタントを使用したトレース・ファイルの検証 http://docs.oracle.com/cd/E16338_01/network.112/b56288/trouble.htm#i459188
送受信パケットの統計情報を出力
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle Net Trace の設定. [<oracle-home>/network/admin/sqlnet.ora] : Oracle Net Services の設定ファイル
84
TRACE_LEVEL_SERVER=16 TRACE_TIMESTAMP_SERVER=ON TRACE_DIRECTORY_SERVER= <oracle-home>/network/trace DIAG_ADR_ENABLED=OFF
※ 参考情報 SQL*Net/Net8/Oracle Net Servicesのトレースの取得方法(KROWN:13481) (Doc ID 1703086.1) sqlnet.oraファイルのトレース・パラメータ http://docs.oracle.com/cd/E16338_01/network.112/b56288/trouble.htm#i435776
※ 設定後に新規に作られたデータベース接続から Net Trace が開始されます
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Database が処理するデータを確認
85
WLS Managed Server (Server-0)
HTTP Server (Embedded)
Web Service (Servlet + JAX-WS)
Database
Web Container
EJB (Stateless Session Bean)
JTA (Javax.transaction.TransactionManager) Data Source
SOAP Client (soapUI)
EJB Container
Transaction Manager
JDBC Driver (Thin XA)
JPA (EclipseLink)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle SQL Trace を確認 (1) [orcl_ora_4432_SCOTT.trc (<SID>_ora_<SPID>_<scheme-name>.trc)] : SQL のパース
86
===================== PARSING IN CURSOR #140122095372064 len=117 dep=0 uid=83 oct=2 lid=83 tim=1466996369185199 hv=3728398626 ad='63f76b50' sqlid='1bkaadbg3pq92' INSERT INTO EMP (EMPNO, COMM, DEPTNO, ENAME, HIREDATE, JOB, MGR, SAL) VALUES (:1 , :2 , :3 , :4 , :5 , :6 , :7 , :8 ) END OF STMT PARSE #140122095372064:c=1000,e=614,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1466996369185198 ===================== ... (続く)
※ 参考情報 TKPROFにかける前のSQLトレースのファイルの解析(KROWN:53665) (Doc ID 1718603.1) Interpreting Raw SQL_TRACE output (Doc ID 39817.1)
1466996369185198 = 2016/06/27 11:59:29.185198 (エポック (1970/01/01) からのマイクロミリ秒)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle SQL Trace を確認 (2) [orcl_ora_4432_SCOTT.trc (<SID>_ora_<SPID>_<scheme-name>.trc)] : 変数のバインド
87
BINDS #140122095372064: Bind#0 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=01 csi=873 siz=192 off=0 kxsbbbfp=7f70b7f5ca70 bln=22 avl=03 flg=05 value=9999 ... Bind#3 oacdty=01 mxl=32(24) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000010 frm=01 csi=873 siz=0 off=72 kxsbbbfp=7f70b7f5cab8 bln=32 avl=06 flg=01 value="SHERYL" ... (続く)
oacdtv=02 : NUMBER 型
※ 参考情報 Oracleの組込みデータ型 http://docs.oracle.com/cd/E16338_01/server.112/b56299/sql_elements001.htm#i54330
oacdtv=01 : VARCHAR2 型
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle SQL Trace を確認 (3). [orcl_ora_4432_SCOTT.trc (<SID>_ora_<SPID>_<scheme-name>.trc)] : トランザクションのコミット
88
XCTEND rlbk=0, rd_only=0, tim=1466996389252541
※ 参考情報 COMMITやROLLBACKが行われたタイミングについて(KROWN:22776) (Doc ID 1706879.1)
XCTEND はトランザクションの終了を表す rlbk=0 : コミット rlbk=1 : ロールバック
1466996389252541 = 2016/06/27 11:59:49.252541 (エポック (1970/01/01) からのマイクロミリ秒)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle SQL Trace の設定 (1)
• データベース・接続レベルでの設定
• データベース・インスタンスレベルでの設定
89
※ 参考情報 event 10046 と sql_trace の関係 (alter文で動的に設定した場合の動作)(KROWN:27357) (Doc ID 1708940.1)
※ 設定後のデータベース接続でその後すぐに SQL Trace が開始されます
設定 :
SQL> alter session set events '10046 trace name context forever, level 12' 設定解除 :
SQL> alter session set events '10046 trace name context off'
※ 設定後に新規に作られたデータベース接続から SQL Trace が開始されます
設定 :
SQL> alter system set events '10046 trace name context forever, level 12' 設定解除 :
SQL> alter system set events '10046 trace name context off‘
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle SQL Trace の設定 (2)
• event 10046 の level による違い
90
※ 参考情報 event 10046 と sql_trace の関係 (alter文で動的に設定した場合の動作)(KROWN:27357) (Doc ID 1708940.1)
level 1 : 通常の SQL Trace
level 4 : level 1 の内容 + バインド変数の情報
level 8 : level 1 の内容 + WAIT event の情報
level 12 : level 1 の内容 + バインド変数の情報 + WAIT event の情報
※ デバッグ目的であれば、通常は level 12 を設定して下さい
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Oracle SQL Trace の設定 (3)..
• トリガーの設定
• トリガーの設定解除
ログオントリガーを使用した特定スキーマの SQL Trace の取得
91
SQL> CREATE OR REPLACE TRIGGER logontrig AFTER logon ON database 2 begin 3 if ora_login_user = 'SCOTT' then 4 execute immediate 'alter session set tracefile_identifier = '||'SCOTT'; 5 execute immediate 'alter session set events ''10046 trace name context forever, level 12'''; 6 end if; 7 end; 8 /
※ 参考情報 LOGON トリガーを使用して SOA Suite が実行する SQL をトレースする方法(KROWN:156209) (Doc ID 1758802.1)
SQL> DROP TRIGGER logontrig;
データベース・接続レベルでの SQL Trace 取得を有効化
SQL Trace ファイル名に含める文字列を設定
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
はじめに
検証アプリケーションの動作シナリオ説明
各ポイントでの見える化実践
Java Flight Recorder からの見える化
まとめ
1
2
3
4
5
92
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
前章の見える化アプローチと比較したときのメリット
• リクエストに紐づく情報を GUI で確認できる
• Java アプリケーションコードの変更、再ビルド、再デプロイは必要ない
•管理コンソールなどでの設定変更は必要ない
• デバッグログなどの設定は必要ない
93
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
前章の見える化アプローチと比較したときのデメリット
•調査に必要な情報を必ず得られるとは限らない
•得られない情報を確認する場合は、別途詳細アプローチが必要
94
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorder は標準の Java SE に付属している
• Java Flight Recorder を使用可能なバージョン – Oracle Java SE 7 Update 40 以降
– Oracle Java SE 8
95
※ Java SE の他に追加インストールは必要ありません
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorder は商用機能です
•本番環境での商用利用の場合はライセンスが必要です – Oracle Java SE Advanced または Oracle Java SE Suite
– Oracle WebLogic Server Enterprise Edition または Oracle WebLogic Server Suite
96
※ WLS EE は Oracle Java SE Advanced を含みます ※ WLS Server Suite は WLS EE を含みます
Oracle Fusion Middlewareライセンス情報ユーザー・マニュアル 2.2 Oracle WebLogic Server http://docs.oracle.com/cd/E68912_01/doc.1213/FMWLC/products2.htm#CHCJBBEG
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorder のフライト記録確認の流れ
• Java Flight Recorder (JFR) は JVM からファイルへフライト記録を出力する
• Java Mission Control (JMC) でフライト記録を開いて内容を GUI で確認する
97
フライト記録
Servlet
JavaVM
JDBC
Java Mission Control Java Flight Recorder
JVM
WLS
Java アプリ
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
ECID に関連するイベントの確認 [WebLogic (タブ) ] – [ECID ]
98
...
特定の ECID に紐付くイベントのみを一覧できる
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
ECID に関連するイベントのグラフ [イベント (タブ) ] – [グラフ ]
99
Servlet
JDBC
EJB
Java
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Servlet 実行イベントの情報 [イベント (タブ) ] – [グラフ ]
100
Servlet
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
EJB 実行イベントの情報 [イベント (タブ) ] – [グラフ ]
101
EJB
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
JDBC 実行イベントの情報 [イベント (タブ) ] – [グラフ ]
102
JDBC
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Socket Read (Java) 実行イベントの情報 (1) [イベント (タブ) ] – [グラフ ]
103
Java
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Socket Read (Java) 実行イベントの情報 (2). [イベント (タブ) ] – [ログ ]
104
...
すべてのスタックを確認できる
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
WebLogic Server プラグインのインストール [WebLogic (タブ) ] 表示と使用のため
105
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
フライト記録の取得開始 (1)
• フライト記録の開始ウィザードを起動
106
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
フライト記録の取得開始 (2)
•記録方法を設定
107
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
フライト記録の取得開始 (3)
•記録オプションを設定
108
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
フライト記録の取得開始 (4).
•記録が開始していることを確認
109
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
フライト記録のダンプ
•記録をダンプしてファイルへ出力
110
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Java Mission Control の使い方
• Java Mission Control オンラインヘルプ
111
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Java Flight Recorder についての参考情報
•製品ドキュメント
• Advisor Webcast 資料
112
Java Platform, Standard Editionトラブルシューティング・ガイド (日本語) http://docs.oracle.com/javase/jp/8/docs/technotes/guides/troubleshoot/ Java Platform, Standard Edition Troubleshooting Guide (英語) http://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/ Java Mission Control ドキュメント http://docs.oracle.com/javacomponents/jp/index.html jcmd コマンド http://docs.oracle.com/javacomponents/jp/jmc-5-5/jfr-runtime-guide/comline.htm java コマンド http://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/java.html
Advisor Webcast : Java Flight Recorder でサクサクすすむ WebLogic Serverトラブルシューティン グ (Doc ID 2100914.1)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Program Agenda
はじめに
検証アプリケーションの動作シナリオ説明
各ポイントでの見える化実践
Java Flight Recorder からの見える化
まとめ
1
2
3
4
5
113
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
まとめ
•情報の見える化によって動作の把握や問題個所の切り分けができます
•各ポイントでの詳細調査のお供に、Java Flight Recorder も役に立ちます
•ぜひ今後の問題調査やトラブルシュートに役立ててください!
• ありがとうございました
114
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 115
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 116