110707 java se7_lt_tanaka
-
Upload
- -
Category
Technology
-
view
1.271 -
download
5
Transcript of 110707 java se7_lt_tanaka
1
田中 孝佳
2011/07/07
業務アプリ開発者から見たJava SE 7 に期待すること
2
自己紹介 ㈱ワークスアプリケーションズ所属
ERP パッケージの会社です 研究部門 クラウド担当
お仕事 サーバーサイド Java で開発
クライアントは Silverlight 使ったり Oracle DB の調査担当 自動化できる処理は大抵 Java バッチで書く
スクリプト言語より Java が好み
2011/07/07
3
ちょっと昔を思い出して・・・
2011/07/07
社会人になってからプログラミングを本格的に始めました 最初は Java
当時は 2007 年 すでに Java SE 6 が出てました
なので、最初から Generics ありの世界でした
Java SE 7 が、私がプログラミングを始めてから
最初の Java のバージョンアップです
4
というわけで・・・ 思い入れのある Java の
バージョンアップに関して、業務アプリ開発者の視点から期待していることを話します
2011/07/07
5
業務アプリでの Java の使いどころ アプリケーションサーバー
SE じゃないけど、 SE の技術は使われる
JavaEE7 に期待! 特にクラウドと銘打たれているあたり
バッチ処理 インストーラーなど管理ツール
2011/07/07
6
注目している VerUP 内容機能追加系
• JSR 166y(Fork/Join)• JSR 203• 新しいファイルシステム API• NIO2
ソースコードがすっきり系
• JSR 334(Project Coin)• リソース付 try-catch• String による switch• 例外のマルチキャッチ• ダイアモンド ( 型推論 )
2011/07/07
7
IDE の対応状況NetBeans
• 7.0 で対応済み• 今回のサンプルコードもこれで書きました。
Eclipse
• Indigo(3.7) SR1 にて対応予定 (9 月頃? )
IntelliJ
• 10.5 で対応済み
JDeveloper
• 情報が見つからず・・・
2011/07/07
8
Fork/Join のないとき Java6 の並行処理
ExecutorService をよく使っていました タスクに依存関係がないのが前提です
タスクに依存関係があると 安全性を担保するためには、
適切な排他制御が必要 するとパフォーマンスが落ちる or
排他制御が漏れてデッドロックが起きる 結局、適用しづらかった
依存性のないようにタスクを設計する必要あり
2011/07/07
9
Fork/Join のあるとき 分割統治なタスクの並行処理がしやすくなる
グループごとに集計して、その結果をグループ同士で演算するとか
でも、そんなに単純に使えるケースばかりでもなさそう Java SE 8 への期待
Concurrent Framework のさらなる発展 ラムダ式と組み合わさった機能
コレクションの要素に対する演算を裏で勝手に並行処理してくれるとか。
2011/07/07
10
NIO2: ファイルシステム API インストーラーなどで結構使います 所有者、アクセス権の変更とかも意外と必要
鍵ファイルを読み取り専用にするとか
java.nio.attribute.AclFileAttributeViewで所有者とか ACL を操作できる ファイルシステムに依存
2011/07/07
11
NIO2: ファイルシステム API java.nio.file.SimpleFileVisitor
でディレクトリを Visitor 的に探索できる java.nio.file.WatchService
でディレクトリを監視できる このあたりの機能の起点は、
java.nio.file.Files クラス
2011/07/07
12
java.nio.file.Files クラス
2011/07/07
13
NIO2:Socket チャネルなどの低レベル通信も、
管理ツールなどで使います
余談ですが、 java.nio 配下のクラスはパッケージプライベートクラスのいい活用事例として読んでいます
2011/07/07
14
ソースコードすっきり系 業務アプリでは(でも?)
保守性高いコードは必須 今までは結構面倒な書き方が必要だった Project Coin ですっきりできます
ほかの方の LT とかぶりそうなのでさらっと。
2011/07/07
15
リソースを使ったら片付けましょう
2011/07/07
途中で例外が発生すると、正常にクローズされません。finally節に close を移すと、そこで発生する SQLException を処理するという面倒なことに
16
リソース付の try~catch で綺麗に
2011/07/07
これで、あの忌々しい try~catch のネストともおさらば!
17
String による条件分岐の連発
2011/07/07
Stringだと、 if文の連発になる。Enum を使おうとすると、 String との対応を定義する必要がある。
18
String の Switch で簡単に書ける
2011/07/07
19
例外のキャッチがめんどい
2011/07/07
一度にたくさんの種類の例外が飛んでくると煩雑。Exception でキャッチしたくなるけど、それはご法度。
20
マルチキャッチで楽に
2011/07/07
21
Generics の記述がめんどい
2011/07/07
Map の Value が List なオブジェクトとか、定義するだけで面倒。初期化だけで折り返したくない。
22
ダイアモンドで簡略化
2011/07/07
右辺の Generics は省略できる!
余談:C#だと左辺を省略する。 Scala も似た感じ?
Dictioanary は Java でいうところの HashMap
23
(おまけ)ブログに書いてます
http://dev.worksap.co.jp/Members/t_tanaka/2011/07/07
242011/07/07
ご清聴ありがとうございました