Upload
kenji-hasunuma
View
19.108
Download
1
Embed Size (px)
DESCRIPTION
2012-07-12 WebLogic Server 勉強会 「Javaアプリ開発現場からの報告」発表資料
Citation preview
Java EE developer’s report
HASUNUMA KenjiVice president of GlassFish Japan Users Group
E-mail: [email protected]: @btnrouge
July 12, 2012
WebLogic Server 12c is
Java SE 7 Java EE 6
Readiness
Running WebLogic on JDK7Aim at “HotRockit”
2012年4月26日Java SE 7 Update 4
Java SE 6に替わる標準
Mac OS X 正式対応
JRockitの機能を一部取り込み
Project “HotRockit”
HotSpotとJRockitの統合
実態はHotSpotへの一本化
✓JITコンパイラー
✓ヒープ領域管理
✓ガベージ・コレクション
JITコンパイラー
HotSpot VM JRockit VM
設計思想
ネイティブコンパイル
汎用性重視 サーバーサイドに特化
実行頻度の高いコード コードの初回実行時
ネイティブコード最適化概ね最適化されている 最適化されない場合あり
インタープリター実行実行頻度の低いコード インタープリターなし
ヒープ領域管理
EdenSurvive
SurviveOld Permanent
Heap Permanent
New Old
Nursery Old
Heap
New Old
Sun HotSpot VM
BEA JRockit VM
EdenSurvive
SurviveOld
Heap
New Old
Nursery Old
Heap
New Old
Oracle HotSpot VM (HotRockit)
BEA JRockit VM
ガベージコレクション
JRockit VMHotSpot VM
Concurrent GC
レスポンス重視
Parallel GC
スループット重視Parallel GC
Parallel Old GC
Concurrent GC
Garbage First GC
Parallel GC
Mostly Concurrent GC
Deterministic GC
Deterministic GC移植予定
JDK7 Update 4HotSpot v23
First Preview of HotRockit
HotRockit最初の機能プレビュー
✓jcmd
✓Java Flight Recorder
✓New JMX Agent (MBean)
jcmd (ex. jrcmd)
JRockitのjrcmdをHotSpotに移植
コマンド書式は同じ:
jcmd <pid> <command...>
コマンド名はすべて変更:
ex. print_threads → Thread.print
jcmd/jrcmd コマンド対応表(1/2)jcmd jrcmd
ManagementAgent.stop kill_management_server
ManagementAgent.start_local start_management_server local
ManagementAgent.start start_management_server remote
Thread.print print_threads
GC.class_histogram print_object_summary
GC.heap_dump hprofdump
GC.run_finalization runfinalization
GC.run runsystemgc
help help
jcmd/jrcmd コマンド対応表(2/2)jcmd jrcmd
VM.uptime timestampVM.flags list_vmflagsVM.system_properties print_propertiesVM.command_line command_lineVM.version versionVM.commercial_features ----JFR.stop stop_flightrecordingJFR.start start_flightrecordingJFR.dump dump_flightrecordingJFR.check check_flightrecording
Java Flight Recorder(ex. JRockit Flight Recorder)
HotSpot版 JRockit Flight Recorder
フライト記録はJRockit互換
JRockit Mission Controlで読み込み可
※現時点では試験的実装
Usage:
•2つのVMオプションを設定-XX:+UnlockCommercialFeatures-XX:+FlightRecorder
• jcmdのJFR.*コマンドで開始・停止・ダンプ取得などが可能
New JMX Agent (MBean)
•JRockit互換のMBeanを装備
•HotSpotの状態をJRockit Mission Controlで監視可能
•VisualVMによる監視も可能
New features of Java SE 7
Java SE 7JSR 336
Spec Lead: Mark Reinhold
• [VM] JSR 292: Support for dynamically-typed languages (InvokeDynamic)
• [VM] JSR 202: Strict class-file checking• [Lang] JSR 334: Small language enhancements (Project
Coin)• [Core] Upgrade class-loader architecture• [Core] Method to close a URLClassLoader• [Core] JSR 166y: Concurrency and collections updates
(fork/join framework)• [I18N] Unicode 6.0• [I18N] Locale enhancement - IETF BCP 47, UTR 35
• [I18N] Separate user locale and user-interface locale• [I/O] JSR 203: More new I/O APIs for the Java platform
(NIO.2)• [I/O] TLS 1.2 - RFC 5246• [DB] JSR 221: JDBC 4.1• [Client] Create new platform APIs for 6u10 graphics
features• [Client] Nimbus look-and-feel for Swing• [Client] Swing JLayer component• [Web] Upgrade the XML stack - JAXP (JSR 206), JAXB
(JSR 222) and JAX-WS (JSR 224)
✓More New I/O (NIO.2)
✓Project Coin
More new I/O(a.k.a. NIO.2)JSR 203
Spec Lead: Alan Bateman
�����
������
���
����� ����
���� ���
�� �� �� ��
����
�� �� ��
������
��
����
��������
�� �� ��
����
����������
��� ���
�����
�������������������
�������
Project CoinJSR 334
Spec Lead: Joseph “Joe” Darcy
✓try-with-resources構文
✓multi-catch構文
✓安全な例外再スロー
✓ダイヤモンド演算子
✓switch構文の拡張
✓リテラル表現の改善
// try-with-resources サンプルtry (BufferedReader reader = Files.newBufferedReader( Paths.get("C:", "Windows", "win.ini"), Charset.defaultCharset()) ) {
while (reader.ready()) { System.out.println(reader.readLine()); }
} catch (IOException e) { e.printStackTrace();}
reader.close() は不要
自動的に解放するリソースを書く
finally も不要
// multi-catchサンプル// Pathsは NIO.2で追加されたクラスtry { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse( Paths.get("C:", "eclipse", "artifacts.xml").toFile()); System.out.println( document.getDocumentElement().getNodeName());} catch (ParserConfigurationException | SAXException | IOException e ) { e.printStackTrace();}
複数の例外をまとめてキャッチ&処理
// 安全な再スローのサンプル// 前提:以下の例外が throws に指定されている// ParserConfigurationException, SAXException, IOExceptiontry { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse( Paths.get("C:", "eclipse", "artifacts.xml").toFile()); System.out.println( document.getDocumentElement().getNodeName());} catch (final Exception e) { throw e;}
Exceptionでキャッチしても個別の例外で再スローできる
Java SE 6までList<String> strings = new ArrayList<String>();
Java SE 7からList<String> strings = new ArrayList<>();
( 省略できるよ! )
(どうせ同じなのに…)
// switch構文の仕様拡張(文字列による分岐)switch (crossroad) {case "ABLE": // 分岐条件に文字列が使える! System.out.println("ABLE test was done in July 1st, 1946."); break;case "BAKER": System.out.println("BAKER test was done in July 25th, 1946."); break;case "CHARLIE": System.out.println("CHARLIE test is cancelled."); break;default: System.out.println("N/A"); break;}
リテラル表現の改善
•アンダーバーによる桁区切り:1_200_000, 0xff_99_66
•二進数リテラルの導入:0b1000, 0B01100001
•組み合わせもOK:0b1000_0100_0110_0011
Java SE 7…多数の細かい変更•WebLogic開発者には不要な機能も…•有益な機能は積極的に活用しよう!!• NIO.2のファイルシステムAPI(使ってみると意外と便利)
• Project Coin(より使いやすくなったJava文法)
WebLogic powered by Java EE 6
Java EE 6JSR 316
Spec Lead: Bill Shannon, Roberto Chinnici
���� ���� �����
�����
��� ����������� ������
���������������
������
�������
���
���
���
���
������������������
������� �������
���
��
� � ��
�
��!
���"# ���"$
���"#������
�$
���� �$
���#
��
���
��%&������&��� �
��������'�#��(���� �)�����*
��� �������'+� *
��� �������'�� *
��� �������'�,%",� *
$�%!������ ��
�����
����
��������������
���� ���� �����
�����
��� ����������� ������
���������������
������
�������
���
���
���
���
������������������
������� �������
���
��
� � ��
�
��!
���"# ���"$
���"#������
�$
���� �$
���#
��
���
��%&������&��� �
��������'�#��(���� �)�����*
��� �������'+� *
��� �������'�� *
��� �������'�,%",� *
$�%!������ ��
�����
����
��������������
���� ���� �����
�����
��� ����������� ������
���������������
������
�������
���
���
���
���
������������������
������� �������
���
��
� � ��
�
��!
���"# ���"$
���"#������
�$
���� �$
���#
��
���
��%&������&��� �
��������'�#��(���� �)�����*
��� �������'+� *
��� �������'�� *
��� �������'�,%",� *
$�%!������ ��
�����
����
��������������
����������
������
�������
�������
��������� ! ����
������
��
������
"�#�$������������%��
� ��&#�#�#������%��
JAX-RS 1.1JSR 311
Spec Lead: Marc Hadley, Paul Santoz
RESTの三原則
•リソース•メソッド (リソースの操作)•URI (リソースの識別)
静的なWebサイトはRESTである
事実上SOAPと対立する概念
�����
������
�����
������
��� ���������
���������
���� ���������
��� ���������
����� ���������
�������� �����
�������� �����
�������� �����
�������� �����
������������ � �����
�������� ��
������������ ���� �
������������ ������
�������������
�������������
�������������
������������ � �����
��������
������������ ���� �
������������ ������
����� �����
�������� �
����������
�������������
�������������
�������������
HTML5 & JavaScript
リッチクライアントの復権
•スマートフォン・タブレット端末•JavaFXサーバーサイドページの限界
EJB 3.1JSR 318
Spec Lead: Kenneth “Ken” Saks
@Stateless , @Stateful , @Singleton
•トランザクション管理が不要•WARファイルに入れられる
•現仕様ではPOJOとして実装
JPA 2.0JSR 317
Spec Lead: Linda DeMichiel
����
JDBCより効率が良い
•キャッシュメモリー(L1/L2)
•トランザクション最適化大半のオンライン処理で有効
����� �����
�� �
�����������������
�� �
�������������������
�� �
�����������������
�� �
�����������������
�� �
�������������������
� � � �
���������������
�����������������
������� �������������������������
������ ���� ���� ���� ����
����������� ����������� ����������� ����������� �����������
JDBCトランザクション
executeUpdateの度にJDBCがSQL発行→①~⑤のすべてでDBアクセスが発生
����� �����
������
���� ���������� ��
������
���� �������� ��
������
���� ������ ��
������
���� ���������� ��
������
���� ������ ��
����
���� �������� ��
����
���� �������� ��
����
���� �������� ��
����
���� �������� ��
����
���� ������ ��
� � � �
���� �� ��
������ ������� ������� ������� �������
JPAトランザクション
最終的に辻褄が合えば過程はどうでもよい→②~④ではDBアクセスは発生しない
CDI 1.0JSR 299
Spec Lead: Gavin King
������
�������
�����
������
��������������������������
��������������
�������������
������
�������
�����
������
������������������
�������������
��������
�������� �
������
������
����� ���������������������
����
����� ���������
��������
����������������
����������������
�������������
��������
�������� �
������
���
���������������
���������
��������� ������
��������� ������
�������
���������������������
Java SE 7/Java EE 6を阻むもの
•未知の技術に対する恐怖•外圧 :•政治的要因 •無能なアーキテクトの存在•自社ツール・フレームワークの強要
Java SE 7/Java EE 6 は難しくない
Java EE Developer’s reportHASUNUMA Kenji
July 12, 2012 #wlstudy