Javaアプリ開発現場からの報告
 

Javaアプリ開発現場からの報告

on

  • 1,853 views

Javaアプリ開発の効率アップのためには、Java SE 7, Java EE 6といった最新技術を活用することが有効です。...

Javaアプリ開発の効率アップのためには、Java SE 7, Java EE 6といった最新技術を活用することが有効です。
最新のJDK 7でWebLogic Serverを動かして何が変わるか、Java EE 6のアプリ開発プロジェクトのアプローチなど、
私が経験したJava最新技術ネタを紹介します。

Statistics

Views

Total Views
1,853
Views on SlideShare
1,853
Embed Views
0

Actions

Likes
2
Downloads
31
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Javaアプリ開発現場からの報告 Javaアプリ開発現場からの報告 Presentation Transcript

  • July 12, 2012Java EE developer’s report HASUNUMA Kenji Vice president of GlassFish Japan Users Group E-mail: k.hasunuma@miracle.ocn.ne.jp Twitter: @btnrouge
  • WebLogic Server 12c is Java SE 7 Java EE 6 Readiness
  • Running WebLogic on JDK7 Aim at “HotRockit”
  • 2012年4月26日Java SE 7 Update 4Java SE 6に替わる標準Mac OS X 正式対応JRockitの機能を一部取り込み
  • Project “HotRockit”
  • HotSpotとJRockitの統合実態はHotSpotへの一本化
  • ✓JITコンパイラー✓ヒープ領域管理✓ガベージ・コレクション
  • JITコンパイラー
  • HotSpot VM JRockit VM 汎用性重視 設計思想 サーバーサイドに特化実行頻度の低いコード インタープリター実行 インタープリターなし実行頻度の高いコード ネイティブコンパイル コードの初回実行時概ね最適化されている ネイティブコード最適化 最適化されない場合あり
  • ヒープ領域管理
  • Sun HotSpot VM Survive Eden Old Permanent Survive New Old Heap PermanentBEA JRockit VM Nursery Old New Old Heap
  • Oracle HotSpot VM (HotRockit) Survive Eden Old Survive New Old HeapBEA JRockit VM Nursery Old New Old Heap
  • ガベージコレクション
  • HotSpot VM JRockit VMParallel GC Parallel GCスループット重視 Parallel Old GC Parallel GC Concurrent GC Mostly Concurrent GCConcurrent GC Garbage First 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 jrcmdManagementAgent.stop kill_management_serverManagementAgent.start_local start_management_server localManagementAgent.start start_management_server remoteThread.print print_threadsGC.class_histogram print_object_summaryGC.heap_dump hprofdumpGC.run_finalization runfinalizationGC.run runsystemgchelp help
  • jcmd/jrcmd コマンド対応表(2/2) jcmd jrcmdVM.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 7 JSR 336Spec 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 Coin JSR 334Spec 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()); } reader.close() は不要} catch (IOException e) { e.printStackTrace();} 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 6 JSR 316Spec Lead: Bill Shannon, Roberto Chinnici
  • JAX-RS 1.1 JSR 311Spec Lead: Marc Hadley, Paul Santoz
  • RESTの三原則•リソース•メソッド (リソースの操作)• URI (リソースの識別)静的なWebサイトはRESTである事実上SOAPと対立する概念
  • HTML5 & JavaScriptリッチクライアントの復権 • スマートフォン・タブレット端末 • JavaFXサーバーサイドページの限界
  • EJB 3.1 JSR 318Spec Lead: Kenneth “Ken” Saks
  • @Stateless , @Stateful , @Singleton •トランザクション管理が不要 •WARファイルに入れられる •現仕様ではPOJOとして実装
  • JPA 2.0 JSR 317Spec Lead: Linda DeMichiel
  • JDBCより効率が良い•キャッシュメモリー(L1/L2)• トランザクション最適化大半のオンライン処理で有効
  • JDBCトランザクション executeUpdateの度にJDBCがSQL発行 →①∼⑤のすべてでDBアクセスが発生
  • JPAトランザクション 最終的に辻褄が合えば過程はどうでもよい →②∼④ではDBアクセスは発生しない
  • CDI 1.0 JSR 299Spec Lead: Gavin King
  • Java SE 7/Java EE 6を阻むもの•未知の技術に対する恐怖• 外圧 : • 政治的要因 • 無能なアーキテクトの存在 • 自社ツール・フレームワークの強要
  • Java SE 7/Java EE 6 は難しくない
  • Java EE Developer’s report HASUNUMA Kenji July 12, 2012 #wlstudy