Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

Java EE 7 EssentialsとBeginning Java EE 7

最近、金魚本のJava EE 7版であるBeginning Java EE 7を細かめに読んでいるのですが
f:id:kikutaro777:20140621220510j:plain

先日Twitterでのやりとりで、Java EE 7 Essentialsがおススメされてたので、早速買ってみました(^^)

以前のJava EE 6 Pocket Guideと比べると書籍のサイズが大きくなってた(>_<)!

f:id:kikutaro777:20140621220502j:plain

ちなみに自分は写真のようにペーパーバックで購入しましたが、価格的には以下のようにKindle版のほうがお得です(^^;;


Beginning Java EE 7

まだ読み途中ですが、Oracleの寺田さんが以下言われていたようにJava EE 7で入ったjBatchの記述が確かにありません(>_<;

というか、WebSocketとConcurrency Utilitiesもないんですよね…(^^;目玉機能なのに…。
JSON Processingは入ってます。

個人的にこの本がいいのは、日本語の金魚本を読んでいれば、そこからの差分(7で変わった所)がわかる所かなぁと。
特にCDI(Context and Dependency Injection)とBean Validationは先頭の章で入っていて、それなりにボリュームもあります。

でもJSFのアップデート概要はあるのですが、肝心の説明が全然ないんですよね…(^^;
Faces Flowぐらいは詳細あってもいい気がするのですが。

Java EE 7 Essentials

まだ細かくは読めていませんが、こちらの本は全体がしっかり網羅されている感じです。

Java EE 7での目玉機能であるWebSocket、Concurrency Utilities、Batch、JSON Processing、そしてJSFではHTML5-Friendly Markup、Faces Flow、Resource Library Contracts。もちろんCDIやBean Validationもあります。

確かにこっちのほうがおススメだなぁと。

書籍の厚さ的にはBeginning~の半分くらいなので、内容的には要所をギュッとまとめた感じのようです。
概要やポイントを知るには良い感じかなと。

……

とはいえ、自分がJava EEをやる前を思い出すと、どちらも英語だしかなりキツイよなぁと。

今からJava EEを始める!という方は、まず金魚本を読んで、色々触りつつ、Java EE 7 Essentialsを読む感じがいいのかなぁ。

日本語のJava EE 7本が望まれる(´・ω・`)

プリミティブ型もCDIでInject

悲しいことに最近仕事でコードが書けなくなってきてしまい(苦手な上流へ…)、あまりネタがないのですが、プライベートな時間で以下のJava EE7本を細かく読み始めました。

Beginning Java EE 7 (Expert Voice in Java)
Antonio Goncalves
Apress (2013-06-26)
売り上げランキング: 4,378

このBeginning Java EE 7は名前からわかる方もいると思いますが、金魚本のJava EE 7版となっていて、先頭の章でCDIがドカンと入ってていい感じです。

しかし本を読んでいると、CDIは細かい所で結構知らないことあるなぁと。

そんなわけで個人的なメモ。

プリミティブ型やStringもCDIのProducersを利用してInjectできるんですね。へー。
地味に知らなかった(^^;

package jp.co.hoge.producer;

import javax.enterprise.inject.Produces;

public class NumberProducer {
    @Produces
    @MyNumber
    public int myNumber(){
        return 11;
    }
}
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface MyNumber {
}
@Inject
@MyNumber
private int number;
System.out.println("私の堀北真希さんファンクラブ会員番号は" + number);

私の堀北真希さんファンクラブ会員番号は11

とか

package jp.co.hoge.producer;

import javax.enterprise.inject.Produces;

public class HorikitaProducer {
    @Produces
    @Makimaki
    public String getHorikitaName(){
        return "堀北真希";
    }
}
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface Makimaki {
}
@Inject
@Makimaki
private String name;
System.out.println(name);

堀北真希

みたいな。メリットはなんだろ…。

#JavaDayTokyo 2014に参加して熱気を感じてきました!

今日は仕事仲間に申し訳ないと思いつつも、品川プリンスホテルで行われたJava Day Tokyo 2014に参加してきました(^^)

f:id:kikutaro777:20140522153758j:plain

去年は秋葉原のUDXで開催されましたが、コミュニティからの意見・要望をフィードバックに(主に椅子の座り心地が悪かった…等らしいですが…笑)会場を品プリにされたそうです(^^)ということで、椅子の座り心地は確かに凄く良かったです!

熱気

去年生まれて初めて本場のJavaOneに参加して、サンフランシスコにとんでもない数のJavaエンジニアが世界中から集まる熱気を肌で感じたのですが、さすがにそれとは規模が全然違うものの、今日のJava Day Tokyo 2014もかなり熱気があったように感じました。

歩留りはわからないですが、事前申し込みで2000人超えてるとおっしゃられていたような。

基調講演の会場は横に広く、大きなスクリーンが5つくらい並んでて、本場JavaOneに似たような雰囲気があったように思います。

セッション

参加したのは以下でした。

事前の申し込みでは、わりとLambdaやJavaFXを中心としていたのですが、行ってみたら事前登録してなくても(最悪立ち見で良ければ)参加できる方式になっていたので、結局Java EEを中心に参加しました(^^;

基調講演自体はわりと去年のJavaOneに等しい内容だったかと思います。なので、以下で櫻庭さんがレポートされていた

を読んで頂くと内容が分かる気がします。

チェスは3Dデモの他、ロボットアーム付きのチェス台も披露されていて、本当にJavaOneのようでした。DukePadも実物でした(^^)

もちろん違う部分もあるのですが、JavaOneになかった中で一番インパクトがあったのは、LEGO MindstormsによるDuke、名付けてLego Duke Segwayでした(^^)

すごいかわいかった(>_<;そして、Segwayみたいな車輪がついていて、何もせず置くと倒れてしまうのですが、電源入れてジャイロでバランスとるようなプログラムによって動くという!

デモではsshでDukeにログインしてたり、いろんな意味で面白かった(^^;

後半は、中身の解説をするために、胴体と頭を分断されて無残な姿になってしまい…結構せつなかったです(^^;

基調講演ではその他、何社かの日本企業によるJava活用事例が紹介された他、JJUG(Japan Java User Group)会長の鈴木さんが登壇されました。去年も登壇されていたと思いますが、改めて、JavaコミュニティとOracleの関係が強いのだなぁという印象を受け、JJUGや他のJUGが日々色々と盛り上げてる結果がこうした大きなイベントに繋がって熱気を生んでいるんだろうなぁ、と思いました。

「皆様、是非JJUGにご参加を」

とのことで、会員はメーリングリストに登録するだけで、以下JJUGのサイト右上の「入会案内」を辿って登録できます。

http://www.java-users.jp/

f:id:kikutaro777:20140523060308j:plain

その他Twitterは@JJUG、Facebookはjapanjugで、勉強会やイベントの情報が得られます。

おっと、基調講演の冒頭にあって忘れてはいけないのが、Java SE 8のJavaDoc日本語化!!わーわー

http://docs.oracle.com/javase/jp/8/api/index.html
f:id:kikutaro777:20140523012437j:plain

かなり力が入ってますね(^^)さっそくPublicKeyでも記事に!

Java EEに関して

1つ1つ細かく書けないので、参加した話の中から幾つか印象に残ったものをまとめます。

Java EE 8のRoadmap

JSR Submissions 2014 Q2
Early Draft Review 2015 Q1
Public Review 2015 Q3
Proposed Final Draft 2015 Q4
Final Release 2016 Q3 あわせて Java EE 8 RI/SDK

JAX-RS action based MVC

Java EE 8のfeature候補の中にJAX-RS action based MVCという文字がありました。

さよならJSF…?

訂正
上記書いてましたが、以下コメントの通り、JSFがなくなるという話ではないので訂正しますm(_ _;m 私自身、日々JSFを利用しており、あまりに世間で叩かれるのでちょっとネガティブな書き方になってしまいました(^^;

Java SE 8 & Java EE 7

現時点でJava EE 7対応しているAPサーバはGlassFishとWildFlyのみで、かつJava SE 8もサポートしてるものはWildFly(これも完全サポートかわからないですが)のみ。従って、各種APサーバの対応を待つ必要があるとのこと。

寺田さんがされていたデモは非常に有用そうだったので、はやく対応版が出て、ああいうことに使いたいですね(^^;

なおGlassFishは

と、日本GlassFishユーザグループの副会長様より教えて頂きました。

GlassFish 4.0.1

現在GlassFishは4.0.1b5ですが、4.0.1は今年のJavaOneまでには…という感じで頑張っているようです。期待!

GlassFishは死んでないのでは?

今日最後にあったJava Day Tech Nightでは、Ask the Expertということで、オラクル本社から来日されたエキスパートの方々へ質問するセッションがあったのですが、そこでJava EEのエバンジェリストをされてるReza Rahmanさんが

  • GlassFishはかなり品質を大切にしている
  • 中途半端なものは出したくない
  • 近々、GlassFishのチームからロードマップなども公開する予定

といった発言をされていて、まだまだGlassFish、大丈夫そうじゃないか!思ったりしました。WildFlyをウォッチしつつも、やはり自分はGlassFishをしばらく中心に触っていきたいと思います。

Togetter

#javadaytokyoや各セッションごとのハッシュタグ含めて、Oracle ACEの@yamadamnさんがTogetterでまとめられていました(>_<;はやいっ

すごいボリューム!!読むだけでも何となく雰囲気が伝わったり、情報が得られるのではないかと思います。

戦利品

入場200名までらしいDukeのノベルティ(写真左)とアンケート回答でもらったノベルティ(写真右)
f:id:kikutaro777:20140522221831j:plain

ボトル買ってしまった…(^^;会社でどっかオフサイトとか行くとき持っていこうw
f:id:kikutaro777:20140522232731j:plain

あと入場の際に配られたパンフなんですが…あれ目が(つд⊂)ゴシゴシ

f:id:kikutaro777:20140522221929j:plain

なんじゃこりゃああああ(;゚ロ゚)

f:id:kikutaro777:20140522221759j:plain

ということで、以前インタビューして頂いた記事が、なぜか人気記事No.2という位置づけに入れて頂いてるようですm(_ _;)m汗汗汗

この記事はJava EE 7による開発ではなくJava EE 6での開発ですが、もし今日のJava Day Tokyo 2014を通じてJava EEに興味を持った方がいらっしゃったら、採用や開発の際、少しでも何かの参考になれば幸いです…m(_ _;)m

以下リンクから上記パンフのリンクは辿れます。

Java SE 8の存在が大きい気がしますが、なんだかんだでJava自体すごい盛り上がってる感じもある中、こうしたイベントで熱気を感じて、ホント楽しい一日を過ごせました(>_<)!

また、Java EEのセッションを通じて、かなり注目されてるんじゃないかな?と感じました。これもひとえにずっとJava EEを宣伝されてる寺田さんを中心としたOracleさんやコミュニティの方々の力によるものなんだろうなと改めて感じました。

まさに

みたいな(^^;

追記

書き忘れてしまったのですが、去年のJava Day Tokyo 2013でミニ四駆LTで聴衆をすごい笑いと緊張・不安(オィオィこのままJava一切触れずにミニ四駆だけで終わるんか、という)に包み込んだ方が、Java Day Tech NightのAsk the Expertの最初の質問者として選ばれ、ミニ四駆ネタを絡めたQAされてました(^^;;ムチャぶりすぎる気がしてちょっと気の毒な気もしましたが…(^^;

Expertが「この場の趣旨わかってる?それは机の端で2人で話せばいいんじゃ?」みたいなエキスパートな回答してて笑いましたが…でもその後真面目な回答もされてました(^^)こういう緩さも好きです。

#JJUG_CCC Spring 2014で「初めての Java EE 開発から学んだこと」というタイトルで発表させて頂きました!

昨日、ベルサール西新宿で開催されたJJUG CCC Spring 2014でJava EEに関する発表をさせて頂きましたm(_ _)m

セッションに参加して頂いた方々、本当にありがとうございました!!

また、先月、日本オラクルさんのJavaセミナーで講演させて頂いたときのレポートも公開されましたm(_ _)m

1年半前にボスからJavaでのWeb開発を求められて「今さらジャバ!?」と半分やさぐれつつ、右も左もわからない中、Java EEで開発をしてきたのですが…その頃はまさかJJUG CCCのような舞台やOracleさんで発表する機会を頂けるなんて正直思ってもみませんでした(^^;;

日々の開発をメモ書き半分に書き続けてた本ブログを通じて、Javaコミュニティの方々には本当にお世話になりっぱなしでしたので、今回の発表で少しでも何かの恩返し等になればうれしいなと思います。

スライドの最後にも書いてますが、今ではなんだかんだJava楽しんでます(^^;

JJUG CCC発表での緊張…

私は何かと不安症なので(スライドの内容みてもわかると思いますが…)資料準備は結構力を入れたつもりですが、それでも集まる方々がホント多岐に渡るので、発表が何となく恐くて恐くて(^^;すごく緊張しました。

しかもホールという大きな場を与えて頂き…冷汗

ホール発表で並んでる方々の名前をみても、明らかにおかしいんですよね、自分がいるの…と思いつつ;

そして発表登壇の際、司会者の方がいきなりJava EE?おっと、これは…マサカリセッションですかねー的な案内をされて血の気が引いた上に、最前列にOracle ACEな方やGlassFish UserGroupの副会長さんなどなど…名だたるエキスパート陣が「マサカリワッショイ」みたいなこと言いながらワイワイ座られててホントに笑えなかったです(-_-;

でもこうした凄い方々が今まで様々な情報を発信されていたからこそ、自分も恩恵を得ながら学べたわけで…泣きながら発表頑張りました(´;ω;`)ブワッ

質疑に関して

無事発表を終えて、質疑を頂きました。

Microsoft Azureのイベントでもお世話になった割と普通(@normalian)さん(AzureのMVPの方でJava系も超詳しいというここにもエキスパートががが)から

「JSFにおいて、JMeterで負荷試験するのはViewStateの関係もあって大変では?」

と頂きました。私も初めてやったとき、まさにViewStateの関係で上手くJMeterによるテストができず、あれ?JSFって無理なの??となってたのですが、海外情報をもとに、JMeterでも少し工夫することで解決できることがわかり、それでやっていました。以下過去ブログです。

また

「JSFでのリクエスト回数などが顧客の性能検査・報告などで問題にならないか?」

といった辺りの質問も頂きましたが、幸い私が関わっているPrjではそこまでの細かいレポートなどを求められることがないので、とりあえずないのですが、そういったことがある場合は、細かくチェックしてみないと厳しいかも…ですね(^^;ちょっと曖昧な回答で申し訳なかったです。

また、他の方から

「JUnitやArqullianのようなテストがあったが、画面系ではどうしてる?」

と頂きました。

スライドではアイコンしか入れてなくて触れてなかったのですが、Web画面のテストではSeleniumを導入…試みましたが、正直なところ結構断念しています(^^;
というのも、業務系の画面テストはピンからキリまであまりにも幅広く、Seleniumで色々とカバーするのは非現実的かなと。

現在のところ、本当に最低限ここだけはっ、という部分で使うぐらいで、ほとんど活用できていないです(^^;

Twitterで頂いた補足

発表後半でJSFのパフォーマンス周辺で、聴いてる方にはちょっとマイナスなイメージが残る感じになってしまったかもしれませんが、気を付け所があります、ぐらいのメッセージのつもりでした(^^;すみません。

その辺りで楽天の岩崎さんが以下つぶやかれてました(^^)頼もしい

また、Arqullianに関して@nekopさん(RedHatの中の方…?)が

とつぶやかれていました。Arqullian Persistence、私はXMLでしか使っていなかったのですが、他も試してみたいです!
これをもっともっと活用したら、Java EEでのDB周辺のリグレッションテストはすごい楽になると思います。

また、スライドでも触れていますが、私がJava EEを始めたころ、とても参考にさせて頂いた「達人プログラマを目指して」を書かれている@ryoasai74さんから声をかけて頂き、私自身が当時ホントに色々と勇気をもらったブログだったので、お会いできて感動でした(>_<)

以下AOPに関してなどコメント頂きました。

これは是非買ってみようと思っています。

AspectJ in Action: Enterprise AOP With Spring
Ramnivas Laddad
Manning Pubns Co
売り上げランキング: 159,298

JavaのWeb開発に関して

自分の発表だけでなく、今日は色々なセッションに参加しましたが、個人的には@monzouさんが発表されていた

Modern Java Web / SPA Development
https://speakerdeck.com/monzou/spa-development

が印象的でした。

@monzouさんはJava開発は経験されてるようですが、Web開発が初めて、とのことで「おお、ちょっと自分と境遇が似てる」と思って聞いていたのですが、全くアプローチが異なる、というか、とても熱いポリシー(Keep it simple等)を色々持たれていて、それを貫くために取捨選択・工夫されており、すげーーーと(^^;

というのも私はわりと逆な感じで、「とりあえず標準なら安心」みたいな感じで無難な方向の流れにのってJava EEだったので(^^;

足りない部分や使いにくい所は自分達でライブラリ作ったりされていて、すごいなぁと純粋に思いました(^^;

私はJava EEという枠の中で、色々取捨選択をしてきましたが、@monzouさんのように枠にとらわれない感じをベースに自分達でしっかりアーキテクチャ検討する方向性というのは色々な可能性を秘めていそうだし、魅力的に感じました。

Java SE8とJava EE7について

楽天の岩崎さんの発表も印象的で、Java SE 8とJava EE 6,7の関係はとても参考になりました。

懇親会でお話させて頂いたのですが、既にJava EE 7での開発も…って感じですごい先をいかれてるなーと(^^)良い刺激になりました。

また、発表の中で、「日本はJava EE使わないですよね」的な話があって(^^;
「海外ではJava EE利用がさかんなのに、、、」とおっしゃっていて、これは私も海外の情報とかみて、そう感じてたので、日本の中では間違った方向性とされ…てるかもしれないけど、世界的な流れには一応乗れてるのかな(^^;なんてよくわからない安心感を改めて得たりしました。

JPAと同時実行制御

@suke_masaさんのJPAに関しての発表ですが、私自身、JPAで楽観ロックを使ったときなど、結構細かく挙動を確認したりしてたので、発表の中で色々されていたことを通じて「事前にちゃんと細かく確認しましょうね!!」ということを伝えたい想いがあるんだろうなーと思いながら聞いていました。

内容的には、え、マジすか…?的なものもあって、少し怖かったりも…(^^;;JPAむずいw

ちなみに自分が楽観ロック等を確認したときは、NetBeansの以下デバッグ方法で、複数アクセスの状態を作りながら、それぞれのアクセスを切り替えてステップ実行して…みたいな感じでやってました(^^;


その他のセッション

午前は総会、基調講演、午後は上記の外に上妻さん、山本さんのセッションに参加させて頂いてましたが、発表前は緊張で、発表後は緊張の解放による疲労で話半分になってしまってました(^^;;;資料をあらためて拝見して勉強したいと思います。

懇親会

懇親会では、普段Twitterでのみお話させて頂いてた方々とお会いできたり、ご挨拶できて良かったです(^^)人見知りな私ですが、こういう場は本当に貴重だなぁと改めて思いました。

LT…も全て聞きました!まとめると長そうなので…ここでは割愛;

これから

今年になって

3月はGlobal Windows Azure Boot Camp 2014で

「Windows Azureを利用したDevOps入門」というタイトルでGlobal Windows Azure Boot Camp 2014 in Japanで発表させて頂きました!

4月はOracleさんのセミナーで

そして5月は昨日のJJUG CCC

とアウトプットが続き、平日は仕事から帰ったあとに色々調べたり、土日はスライド作ってたり…。実は結構しんどかったです(^^;

そして今、全部だしきって完全に空っぽになった感じがします。

ということで、しばらくの間、仕事への集中と、その他インプットを中心にまた勉強していきたいと思っています~。

Java EEに興味を持った方は是非、金魚本からどうぞ(^^)
(blogサムネイルがAspectJになってしまってたので、金魚本追加w)

CloudBeesのPaaSでJava EEアプリをクラウドへ簡単に展開!

現在ではCloudBeesではPaaS環境の提供がなくなっているため本記事は古いものとなります。itpro.nikkeibp.co.jp

無償でJava EE系APがのるPaaSとしてはOpenShiftなどがあります。kikutaro777.hatenablog.com

Java 8が無事にリリースされて、Javaの世界が盛り上がってる気がします(^^)

今日はこれから「JJUGイベント 「祝☆Java 8 Launch」」に参加予定です。
http://jjug.doorkeeper.jp/events/9344

この勢いでJava EE 7も盛り上がると面白そうだなーと思っているのですが(笑)

……

3月の初めにTechCrunch Japanで「Java PaaSのCloudBeesが早くもシリーズCで$11.2Mを調達」という記事になっていたCloudBeesを触ってみたところ、なんじゃこりゃーー、ズコーッ、ってくらい簡単にJava EEが使えるクラウドサービスでした。

意外にも日本語で画面キャプチャ付の情報とか少なかったので、まとめてみました。

Herokuや他のクラウドサービスを全て確認したわけではないのですが、GlassFish4やWildFly8まで含めて提供されてるクラウドサービスが他にあるのかなぁ?と(^^;知りたいです。

CloudBeesとは?

主にJavaを中心としたPaaS基盤を提供していて、ソースコード管理からJenkinsを利用したビルドやデプロイまでトータルに含んだサービスとなっています。

英語のWikipediaはこちら
http://en.wikipedia.org/wiki/CloudBees

http://www.cloudbees.com/

f:id:kikutaro777:20140320191329j:plain

自分がCloudBeesの存在を知ったのは、JJUGでよくJenkins開発者である川口耕介さんの名前を聞くのと、Jenkins勉強会に過去何回か参加していたためですが、実際に使ったのは今回が初めてです。

そういえば今年のはじめ、CloudBees社のCTOに川口さんがなられて話題になっていました。
海外で日本の方がCTOって…しびれるなぁ。

まずは登録(Sign Up)

サイトにある「Try it for Free!」または右上の「Sing Up」から登録をします。

GitHubやGoogleのアカウントを利用することもできるので、簡単に登録するならそちらが良いかと思います。

f:id:kikutaro777:20140321002917j:plain

無料枠は当然ながら色々制約があるのですが、詳しくは以下Pricingの表にあります。
http://www.cloudbees.com/platform/pricing/devcloud.cb

ユーザ数が3、Jenkinsのビルド時間トータルが月100分、その他に容量やサポートなどありますが、登録時にクレジットカード情報などは不要で、ちょっと試しに使ってみるには、とてもお手軽な感じです。

豊富なメニュー

Sing Up後、以下のような画面が表示されます。

f:id:kikutaro777:20140321003521j:plain

左上の「Click Start」を押すと、アプリケーションの選択肢メニューが出るのですが、これがすごい豊富。
一通りキャプチャしてみました。

f:id:kikutaro777:20140321003604j:plain

f:id:kikutaro777:20140321003622j:plain

f:id:kikutaro777:20140321003627j:plain

f:id:kikutaro777:20140321003632j:plain

f:id:kikutaro777:20140321003638j:plain

f:id:kikutaro777:20140321003644j:plain

Java系ではTomcatをはじめ、Jetty、GlassFish3、GlassFish4、JBoss71、Wildfly8などが選べますし、Play Framework2もあります。GroobyのGrailsやScalaのLift、Node.jsやVert.x、GoやCloujure、Erlang、Rubyなどもあったり。Senchaなんかも。

GlassFish4以外は試せてないのですが、なんかすごい(^^;

あと個人的には「PrimeFaces Showcase」があるのと「with SendGrid」系があって面白かったです。どんなのか、是非試してみなければ。

GlassFish4 Appを選択してみる

とりあえず今回はGlassFish4 Appを選んでみました。
Full PlatformとWeb Profileがちゃんと選べるのですが、とりあえずWeb Profileで。

f:id:kikutaro777:20140321004848j:plain

メニュー選択後、自分の場合は以下Jenkinsのprovisionedの画面が出てきて、少し待つ必要がありました。5分程度でしたが。

f:id:kikutaro777:20140321004934j:plain

f:id:kikutaro777:20140321004944j:plain

で、メニュー選択後、アプリケーションの名前を入れます。

f:id:kikutaro777:20140321005104j:plain

名前を入れて進むと、ソースのリポジトリ、Jenkins、アプリケーション、DBの準備が開始されます。

f:id:kikutaro777:20140321005151j:plain

f:id:kikutaro777:20140321005310j:plain

完了したので、ダイアログを閉じます。

f:id:kikutaro777:20140321005506j:plain

ホーム画面をみると、それぞれできてます。

f:id:kikutaro777:20140321005651j:plain

アプリケーションをみてみると、以下のように表示されます。

f:id:kikutaro777:20140321005842j:plain

URL叩くと、テンプレート的に作成されたアプリケーションが表示されます。

f:id:kikutaro777:20140321005920j:plain

これだけでもうGlassFish4の上にデプロイされたアプリケーションが使える状態です。なんて簡単なんだ!!!

個人的にはすごい感動したのですが(^^;

でも、さらにすごいのはこれから。

コードの取得

ここまででテンプレができていて、Gitのリポジトリも生成されてるので、コードを取得してみます。

メニューの「repos」をみると、GitのURLが確認できます。

f:id:kikutaro777:20140321010412j:plain

普通にコマンドでgit cloneとかしていってもいいのですが、とりあえず自分はNetBeansを使いました。(ちなみにNetBeans 8)

f:id:kikutaro777:20140321010615j:plain

メニューでコピーしたURLと認証情報を入れて、淡々と進めていきます。

f:id:kikutaro777:20140321010713j:plain

f:id:kikutaro777:20140321010758j:plain

f:id:kikutaro777:20140321010804j:plain

f:id:kikutaro777:20140321010812j:plain

cloneされたプロジェクトが表示されます。以下のような感じ。

f:id:kikutaro777:20140321010852j:plain

JSF書いてみた

取得したコードは一旦消して、JSFの簡単なサンプル作ってみました。

プロジェクトのプロパティでGlassFish4を選んでおいて

f:id:kikutaro777:20140321011017j:plain

フレームワークからJSFを選択します。ここではついでにPrimeFacesもつけときました。

f:id:kikutaro777:20140321011109j:plain

f:id:kikutaro777:20140321011116j:plain

f:id:kikutaro777:20140321011123j:plain

で、index.xhtmlを以下のように定義して

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>My First app on CloudBees</title>
    </h:head>
    <h:body>
        <h:form>
            <p:panel header="PrimeFaces Panel Header">
                <p:calendar />
            </p:panel>
        </h:form>
    </h:body>
</html>

ローカルで実行するとこんな感じ。しょぼしょぼですが(^^;

f:id:kikutaro777:20140321011234j:plain

プロジェクトはこんな風に変わってます。

f:id:kikutaro777:20140321011304j:plain

で、コミットしてプッシュします。

f:id:kikutaro777:20140321011437j:plain

f:id:kikutaro777:20140321011445j:plain

f:id:kikutaro777:20140321011453j:plain

f:id:kikutaro777:20140321011535j:plain

f:id:kikutaro777:20140321011542j:plain

f:id:kikutaro777:20140321011602j:plain

これで終了すると…なんと、CloudBees側でJenkinsがプッシュトリガーに自動ビルドを開始して、そのままデプロイしてくれます。マジすか。

自動ビルド&自動デプロイ

上記の操作後にCloudBeesのJenkinsをみるとタスクがピコピコしててビルドしてました(^^;

f:id:kikutaro777:20140321011753j:plain

で、成功すると、そのままデプロイまでしてくれて、さっきローカルで動かしたのと同じアプリケーションがあがってるーーーーー

f:id:kikutaro777:20140321011855j:plain

すごい!

GlassFishやWildFlyをクラウドで利用したい場合って、今の段階だと多くが、仮想マシンを一旦立てて、インストールして…という流れだと思いますが、CloudBeesならAzureのWebサイトみたいな感覚でお手軽に使えてしまうのが嬉しいですね。

はじめてのWindows Azure ~NetBeansのコード生成でJPAからSQLデータベースへ~

昨日書いた

はじめてのWindows Azure ~SQLデータベース作成からNetBeansでの接続まで~

にて、AzureでSQLデータベースを生成して、NetBeansのデータベースサービスと簡単に連携できました。

ということは、ここからNetBeansの自動生成機能を使えば簡単にデータベース処理のWebアプリが作れるわけで、やってみました。

ここに来るとあまりAzure関係ないですね…(^^;
ちなみにWidnows 8 Proの64bitでJDK8、NetBeans7.4でGlassFish4.0にて行いました。

続きを読む

JSF2.2の日本語情報をまとめてみる

昨日のGlassFish勉強会で楽天のArshal AmeenさんからJava EE7によるアップデートの話がありました。その中でもJSF2.2のアップデートに関する話をメインにされていました。

JSF2.2に関して、日本では「しんさんの出張所 はてな編」が最も早く詳細な情報をわかりやすく提供してくださってるんじゃないかと個人的には思っています(^^)が、その他にも日本語で把握できる情報がそろってるので、まとめてみました。

ちなみに英語だと当然豊富にありますが、その中でも以前にロジ子さんも取り上げていた

What’s new in JSF 2.2?

がわかりやすく、人気あるようです。ただ記事自体の投稿日は古いので、どこまで今の最新に合わせた修正をしているか、わかりません(^^;

ちなみにFinal ReleaseのJSR-344はこちらから。
https://jcp.org/aboutJava/communityprocess/final/jsr344/index.html

スライドで把握する系

Java EE7 リリース 2013/06/12

Oracleの寺田さんの資料です。前半にJSF2.2のアップデートについて触れられています。

Java EE 7技術アップデート & 逆引き JSF 2.2

楽天とオラクルのアーキテクトが本音で語る、「Java EE 6導入を推進するうえでのポイントと導入効果」の記事でお話されてる楽天の岩崎さんのスライド。後半で具体的なチュートリアルもあるので、スタートアップにも良い感じです(^^)

JEE & JSF

昨日GlassFish勉強会でお話されていたArshalさんのスライド。以下サイトからコードもダウンロードできるとのことです。
http://www.arshal.org/

Big Ticket Features

JSFの仕様が定義されたJSR-344を読むと最終的にBig Ticketとして定義された機能は

  • HTML5 Friendly Markup
  • Resource Library Contracts
  • Faces Flows
  • Stateless Views

です。それぞれに関連した日本語情報探してみました。ちょいちょい手前味噌もあります…すみません。

意外とまだなかった

冒頭で紹介した「What’s new in JSF 2.2?」と見比べると細かい所ではまだまだ日本語情報足りない気が(^^;

昨日のGlassFish勉強会でArshalさんが「JSF使ってる人、今までCSRFはどうしてたんですか!セキュリティ大事ですよ!」と声高に言ってたのが印象的でしたが、JSF2.2での注目機能の1つでもあるCSRF対策に関する日本語記事とかなかったので、Arshalさんの資料みたり、コードダウンロードして試すのが良さそうです。

Javaに限らずWebのフロント技術はあらゆるものがあって進化が速いのと、JSFは独自路線で結構走っちゃってるので今後どうなるかわからんのですが、一応まとめてみました(^^;

ここにこんなJSF2.2記事あるよ!みたいな突っ込みあればコメント頂けると幸いです。

JSF2.2のFaces Flows(FlowScoped)

この記事は「JavaEE Advent Calendar 2013」の1日目の記事となります。
明日はManabu Matsuzaki(@matsumana)さんです。宜しくお願いします!

Java EE 7登場

今年は6月にJava EE 7がリリースされました。

Java EE 6からのアップデートは大小様々ありますが、今日はJava EE 7の中からJSF(JavaServer Faces)に着目して、JSF2.2で新しく追加されたFaces Flowsについて書いてみたいと思います。Faces Flowsは、Big Ticketと言われる目玉機能の1つですが、探してみたら意外と日本語情報がなかったので(^^;

JSFとは?

本題の前に、そもそもJSF(JavaServer Faces)って何?ということについて少しだけ。

JSFは現在のJava EEにおける画面構築の標準仕様で、コンポーネントベースにWeb画面を構築するものです。.NETのWebFormと感覚的には近いものです。

JSFは大きな風呂敷でWeb内部を隠したような抽象化がされており、逆にそれが敬遠されることも多いのが現状です。
オープンなWebシステム構築にはあまり向いていませんが、業務系システム等では有効に使えるケースもあるのではないかな?と私は実際に使って思っています。

また、海外では様々なJSF用のリッチコンポーネントライブラリが開発されていたり、情報も細かいもの含めて豊富にあるので、それなりに利用されているように思います。

JSF2.2のアップデート内容

ここを細かく書くと今日の主題に到達しない…のと、日本語情報も既に多くあるため、後日まとめようと思います。

概要をざっと知りたい方は@den2snさんが以前にOracleさんのセミナーでお話された以下が役に立つと思います。

Faces Flows

Faces Flowsとは何か?ですが、すごくざっくり書くと、あるページからあるページまでの一連の流れを1つのフローとして定義する仕組みです。

絵でイメージかくとこんな感じ。ちょっと雑すぎましたが…。

f:id:kikutaro777:20131130235823j:plain

ノードが1つのWebページで、ノードをつないでいるエッジが画面遷移です。
上段のフローと下段のフローは別物ですが、お互いのフローを結びつけることも可能です。

だいぶざっくりな説明ですが、JSR-344では「有向グラフ(directed graph)」という言葉を使ってノード(node)がビュー、エッジ(edge)を画面遷移と表現していました。詳しく知りたい方は以下を参照して頂くのが良いと思います。

※海外サイトみると「Faces Flow」とFlowが単数形のものが多いですが、JSRではFlowsと複数形になっているので、ここではすべて複数形にして書いています。

フローの定義方法

フローを定義する方法は大きく分けて2種類あります。

  • プログラムによる定義

FlowBuilderクラスを利用してJavaプログラムでフローを定義します。

  • XMLによる定義

XMLタグを利用してフローを定義します。

言葉だけだとわかりにくいので、今回Advent用に作ったサンプルコードから定義部分を表示します。

プログラムによる定義

FlowBuilderが持つメソッドでフロー定義をしていく形です。今回のサンプルでは

  • フローが呼び出された際に処理を呼ぶ(initializer())
  • ノードとページのマッピング(viewNode())
  • メソッドを呼び出すノード(methodCallNode())
  • 条件によるフローのスイッチング(switchNode(), switchCase())
  • 別に定義されたフローへの遷移(flowCallNode())

などのメソッドを使った例にしています。

XMLによる定義

先のクラスで定義したのと同じレベルが記述できると思いますが、今回のサンプルでは以下のように一部だけとなっています。すみません。

サンプルアプリケーション

作ったサンプルは以下のような動きをするものです。

f:id:kikutaro777:20131201000303j:plain

上図のノードはページを表していますが、裏でデータを保持するBacking Bean(管理対象Bean)は、会員登録フロー、特典選択フローともにそれぞれ1つだけあります。@FlowScopedアノテーションをつけることで、フローの間だけ生きているBacking Beanとなります。

また、特典選択フローはWebページとBacking Beanが1つのJarファイルになっており、会員登録フローのWebアプリがそのJarを参照する形で構成されています。

実際のソースコードは以下GitHubに置きました。

実際に画面を動かした結果は以下です。

フロー図のTopノードにあたるindex.xhtmlです。これが最初に表示されます。
会員登録するリンクを押すと、画面遷移し、会員登録フローが呼び出されます。
f:id:kikutaro777:20131201000712j:plain

会員登録フローの最初のページです。
f:id:kikutaro777:20131201000742j:plain

会員登録フローが呼び出されたので、initalizerメソッドが走ってコンソールに以下表示されています。

f:id:kikutaro777:20131201104103j:plain

名前と年齢を入れます。
f:id:kikutaro777:20131201102348j:plain

メッセージ入力ボタンを押します。
f:id:kikutaro777:20131201102406j:plain

メッセージ入れて登録確認へ
f:id:kikutaro777:20131201102441j:plain

で、今まで入力した情報が表示され「名前の修正」を押せば、名前入れたページへ、「終了」を押せばindexに遷移します。
f:id:kikutaro777:20131201102517j:plain

なんてことない普通の画面遷移なんですが…(^^;

ちなみに、会員登録のBacking Beanのフィールドは以下のような定義です。

年齢を保持する変数を定義していません。

代わりにFacesFlowsで追加されたEL式オブジェクトである#{flowScope}を使っています。

ビュー定義は以下だけなので、お手軽です。中身はjava.util.Mapのようで、キーが自分で定義した属性(ここではage)となっていて、値に入力された値が格納されていました。

<h:inputText value="#{flowScope.age}" />

ちなみにこの値をプログラム内で扱いたい場合には

Map flowObject = FacesContext.getCurrentInstance().getApplication().getFlowHandler().getCurrentFlowScope();
System.out.println(flowObject.get("age"));

という感じで取れます。下手に使うとキー定義の嵐になりそうですが(^^;
サンプルでは「テストボタン」を押したときに、この処理を読んでいるので試してみて下さい。

別フローを呼び出す

では、先ほどの状態から「名前の修正」を押して以下画面に戻ってみます。
f:id:kikutaro777:20131201104934j:plain

選択された特典コードというラベルの横は空白となっていることを確認して「特典を選ぶ」を押します。

ここで、Jarにパッケージ化された中に定義してある特典選択フローへ移ります。
特典選択フローにもinitializer定義(こちらはXMLなのでタグですが)しており、処理が呼び出されて以下表示されます。

f:id:kikutaro777:20131201104451j:plain

画面はこんな感じに。
f:id:kikutaro777:20131201105022j:plain

会員登録フローで入力していた情報をinbound-parameterで受け取って表示しています。
同一のフロー内ではBacking Beanを通じて簡単にデータ共有できますが、別定義のフローと値をやりとりする場合には、こうした定義が必要となるようです。

次に、特典は適当にBを選んで、戻るボタンを押します。
すると、選ばれた特典のコードが表示されています。
f:id:kikutaro777:20131201105148j:plain

ここも先ほどと同じですが、今度はoutbound-parameterで値を呼び出し側に渡しています。

メリットは?

このサンプル、しょぼいわりには意外と手間がかかったのですが、これって何が嬉しいんだろう…(^^?とちょっと思ったり思わなかったり。

メリットをあげてみると大体以下のような感じかと思います。
海外のサイトでも概ねこの辺りの記述なので。。。

  • RequestScopeやViewScopeより長く、SessionScopeより短いスコープ定義

SessionScopeだと長すぎるけど、ViewScopeだと1画面だけで短い…もやもや、って感じたことがあるので、FlowScopeは嬉しい気もします。

でもそれってConversationScopeも同じようなことができるよね?というのがありそうですが、ConversationScopeであれこれ画面遷移がある場合、ちゃんと設計して作らないと

「あれ、会話が終わらね…」
「うわ、この操作したときダメじゃん」

とか、なり…ませんかね(^^;?
自分は前ちょっと触ったときそんな感じでした。センスがないだけかもですが;

  • フローをパッケージング(jar化)することができるため、フローの再利用ができる

今回のサンプルもそうですが、これが大きいメリットなのだと思います。
JSFは「コンポーネント」という概念が強く、再利用するには便利です。
複数の画面部品をくっつけた「複合コンポーネント」も、その1つでした。

今回FacesFlowsが入ることで、ページと遷移のまとまった単位を再利用できるようになりました。うまく設計すれば、プロジェクトが違っても再利用したフローが作れるかもしれません。

実際はなかなか難しそうですが(^^;

  • ブラウザの複数ウィンドウ(タブ)でも各々でフローが管理される

FacesFlowsでは、ブラウザのタブごとにフローを制御することができます。
サンプルでやると、以下のような感じです。

1つのタブで入力して
f:id:kikutaro777:20131201111408j:plain

もう1つタブを起動して、入力します
f:id:kikutaro777:20131201111413j:plain

同一セッションですが、各々で制御されており、情報が混ざることはありません。
f:id:kikutaro777:20131201111522j:plain

f:id:kikutaro777:20131201111526j:plain

これもConvrsationScopeは同じなんですが(^^;うーん。

余談

Faces FlowsはJSF2.2が出たときに少し試そうとしたのですが、情報が少ないのと、実際に書いてみても全然動かなくて困ってました(^^;
今年JavaOne2013に参加したのですが、その際、Faces Flowsのデモをやっているセッションがあって、その方がGitHubにサンプルもあげてました。

そのセッションレポートは以下
Challenge JavaOne 2013 レポート - 10 Tips for Java EE 7 with PrimeFaces -
https://github.com/marfous/j1demo-pf

今回のサンプルもほとんど上記のをベースに、そこでは使われていなかったメソッドを色々試した、というものです。
やっぱり実際に動く参照があることのありがたさを身に染みました…(^^;

JSF2.2のresetValues属性が地味だけど強力…

Java EE7が出てJSF2.2になりましたが、ビッグチケットに隠れて気づかなかったのですがresetValue属性なるものが追加されていました(^^;

JSFで結構うっとおしいなぁと思う1つにバリデーションでエラーとなった後の挙動があると思うのですが、その際に有益な手段となりそうです。

元ネタ

以下ブログを参考に実際に試してみたので、まとめます。

JSF 2.2: Reset input fields
http://jsflive.wordpress.com/2013/06/20/jsf-22-reset-values/

上記ブログの例はわかりやすいので、そのまま日本語にしてプログラム作ってみました。
まず結果から。

挙動結果

プログラムは単純で、実行すると以下のような画面が初期表示されます。

f:id:kikutaro777:20131009200242j:plain

リンクを押下するたびにテキストの値がインクリメントされます。

f:id:kikutaro777:20131009200354j:plain

2つ目のテキストにはバリデーションがあって、10以下の値だとエラーになります。
保存ボタンを押してみると

f:id:kikutaro777:20131009200428j:plain

バリデーションメッセージが表示されてエラーになります。

さて、ここで再度リンクを押下してみます。すると、バリデーションエラーになっているため、インクリメントできません。

f:id:kikutaro777:20131009200509j:plain

あとでビュー定義を載せますが基本的に全てAjaxによる部分更新です。

で、これをJSF2.1で普通に作ると、リンクのimmediateをtrueにしてみて、でも画面更新されなくて…あれっ、あれっ、じゃあPrimeFaces使うか、みたいになったり…。

で、JSF2.2のresetValuesを使うと、ある1つの記述するだけで、以下のようにリンク押下でインクリメント処理が実行されます。

f:id:kikutaro777:20131009200926j:plain

地味に便利(^^)

ビューの定義

resetValuesを入れる前のビューは以下です。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>ResetValuesの挙動確認</title>
    </h:head>
    <h:body>
        <h:form id="form">
            <h:messages id="msgs" />
            
            <h:inputText id="v1" value="#{bean.value1}" />
            <h:commandLink value="1を足す" action="#{bean.incValue1()}">
                <f:ajax render="v1" />
            </h:commandLink>
            
            <h:inputText id="v2" value="#{bean.value2}">
                <f:validateLongRange minimum="10" />
            </h:inputText>
            
            <h:commandButton value="保存">
                <f:ajax execute="v1 v2" render="msgs v1 v2" />
            </h:commandButton>
        </h:form>
    </h:body>
</html>

ちなみにBeanは以下のように単純です。

package jp.co.hoge.javaee7;

import javax.faces.view.ViewScoped;
import javax.inject.Named;

@Named
@ViewScoped
public class Bean {
    
    private int value1;
    
    private int value2;

    //setter,getter省略
  
    public void incValue1(){
        value1++;
    }
}

resetValues属性を入れる

で、インクリメント可能にするには、リンクの部分を

<h:commandLink value="1を足す" action="#{bean.incValue1()}">
    <f:ajax render="v1" />
</h:commandLink>

以下のように変更します。属性をtrueに指定するだけですね。

<h:commandLink value="1を足す" action="#{bean.incValue1()}">
    <f:ajax render="v1" resetValues="true"/>
</h:commandLink>

これだけ!

自分の所の開発は現在Java EE6でJSF2.1ですが、今すぐ欲しい…orz

ちなみに参考元のブログの最後に、ajaxではない場合にf:resetValuesがある、と書いてましたがNetBeans7.4RC1ではタグ自体がみえなかったので試してません(^^;

はやくJava EE7でJSF2.2使って開発したいなぁ。。。

Challenge JavaOne 2013 レポート - JSR 341 : Expression Language 3.0-

さて、やっとこJavaOne2013のJava EE関連です(^^;

EL式はJava EE6の開発で使っているし、EL3.0だけでひとつのセッションが成り立つのか!?と興味本位に参加しました。

発表者はJSR341のExpert GroupでOracle所属のKin-man ChungさんとJSF等で有名なEd Burnsさんでした。
http://jcp.org/en/jsr/detail?id=341

内容的には、淡々とJSRの内容を読み上げるだけ…な感じもあってか、途中で人が抜けていく感じも(^^?

JSR 341 : Expression Language 3.0

Overview

そもそもEL式って…的な話が冒頭にありました。

  • 2004年にJSTLにおいて出てきた
  • 2006年にJSP2.0へ
  • 2006年にJSF1.2とJSP2.1の両方で
  • 2013年に初めてJSR341として独立した仕様へ
  • JSF,JSPそしてCDIで使える
  • JavaServerとnon-JavaServer stacksを差別化するキー要因

JSTLって…なんですかレベル…(^^;
JavaServer Pages Standard Tag Library、って金魚本にもありました。

最後のポチはよくわかってないです;

New Feature Summary

Expression Language 3.0になって追加となった新機能について。

が挙げられていました。一番アピールしてる感じだったのは、やはりラムダでした(^^;

Java SE8でラムダ使えるようになるけど、もう使えるよ!そうEL式ならね!

みたいに強調されていました。

EL3.0に関しては日本でも@den2snさんがJava EE7のセミナーの中で細かく発表されていたので、大体把握できていた気がします。

Java EE 7でさらに使いやすく、便利になったJSF 2.2、CDI 1.1、EL 3.0の主な強化ポイント
※セミナー発表内ではもう少し細かい粒度で説明がありましたが、上記サイトでは概要だけになってる(>_<)残念

セミナー参加後、自分でも軽く書いてた(^^;

Expression Language 3.0で遊んでみる

実際に試してみた

説明はEL式のサンプルをスライドに出しながら淡々と説明…って感じでした。
そこで挙がってたものを(せっかくなので)実際に一部試してみました。

環境
OS:Windows 8 Pro
IDE:NetBeans7.4RC1
JDK:8 Early Access
AP:GlassFish4.0

セッションにあったサンプルの一部をJSFで以下xhtmlに書いてみます。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>JavaOne2013 EL3.0で遊ぶ</title>
    </h:head>
    <h:body>
        ラムダ式<br/>
        <h:outputText value="#{(x -> x + 1)(10)}" /><br/>
        <h:outputText value="#{((x,y) -> x + y)(3, 4)}" /><br/>
        <h:outputText value="#{(()->64)()}" /><br/>
        <h:outputText value="#{incr = x -> x + 1; incr(10)}" /><br/>
        <h:outputText value="#{fact = n -> n == 0 ? 1 : n * fact(n-1); fact(5)}" /><br/>
        Stream API<br/>
        <h:outputText value="#{[1,3,5,2].stream().sorted().toList()}" /><br/>
        <h:outputText value="#{[1,2,3,4].stream().sum()}" /><br/>
        プログラム側でELProcessor使って生成<br/>
        <h:outputText value="#{indexBean.hello}" /><br/>
    </h:body>
</html>

実行します。

f:id:kikutaro777:20131005124036j:plain

普通に動きますね(^^)

ちなみにBean側でELProcessorを使いましたが以下の簡単なものです。

package jp.co.hoge.bean;

import javax.annotation.PostConstruct;
import javax.el.ELProcessor;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class IndexBean {
    
    private String hello;

    public String getHello() {
        return hello;
    }

    public void setHello(String hello) {
        this.hello = hello;
    }

    @PostConstruct
    public void init(){
        ELProcessor elp = new ELProcessor();
        
        //concatenation operator +=
        hello = (String) elp.eval("'Hello' += 'World!'");
    }
}

JDK8のEarly Accessでラムダやstreamは既に試せるので、EL3.0で試すメリットも今となってはなんとも…ですが(^^;
JSFのビューでどんなことまでできるのか??あたりを掴んでおくのはアリかなと。

Support for stand-alone environment

ELでラムダとかなると、ビューでロジックがりがり書けちゃうじゃん…とか思いますが、どうもELは独立した1つの言語的な位置づけを目指しているようで、実際今回のセッションでも「Java EEとかと関係なく簡単に使える」とアピールしてました。

そういった意味では、Expression Languageという言語があって、Java EEJSFのビューから使うこともできるよ、的な感じなのかなと。

ここは幾つか具体的なコードもあったので、後で書き加えられればと思います。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村