JJUG CCC 2013 Spring 参加報告

昨日5月11日、日本Javaユーザーグループ主催、恒例のクロスコミュニティカンファレンスが東京・西新宿で開催されました。

f:id:ynie:20130512102904j:plain

http://www.java-users.jp/?page_id=354

中間発表で280名を超える参加者ということで、3つの会場はいずれも満席。一部は立ち見も出る盛況です。参加者の多くが熱心にメモをとっており、トップレベルの発表者と、それをしっかり理解できる聴講者(技術者層)の場があることを頼もしく思います。

以下は私が参加したセッションのメモです。(お詫び:午前中は受付を担当していたためメモがありません。)

Java EE 6 から Java EE 7 に向かって

Oracle寺田さんによる発表。資料はこちら。
http://www.slideshare.net/OracleMiddleJP/java-ee-6-to-java-ee-7

p.41から、JSON の話があります。これは間もなく発表されるJava EE 7に含まれます。(JSR 353)

また、EL 3.0 では、メモリ上のコレクションに対する Lambda 式が書けるようになるそうです。いわゆる LINQ 式。ただし今回はオンメモリなコレクションへの LINQ。RDBアクセスではありませんが、プレゼンテーション層ならではの使い道がありそうです。

Java Small-Object Programming

Springの第一人者である長谷川さんによる発表。資料はこちら。会場は立ち見。
http://www.slideshare.net/HasegawaDanna1/jjugjava-small-object-programming-20970867

  • lombokを使ってsetter/getterを減らせる。
  • プリミティブ型を使わない。
  • Validationの位置を変更しよう。

資料の最後にあった、自動生成への可能性はまったく同意です。検索・一覧画面をはじめ、パターン化できる画面(および定型的な画面遷移)は自動生成の対象になります。長谷川さんの今後のアプローチに期待です。

Type Annotation って何? それを使うとプログラムはどう変わる?

木村さんの発表。資料はこちら。会場は超・立ち見。
http://www.slideshare.net/kimuchi583/r5-3-type-annotation

型アノテーションの存在理由がよくわかりました。@Readonly を指定すると、変更しようとするコードに対してコンパイルエラーが生じるといいですね。@NonNull を指定すれば、もう if (obj != null) といった面倒な判定をいちいち書かずとも、コンパイル時にヌルポ検出してもらうことを期待できます。と、ここまで盛り上がっておきながら、ただしJava 8では枠組みだけが提供され、プログラマがすぐに使えるような状況はもう少し先になりそうとのこと。ワシントン大学が先行着手している Checker Framework は Java 6/7 でも使えるということなので、試してみる価値はありそうです。

eXtreme JAX-RS

GlassFish Users Group Japan 蓮沼さんの発表。GitHubにサンプルあり。
https://github.com/btnrouge

JAX-RS実装で代表的なものは次のとおり。

  • Jersey(Glassfish他、多くのOSSで実績あり)
  • RESTEasy(JBOSS採用,JBOSSはTomcatフロントで、RESTEasyを使う)
  • Apache CXF (WS-* の実装系という位置づけ)
  • Apache Wink (RESTful Web Service を狙う。WebSphereが利用しているとのこと)

JAX-RSはHTTPを直接扱う高水準API。JAX-RS自身はServet実装によるWebアプリケーションとなる。つまり、Webサービス向けだけではなく、自身がWebアプリケーションの土台になれる。ServletはもともとHTTP依存ではない。ステートレス通信でSocketベースが基本。まとめると、Servlet+JAX-RS=HTTP。

前処理としてのFilter,Interceptorもそれぞれ実装フレームワークが独自に提供している。これも標準規格化されるようになる。

HTTP Client も JAX-RS で対応できる。

リクエスト処理では「すべての要素を」読み取れる。StrutsやJSFは、すべてではなかった。
パラメータの妥当性をBeanValidationで検証できる。
@QueryParamや@FormParamを使ってほとんどの値をJavaにマッピング可能。
application/xmlやapplication/jsonなら、JAXBなJavaBeanにマッピングできる。
メソッド戻り値にボディーを直接返すようにすると、正常終了時にHTTP/200がセットされる。例外スローはHTTP 4xx/5xxになる。
マルチパートも各実装で対応済み。マルチパートリクエストにマッピングするクラスを用意し、Iteratorでエンティティを取得する。この方式がJAX-RS2.0で標準化される見込み。

JAX-RSのデプロイは、JAX-RS実装を含むJavaEEサーバーを使うのが楽。(サーバーに含まれる実装を変えることは止めた方がいい。)Tomcatなどのサーブレットコンテナを利用するのは面倒。web.xmlに実装Servletを登録する手間をはじめ、設定の手順が多い。

JAX-RSセキュリティについて。認証はServletコンテナに依存。認可はServletセキュリティ(標準)だが、Common Annotationsというロールベース認可も利用できる。これはJavaEEに含まれる。
ServletセキュリティーはServletコンテナで認証。認可処理はアプリケーションの責務。Servlet3.0から、アノテーションで書ける。
Common Annotationsでは @RolesAllowed, @PermitAll, @DenyAll を指定できる。

JAX-RS for Web Applications の概念。JAX-RSはWebサービスだけでなくWebアプリケーションとしても利用できる。
@ContextでServletConfig,ServletContext,HttpServletRequest,HttpServletResponseをインジェクト可能。つまりサーブレットの機能を直接利用可能。HttpSessionも利用できる。forward/redirectもOK。ステートフルな実装も可能。

つまりJAX-RSは何でもあり。Web MVC もつくれるだろう。

[BOF] 地方における勉強会事情

岡山・広島、大阪、北海道、沖縄の各コミュニティ代表と鈴木会長、会場とが一体となったパネル。沖縄からは Java Kueche の平良会長が参加して、盛り上げていました。多くの建設的なアイデアが飛び出し、まだまだコミュニティとしてできることはある、と改めて気付きました。できないことを嘆くのではなく、こうやってはどうかというアイデアが披露されるパネルは参加していて本当に楽しいものです。司会である鈴木さんが上手いな、と感心しました。

感想

JJUG幹事のはっしーさんと、JJUG CCC が再び盛り上がってきたように感じるが、何故でしょうねと話をしている中で、「(景気回復基調で)エンタープライズ系の仕事が増えてきたのでは?」というポイントに気付きました。その可能性はあります。エンタープライズの寿命を仮に10年とすると、10年前はStruts 1.x, Hibernate 2.x, Seasar, Spring といったミドルウェアが多く採用されていました。しかし今、Struts は開発終了がアナウンスされたことを受け、Struts-Spring や Seasar-SAStruts といった組み合わせの再構築に対して新しいアーキテクチャが求められています。今なら Spring 3 系 + Spring MVC は(枯れているが開発も継続されているという意味で)安定感がありますし、一方で Java EE 6/7 の勢いは、次世代の主流になりそうな新技術がどんどん提案されています。再構築のタイミングと、新技術の台頭という二つの潮目がちょうど重なり、エンタープライズ系のJava に再び注目が集まるようになったとすれば、喜ばしいことです。さらに来年登場予定の Java 8 によってCPUのマルチコアの性能を十二分に活かせるようになれば、基盤としての Java の優位性はますます高まることでしょう。

今回の年次総会で、今年も引き続き JJUG 幹事の一名に加わらせていただくこととなりました。微力ながら Java の盛り上がりに貢献したいと思います。