110707 java se7_lt_tanaka

24
田田 田田 2011/07/07 1 田田田田田田田田田田田田 Java SE 7 田田田田田田田

Transcript of 110707 java se7_lt_tanaka

Page 1: 110707 java se7_lt_tanaka

1

田中 孝佳

2011/07/07

業務アプリ開発者から見たJava SE 7 に期待すること

Page 2: 110707 java se7_lt_tanaka

2

自己紹介 ㈱ワークスアプリケーションズ所属

ERP パッケージの会社です 研究部門 クラウド担当

お仕事 サーバーサイド Java で開発

クライアントは Silverlight 使ったり Oracle DB の調査担当 自動化できる処理は大抵 Java バッチで書く

スクリプト言語より Java が好み

2011/07/07

Page 3: 110707 java se7_lt_tanaka

3

ちょっと昔を思い出して・・・

2011/07/07

社会人になってからプログラミングを本格的に始めました 最初は Java

当時は 2007 年 すでに Java SE 6 が出てました

なので、最初から Generics ありの世界でした

Java SE 7 が、私がプログラミングを始めてから

最初の Java のバージョンアップです

Page 4: 110707 java se7_lt_tanaka

4

というわけで・・・ 思い入れのある Java の

バージョンアップに関して、業務アプリ開発者の視点から期待していることを話します

2011/07/07

Page 5: 110707 java se7_lt_tanaka

5

業務アプリでの Java の使いどころ アプリケーションサーバー

SE じゃないけど、 SE の技術は使われる

JavaEE7 に期待! 特にクラウドと銘打たれているあたり

バッチ処理 インストーラーなど管理ツール

2011/07/07

Page 6: 110707 java se7_lt_tanaka

6

注目している VerUP 内容機能追加系

• JSR 166y(Fork/Join)• JSR 203• 新しいファイルシステム API• NIO2

ソースコードがすっきり系

• JSR 334(Project Coin)• リソース付 try-catch• String による switch• 例外のマルチキャッチ• ダイアモンド ( 型推論 )

2011/07/07

Page 7: 110707 java se7_lt_tanaka

7

IDE の対応状況NetBeans

• 7.0 で対応済み• 今回のサンプルコードもこれで書きました。

Eclipse

• Indigo(3.7) SR1 にて対応予定 (9 月頃? )

IntelliJ

• 10.5 で対応済み

JDeveloper

• 情報が見つからず・・・

2011/07/07

Page 8: 110707 java se7_lt_tanaka

8

Fork/Join のないとき Java6 の並行処理

ExecutorService をよく使っていました タスクに依存関係がないのが前提です

タスクに依存関係があると 安全性を担保するためには、

適切な排他制御が必要 するとパフォーマンスが落ちる or

排他制御が漏れてデッドロックが起きる 結局、適用しづらかった

依存性のないようにタスクを設計する必要あり

2011/07/07

Page 9: 110707 java se7_lt_tanaka

9

Fork/Join のあるとき 分割統治なタスクの並行処理がしやすくなる

グループごとに集計して、その結果をグループ同士で演算するとか

でも、そんなに単純に使えるケースばかりでもなさそう Java SE 8 への期待

Concurrent Framework のさらなる発展 ラムダ式と組み合わさった機能

コレクションの要素に対する演算を裏で勝手に並行処理してくれるとか。

2011/07/07

Page 10: 110707 java se7_lt_tanaka

10

NIO2: ファイルシステム API インストーラーなどで結構使います 所有者、アクセス権の変更とかも意外と必要

鍵ファイルを読み取り専用にするとか

java.nio.attribute.AclFileAttributeViewで所有者とか ACL を操作できる ファイルシステムに依存

2011/07/07

Page 11: 110707 java se7_lt_tanaka

11

NIO2: ファイルシステム API java.nio.file.SimpleFileVisitor

でディレクトリを Visitor 的に探索できる java.nio.file.WatchService

でディレクトリを監視できる このあたりの機能の起点は、

java.nio.file.Files クラス

2011/07/07

Page 12: 110707 java se7_lt_tanaka

12

java.nio.file.Files クラス

2011/07/07

Page 13: 110707 java se7_lt_tanaka

13

NIO2:Socket チャネルなどの低レベル通信も、

管理ツールなどで使います

余談ですが、 java.nio 配下のクラスはパッケージプライベートクラスのいい活用事例として読んでいます

2011/07/07

Page 14: 110707 java se7_lt_tanaka

14

ソースコードすっきり系 業務アプリでは(でも?)

保守性高いコードは必須 今までは結構面倒な書き方が必要だった Project Coin ですっきりできます

ほかの方の LT とかぶりそうなのでさらっと。

2011/07/07

Page 15: 110707 java se7_lt_tanaka

15

リソースを使ったら片付けましょう

2011/07/07

途中で例外が発生すると、正常にクローズされません。finally節に close を移すと、そこで発生する SQLException を処理するという面倒なことに

Page 16: 110707 java se7_lt_tanaka

16

リソース付の try~catch で綺麗に

2011/07/07

これで、あの忌々しい try~catch のネストともおさらば!

Page 17: 110707 java se7_lt_tanaka

17

String による条件分岐の連発

2011/07/07

Stringだと、 if文の連発になる。Enum を使おうとすると、 String との対応を定義する必要がある。

Page 18: 110707 java se7_lt_tanaka

18

String の Switch で簡単に書ける

2011/07/07

Page 19: 110707 java se7_lt_tanaka

19

例外のキャッチがめんどい

2011/07/07

一度にたくさんの種類の例外が飛んでくると煩雑。Exception でキャッチしたくなるけど、それはご法度。

Page 20: 110707 java se7_lt_tanaka

20

マルチキャッチで楽に

2011/07/07

Page 21: 110707 java se7_lt_tanaka

21

Generics の記述がめんどい

2011/07/07

Map の Value が List なオブジェクトとか、定義するだけで面倒。初期化だけで折り返したくない。

Page 22: 110707 java se7_lt_tanaka

22

ダイアモンドで簡略化

2011/07/07

右辺の Generics は省略できる!

余談:C#だと左辺を省略する。 Scala も似た感じ?

Dictioanary は Java でいうところの HashMap

Page 23: 110707 java se7_lt_tanaka

23

(おまけ)ブログに書いてます

http://dev.worksap.co.jp/Members/t_tanaka/2011/07/07

Page 24: 110707 java se7_lt_tanaka

242011/07/07

ご清聴ありがとうございました