Java EE developer's report

Preview:

DESCRIPTION

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

Citation preview

Java EE developer’s report

HASUNUMA KenjiVice president of GlassFish Japan Users Group

E-mail: k.hasunuma@miracle.ocn.ne.jpTwitter: @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

�����

hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト
hasunuma
タイプライターテキスト

������

���

����� ����

���� ���

�� �� �� ��

����

�� �� ��

������

��

����

��������

�� �� ��

����

����������

��� ���

�����

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

�������

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