82
Java EE developer’s report HASUNUMA Kenji Vice president of GlassFish Japan Users Group E-mail: [email protected] Twitter: @btnrouge July 12, 2012

Java EE developer's report

Embed Size (px)

DESCRIPTION

2012-07-12 WebLogic Server 勉強会 「Javaアプリ開発現場からの報告」発表資料

Citation preview

Page 1: Java EE developer's report

Java EE developer’s report

HASUNUMA KenjiVice president of GlassFish Japan Users Group

E-mail: [email protected]: @btnrouge

July 12, 2012

Page 2: Java EE developer's report

WebLogic Server 12c is

Java SE 7 Java EE 6

Readiness

Page 3: Java EE developer's report

Running WebLogic on JDK7Aim at “HotRockit”

Page 4: Java EE developer's report

2012年4月26日Java SE 7 Update 4

Java SE 6に替わる標準

Mac OS X 正式対応

JRockitの機能を一部取り込み

Page 5: Java EE developer's report

Project “HotRockit”

Page 6: Java EE developer's report

HotSpotとJRockitの統合

実態はHotSpotへの一本化

Page 7: Java EE developer's report

✓JITコンパイラー

✓ヒープ領域管理

✓ガベージ・コレクション

Page 8: Java EE developer's report

JITコンパイラー

Page 9: Java EE developer's report

HotSpot VM JRockit VM

設計思想

ネイティブコンパイル

汎用性重視 サーバーサイドに特化

実行頻度の高いコード コードの初回実行時

ネイティブコード最適化概ね最適化されている 最適化されない場合あり

インタープリター実行実行頻度の低いコード インタープリターなし

Page 10: Java EE developer's report

ヒープ領域管理

Page 11: Java EE developer's report

EdenSurvive

SurviveOld Permanent

Heap Permanent

New Old

Nursery Old

Heap

New Old

Sun HotSpot VM

BEA JRockit VM

Page 12: Java EE developer's report

EdenSurvive

SurviveOld

Heap

New Old

Nursery Old

Heap

New Old

Oracle HotSpot VM (HotRockit)

BEA JRockit VM

Page 13: Java EE developer's report

ガベージコレクション

Page 14: Java EE developer's report

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移植予定

Page 15: Java EE developer's report

JDK7 Update 4HotSpot v23

First Preview of HotRockit

Page 16: Java EE developer's report

HotRockit最初の機能プレビュー

✓jcmd

✓Java Flight Recorder

✓New JMX Agent (MBean)

Page 17: Java EE developer's report

jcmd (ex. jrcmd)

Page 18: Java EE developer's report

JRockitのjrcmdをHotSpotに移植

コマンド書式は同じ:

jcmd <pid> <command...>

コマンド名はすべて変更:

ex. print_threads → Thread.print

Page 19: Java EE developer's report

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

Page 20: Java EE developer's report

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

Page 21: Java EE developer's report

Java Flight Recorder(ex. JRockit Flight Recorder)

Page 22: Java EE developer's report

HotSpot版 JRockit Flight Recorder

フライト記録はJRockit互換

JRockit Mission Controlで読み込み可

※現時点では試験的実装

Page 23: Java EE developer's report

Usage:

•2つのVMオプションを設定-XX:+UnlockCommercialFeatures-XX:+FlightRecorder

• jcmdのJFR.*コマンドで開始・停止・ダンプ取得などが可能

Page 24: Java EE developer's report

New JMX Agent (MBean)

Page 25: Java EE developer's report

•JRockit互換のMBeanを装備

•HotSpotの状態をJRockit Mission Controlで監視可能

•VisualVMによる監視も可能

Page 26: Java EE developer's report
Page 27: Java EE developer's report
Page 28: Java EE developer's report
Page 29: Java EE developer's report

New features of Java SE 7

Page 30: Java EE developer's report

Java SE 7JSR 336

Spec Lead: Mark Reinhold

Page 31: Java EE developer's report
Page 32: Java EE developer's report

• [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

Page 33: Java EE developer's report

• [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)

Page 34: Java EE developer's report

✓More New I/O (NIO.2)

✓Project Coin

Page 35: Java EE developer's report

More new I/O(a.k.a. NIO.2)JSR 203

Spec Lead: Alan Bateman

Page 36: Java EE developer's report
Page 37: Java EE developer's report

�����

hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
Page 38: Java EE developer's report
Page 39: Java EE developer's report

������

Page 40: Java EE developer's report

���

����� ����

���� ���

Page 41: Java EE developer's report

�� �� �� ��

����

�� �� ��

������

��

����

��������

�� �� ��

����

Page 42: Java EE developer's report

����������

��� ���

�����

�������������������

�������

Page 43: Java EE developer's report

Project CoinJSR 334

Spec Lead: Joseph “Joe” Darcy

Page 44: Java EE developer's report
Page 45: Java EE developer's report

✓try-with-resources構文

✓multi-catch構文

✓安全な例外再スロー

✓ダイヤモンド演算子

✓switch構文の拡張

✓リテラル表現の改善

Page 46: Java EE developer's report

// 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 も不要

Page 47: Java EE developer's report

// 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();}

複数の例外をまとめてキャッチ&処理

Page 48: Java EE developer's report

// 安全な再スローのサンプル// 前提:以下の例外が 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でキャッチしても個別の例外で再スローできる

Page 49: Java EE developer's report

Java SE 6までList<String> strings = new ArrayList<String>();

Java SE 7からList<String> strings = new ArrayList<>();

( 省略できるよ! )

(どうせ同じなのに…)

Page 50: Java EE developer's report

// 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;}

Page 51: Java EE developer's report

リテラル表現の改善

•アンダーバーによる桁区切り:1_200_000, 0xff_99_66

•二進数リテラルの導入:0b1000, 0B01100001

•組み合わせもOK:0b1000_0100_0110_0011

Page 52: Java EE developer's report

Java SE 7…多数の細かい変更•WebLogic開発者には不要な機能も…•有益な機能は積極的に活用しよう!!• NIO.2のファイルシステムAPI(使ってみると意外と便利)

• Project Coin(より使いやすくなったJava文法)

Page 53: Java EE developer's report

WebLogic powered by Java EE 6

Page 54: Java EE developer's report

Java EE 6JSR 316

Spec Lead: Bill Shannon, Roberto Chinnici

Page 55: Java EE developer's report
Page 56: Java EE developer's report

���� ���� �����

�����

��� ����������� ������

���������������

������

�������

���

���

���

���

������������������

������� �������

���

��

� � ��

��!

���"# ���"$

���"#������

�$

���� �$

���#

��

���

��%&������&��� �

��������'�#��(���� �)�����*

��� �������'+� *

��� �������'�� *

��� �������'�,%",� *

$�%!������ ��

�����

����

��������������

Page 57: Java EE developer's report

���� ���� �����

�����

��� ����������� ������

���������������

������

�������

���

���

���

���

������������������

������� �������

���

��

� � ��

��!

���"# ���"$

���"#������

�$

���� �$

���#

��

���

��%&������&��� �

��������'�#��(���� �)�����*

��� �������'+� *

��� �������'�� *

��� �������'�,%",� *

$�%!������ ��

�����

����

��������������

Page 58: Java EE developer's report

���� ���� �����

�����

��� ����������� ������

���������������

������

�������

���

���

���

���

������������������

������� �������

���

��

� � ��

��!

���"# ���"$

���"#������

�$

���� �$

���#

��

���

��%&������&��� �

��������'�#��(���� �)�����*

��� �������'+� *

��� �������'�� *

��� �������'�,%",� *

$�%!������ ��

�����

����

��������������

Page 59: Java EE developer's report

����������

������

�������

�������

��������� ! ����

������

��

������

"�#�$������������%��

� ��&#�#�#������%��

Page 60: Java EE developer's report

JAX-RS 1.1JSR 311

Spec Lead: Marc Hadley, Paul Santoz

Page 61: Java EE developer's report

RESTの三原則

•リソース•メソッド (リソースの操作)•URI (リソースの識別)

静的なWebサイトはRESTである

事実上SOAPと対立する概念

Page 62: Java EE developer's report

�����

������

�����

������

��� ���������

���������

���� ���������

��� ���������

����� ���������

�������� �����

�������� �����

�������� �����

�������� �����

Page 63: Java EE developer's report

������������ � �����

�������� ��

������������ ���� �

������������ ������

�������������

�������������

�������������

Page 64: Java EE developer's report

������������ � �����

��������

������������ ���� �

������������ ������

����� �����

�������� �

����������

�������������

�������������

�������������

Page 65: Java EE developer's report

HTML5 & JavaScript

リッチクライアントの復権

•スマートフォン・タブレット端末•JavaFXサーバーサイドページの限界

Page 66: Java EE developer's report

EJB 3.1JSR 318

Spec Lead: Kenneth “Ken” Saks

Page 67: Java EE developer's report
Page 68: Java EE developer's report

@Stateless , @Stateful , @Singleton

•トランザクション管理が不要•WARファイルに入れられる

•現仕様ではPOJOとして実装

Page 69: Java EE developer's report

JPA 2.0JSR 317

Spec Lead: Linda DeMichiel

Page 70: Java EE developer's report
Page 71: Java EE developer's report

����

Page 72: Java EE developer's report

JDBCより効率が良い

•キャッシュメモリー(L1/L2)

•トランザクション最適化大半のオンライン処理で有効

Page 73: Java EE developer's report

����� �����

�� �

�����������������

�� �

�������������������

�� �

�����������������

�� �

�����������������

�� �

�������������������

� � � �

���������������

�����������������

������� �������������������������

������ ���� ���� ���� ����

����������� ����������� ����������� ����������� �����������

JDBCトランザクション

executeUpdateの度にJDBCがSQL発行→①~⑤のすべてでDBアクセスが発生

Page 74: Java EE developer's report

����� �����

������

���� ���������� ��

������

���� �������� ��

������

���� ������ ��

������

���� ���������� ��

������

���� ������ ��

����

���� �������� ��

����

���� �������� ��

����

���� �������� ��

����

���� �������� ��

����

���� ������ ��

� � � �

���� �� ��

������ ������� ������� ������� �������

JPAトランザクション

最終的に辻褄が合えば過程はどうでもよい→②~④ではDBアクセスは発生しない

Page 75: Java EE developer's report

CDI 1.0JSR 299

Spec Lead: Gavin King

Page 76: Java EE developer's report

������

�������

�����

������

��������������������������

��������������

Page 77: Java EE developer's report

�������������

������

�������

�����

������

������������������

Page 78: Java EE developer's report

�������������

��������

�������� �

������

������

����� ���������������������

����

����� ���������

��������

����������������

����������������

Page 79: Java EE developer's report

�������������

��������

�������� �

������

���

���������������

���������

��������� ������

��������� ������

�������

���������������������

Page 80: Java EE developer's report

Java SE 7/Java EE 6を阻むもの

•未知の技術に対する恐怖•外圧 :•政治的要因 •無能なアーキテクトの存在•自社ツール・フレームワークの強要

Page 81: Java EE developer's report

Java SE 7/Java EE 6 は難しくない

Page 82: Java EE developer's report

Java EE Developer’s reportHASUNUMA Kenji

July 12, 2012 #wlstudy