Challenge Engineer Life !

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

IBM Cloud ライト・アカウント&Java EEアプリのデプロイ #IBMCloud #jjug_ccc

先日参加したJJUG CCCのブースLTで「IBM Cloudライト・アカウント」の存在を知りました。その後、ブースに行って @Santea3173 さん とお話して興味が湧いたので早速試してみました。

IBM Cloud ライト・アカウント

クレカ登録なしで無期限に利用できる&IBM Websphere Liberty Profileが動く、ということでJava EE(Jakarta EE)のサンプルを試すのに良さそうなクラウド環境です。

アカウントの作成は簡単です。手順が気になる方は以下を参考にしてください。
https://qiita.com/ayatokura/items/42d4bc728112c733c80d

ライト・アカウントに関する概要を知りたい方は以下がおススメです。
www.project-respite.com

Java EEアプリのデプロイ

アカウントを取得してログインするとDashboardが表示されるので「リソースの作成」を押します。
f:id:kikutaro777:20180602130524p:plain

今回はJava EEアプリを試すため「Liberty for Java」を選びました。その他の言語含めてライト・アカウントでも色々遊べそうです。
f:id:kikutaro777:20180602130650p:plain

アプリ名やホスト名を入れます。
f:id:kikutaro777:20180602141841p:plain

中はCloud Foundryが動いているので、Cloud Foundry CLIで簡単にデプロイなどができます。

自分の環境の話ですが、前にPivotal Web Servicesを触っていたので、接続先はPivotalになっていました。まずはIBM Cloudへ切り替えました。

cf api https://api.ng.bluemix.net

ログインします。

cf login

Java EEアプリはとりあえず超簡単なJSFページを作って試しました。ドキュメントをみるとmanifest.ymlが必要そうにみえましたが、なくても動きました。
github.com

なお、これを実装したときは手元のPayaraで動作確認をしてました。で、Websphereで確認することなく、そのままwarをIBM Cloudへデプロイしました。

cf push kikutaroibmcloudsample -p target\IbmCloudLightSample-0.0.1.war

f:id:kikutaro777:20180602133158p:plain

デプロイ後、アクセスすると以下のページが表示されます。
f:id:kikutaro777:20180602141925p:plain

名前を入れると、呼び返してくれる簡単なWebアプリですが、以下のようにちゃんと動きました。かなりお手軽ですね。
f:id:kikutaro777:20180602141928p:plain

管理Beanについて

ちなみに、最初は管理BeanをCDI(@Named)で作っていたのですが、実行時に以下のエラーとなりました。CDI管理Beanが認識されていないようにみえます。Payaraでは問題なかったので、何か設定が必要なのかも?

f:id:kikutaro777:20180602142709p:plain

とりあえずJSF管理Bean(@ManagedBean)で実装したら動いたのでソースは@Managedを使ったものとなっています。この辺りについてはどこかで原因を探ります。

ログをみて気付いたのですが、WebsphereのJSF実装はmyfacesなんですね。

org.apache.myfaces.view.facelets.el.ContextAwarePropertyNotFoundException: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'indexBean' resolved to null
	at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getType(ContextAwareTagValueExpression.java:79)
	at org.apache.myfaces.shared.renderkit._SharedRendererUtils.findUIOutputConverter(_SharedRendererUtils.java:78)
...

PrimeFacesのTimelineコンポーネントで1年を振り返ろう!

この記事は「Java EE Advent Calendar 2016」の8日目の記事です。
昨日は@sudoyuさんの「Spring系の2016年の現行プロジェクトをまとめてみる」でした!
明日は@megascusさんです!

自分にとってJava EE Advent Calendarは中々思い入れの強いイベントです。というのも、はじめてお誘い頂いた当時の自分は「アドベントかれんだー?なにそれ…おいしいの?」って感じでして、、

で、はじめて書いたAdventが

kikutaro777.hatenablog.com

です。2012年か…懐かしい。

atnd.org

ということで、4年を経て、改めてPrimeFacesで書いてみます。

実はPrimeFacesは、今もまだしっかりと継続して機能拡張が続いています。バージョンは6.0で、これはOSS版として誰でも自由に使えます。もう1つelite版という有償版があるのですが、そちらは6.0.8となっています。

バージョン6.0が出たとき、いくつかコンポーネントが追加となりました。

PrimeFaces 6.0 Released |

といっても元々PrimeFaces Extensionにあったコンポが統合された形なのですが。6.0.8ではOrganigramなど新しいコンポが増えてたりして、まだまだ拡張されそうです。

ということで、6.0で増えたTimelineコンポーネントというのを使って、自分のこの1年の仕事を振り返ってみました。

f:id:kikutaro777:20161207225040j:plain

うん。色々と心が折れるに十分な1年でしたね。

ソースはこちらにあるので、是非皆さんも1年をJava EEのコードで振り返ってみてください!

github.com

ちなみに、こんなカラフルにしたり

f:id:kikutaro777:20161208000649j:plain

左にある項目をドラッグ&ドロップで投げ込んだり

f:id:kikutaro777:20161208000713j:plain

上下のTimelineで連動させたり

f:id:kikutaro777:20161208000907j:plain

意外と多機能なコンポーネントとなっています!!

Java EE Advent Calendar 2016の8日目が空いてしまってたので、急きょ入れたため、非常に雑なネタとなってしまいました。すみません…。

自分のXamarinアプリをLTで見せてきました!

久しぶりにブログ更新です(^^)

JXUGC #17 お前の Xamarin アプリを見せてみろ!

今日はJapan Xamarin User Group (JXUG)にて開催された「JXUGC #17 お前の Xamarin アプリを見せてみろ!」に発表側で参加してきました!

f:id:kikutaro777:20161015122059j:plain

jxug.connpass.com

個人的には待ちに待ったイベントという感じでした!

というのも、5月7日に「JXUGC #13 東京 緊急開催 Xamarin のすべて!」へ参加して、そこで今日のようなイベント(作ったアプリを紹介するイベント)をやる予定です~と聞いて、そこからXamarinアプリを本格的に作り始めたからです(^^)!

kikutaro777.hatenablog.com

LT一覧

最終的には19(かな?)のLTがありました!

仕事というか商用で作られている方もいらっしゃって、最初のほうからレベルが高くて焦りました(^^;

最終アンケートにあった一覧から拾ったものですが、LT&アプリは以下でした。

  1. TomohiroSuzuki@がんばれガンプ ソルバルウを倒せ
  2. ayasehiro@しゃべる翻訳アプリ
  3. toshity1980@日本語学習アプリ(仮)
  4. キクタロー@坂道46コレクション
  5. ShunsukeKawai@Microsoft Foresight イベントアプリ
  6. yamamo@AzureVM Power Switch
  7. masatoru@縦組みアプリ
  8. kinoshita@Live Cloudia
  9. AmouKeishima@PerfumeHub
  10. サンテア@Search SQL
  11. amay077@東三河モーニングアプリ
  12. omanuke@証券取引アプリとNoteアプリ
  13. kobake@Hatenatter
  14. muak_x@色しらべ
  15. Kenichiro Nakamura@SfbPlus
  16. MasakiYoshida@ロトゆう
  17. wraith13@keep grass
  18. qwarty2501@SparrowTweet ツイッタークライアント
  19. ShoTakizawa, alienOada@GochiusaProtocol

全部紹介すると大変なので…後日YouTubeなどにアップされたりするそうなので、ここでは私が投票させて頂いた3つに触れたいと思います。

今日のツイートはtogetterでまとめられていたので、各発表の反応やスライドは以下で確認できると思います。
togetter.com

10/16追加 スライド集まるページがあるようですので追記しました
jxug.connpass.com

muak_x@色しらべ

自分が1番に投票させて頂いたのは、この発表でした!

アプリのカメラで標準を合わせたものの色を分析してくれるアプリ。

これのRGB知りたいなーと思うことがちょこちょこあるので、こんなアプリがあったのか!と。

さっそく自分が着ていった乃木坂Tシャツをうつして色の解析したりしてましたw

f:id:kikutaro777:20161015204401p:plain:w200

実用的!

サンテア@Search SQL

2位に選んだのはTwitterのツイートをSQLライクに取得できるという玄人向けアプリ(^^;

学生(院生?)さんでこんなアプリ作れるのかーすげーという感動が大きかったです。

色んなライブラリも使われてて、勉強になりました。

yamamo@AzureVM Power Switch

3位はPerfumeHubと悩んだのですが、AzureのVMを起動・停止できるアプリに投票!

Android,iPhone,UWPと3つでリリースされてて、かつビューに対するこだわりに「すごい!」と思い。

ちなみに自分の場合、これのOpenShift版がめっちゃ欲しい(^^;

投票は3つだったので、上記にしましたが、どの発表もレベル高くて、悩ましかったです(^^;

自分のLT

私のLT資料は以下です(^^;ちょっと乃木坂色が強すぎた気もしつつ…わりと良い反応が頂けたので良かったです!

久しぶりにこういう場で発表したので緊張しました。

最終的にまさかの6位(7位同率)に選んで頂きまして、Xamarinのおサルさん頂きました!

f:id:kikutaro777:20161015180051j:plain:w400

楽しかった!

イベントは13時開始で18時くらいまでだったのですが、そんな時間を感じさせないくらい、あっという間でした。

感想は

  • 色んなXamarinアプリがみれてよかった!!
  • 使ってるライブラリとか技術をたくさん知れてよかった!!
  • ちょまどさんに「発表よかった~」と言って頂いてうれしかった!
  • Prismめっちゃ使ってみたくなった!(Brianさん @brianlagunas の発表)

などなどです。JXUGすごい活気あるなーと改めて。

今日はJJUG(日本Javaユーザグループ)で「JavaOne 2016 報告会 @ 東京」があって、ほんとはJava EEの話とかも聞きたく参加したかったのですが…(>_<;
jjug.doorkeeper.jp

結果的には、こっちで発表を経験したり、色んな話を聞けて良かったなーと思いました(^^)

楽しい時間をありがとうございました!

Xamarin & Java EE & 乃木坂46 でAndroidアプリ作ってリリースしてみました~

あまり大したアプリではないのですが…
@ytabuchiさんから以下頂いたので、晒してみます。


こんなアプリです(^^;
play.google.com
せっかくなので経緯など書いてみます。

スマホアプリ開発動機

昔から「一度はスマホアプリを作ってみたいなぁ」とは思っていて、Cordovaを触ってみるかな…と今年のはじめに書籍を買った後、突然Xamarin無償化の話がニュースになりました。

で、そこからXamarinを調べはじめ、5月にJapan Xamarin User Group (JXUG)さんの以下勉強会へ参加しました。

kikutaro777.hatenablog.com

勉強会の中で「9月くらいにアプリ作ったよLT大会みたいなものやれたら」みたいな話があって、面白そう!これを機会に何か作ってみたい!と思ったのがアプリ開発のきっかけでした。

あ、ちなみに乃木坂46の「きっかけ」という名曲があるので是非聴いてみてください!

www.youtube.com

あのミスチル桜井和寿さんがカバーするほどの曲です!

_人人人人人人人_
> 突然の宣伝 <
 ̄Y^Y^Y^Y^Y^Y ̄

www.asagei.com

実はこの宣伝もアプリと全く関係ないわけでなく(^^;実は関係大ありです。

私が大ファン(ファンクラブ会員番号11)だった堀北真希さんが結婚されて以降、自分を支えているのは乃木坂46でして…。
前々から好きだったのですが、今は好きとかいう次元を超えつつあります。

で、Xamarin関連でいえば5月に日本マイクロソフトさんのde:codeに参加して、乃木坂46エバンジェリストこと西脇さんのプレゼンに超感動したり

kikutaro777.hatenablog.com

@ytabuchiさんの色々なXamarin関連のセッションを聴いたり、その中で知ったXamarinエバンジェリストのちょまどさんのXamarin愛などに刺激を受けたり…

そんなこんな色々交じって「Xamarin + 乃木坂46」で何か作ろうと決めました。

ちょうどJava EE(というかほぼJAX-RSのみ)で、乃木坂ちゃんのRESTful API作ったりもしてたので、組み合せる形としています。

github.com

サーバサイドはOpenShift上の無償Gearなので、あまり負荷がでてくるようなら有償の使ったり色々考えないと。。

Xamarinのアプリ開発

8月ちょっと忙しそうなので…細かい技術的なことは別途書いていきたいなぁと。
ここでは簡単に。

苦労したこと

  • Xamarinの環境セットアップw
  • .NET 2.0以来のC# & Visual Studio(NuGet初だったり、昔はVS + VSSだったのでVS + Git初だったり)
  • Windows 10にOSアップデートしたらVisual Studio Emulator for Androidが起動しなくなったこと(Hyper-Vが駄目になったぽい)
  • アプリのアイコンやGoogle Play Store向けの画像の準備
  • Google Play Storeへのリリース申請で2,3回Rejectされてしまったこと

デザインセンスがないので、4点目はかなり苦労しました(^^;
人生で一番GIMP触った気が。透過とか全然やったことなかったので苦労しました。

こんなiconです。
紫は乃木坂ちゃんでN=Nogizaka、緑は妹グループの欅坂46でK=Keyakizaka。

f:id:kikutaro777:20160807120400p:plain

また、Google Play StoreからのRejectはかなり泣いたのですが、WebViewでYouTubeを使ってるのですが、レジュームしたときにバックグラウンドでYouTube動画が動かないことなど、色々条件があるためでした。ここもどこかで書きたい。

今後やりたいこと

最初色々やりたいなぁと思っていたのですが、最終的には一旦シンプルにして出すことにしました。そうしないといつまでもリリースできなさそうなので(^^;

技術的には

  • iPhoneアプリも出したい!
  • 組込みDBでオフライン機能とか入れたい(KVS AkavacheとかCouchBaseとか利用して)
  • Tabbed Pageのタブ切替をスワイプ対応したい
  • WebViewでサイト読込時にProgressBarかActivityIndicatorを出す
  • SendGridとか裏でつかって、機能要望とか障害報告飛ばしたい

自分はMacを持っていないので、現状Andoridアプリのみ。。。これだとAndroid Studio使ってるのと変わらない(*´Д`)ので欲しい。
でもiPhoneアプリ、登録料というか年間のが高いっすねぇ…。完全趣味で広告なしなのであれ。

ユーザ観点では

  • 推しメンでフィルタしたい
  • よくみるまとめサイトとかをタブに追加したい
  • ブログ更新とかあったらプッシュ通知してほしい

とかですかね。プッシュ通知はXamarin Formsでどこまで共通的にできるのか…ってかDependency Serviceなのかな。

ちなみに、似たようなアプリは結構あるのですが、とりあえずウリにしてるのは妹分の欅坂46と合わせたアプリという点と、早速ひらがなけやきに対応した辺りでしょうか。

アプリのコードは普通に下に置いてます(^^;全然C#慣れなくてあれですが。
github.com

面白いこと

Google Play Storeで「乃木坂46」と検索したら、公式から出てる「乃木恋」と同じラインに出てきて地味に興奮しました(^^)やっぱりこういうのが楽しい。

f:id:kikutaro777:20160807030249j:plain

出だし、思ってた以上にインストールされてびっくりです。サーバサイドが心配(^^;

f:id:kikutaro777:20160807121631j:plain

追記

画面イメージなど興味ある方はこちらをどうぞ↓
nogizaka46.hatenablog.jp
nogizaka46.hatenablog.jp

パーフェクトJava EEの執筆に参加させて頂きました

7月26日に「パーフェクトJava EE」が発売となりました。

gihyo.jp

パーフェクト Java EE
パーフェクト Java EE
posted with amazlet at 16.07.30
井上 誠一郎 槙 俊明 上妻 宜人 菊田 洋一
技術評論社
売り上げランキング: 5,901

昨今、OracleさんがJava EEから手を引くのではと噂が出たり、それはいかんとコミュニティからJava EE Guardiansなるグループが立ち上がったり、そしてOracleさんが否定したり…技術的な所とは外れた所で盛り上がりをみせています。今年のJavaOneで、どんな話がでるのでしょうか。気になる所です。

書籍発売に伴って、関わらせて頂いた流れとか感想を書きたいと思います。

経緯

パーフェクトJava EEを出そうという動き自体は、井上誠一郎さんを筆頭に、槙さん、上妻さんと2014年から動いていたそうです。私は去年の春頃に槙さんから「JSFを書ける人が欲しい」という名目でお誘いを頂きました。

この時点では井上さんと面識はなかったのですが、私自身パーフェクトJavaを読んでますし、JJUGの発表なども色々拝見していました。そして、JSF嫌いで有名っていうのも(^^;笑

今は読めなくなってしまっていますが、以下Advent Calendarのリンクにもある「Java EE6はSpringの代替になると思いますが、ただしJSFは除く、という話」のエントリはJava EEを触り始めた当時の自分には結構衝撃だったのを覚えています。(実際にはこのネタに関して、JavaOne報告会のLTか何かで発表を聞いたとき)

atnd.org

ということで、お話を頂いた時点では「あの井上さんの元でJSFを書くなんて無理です!」とお断りさせて頂いたのは懐かしい思い出です。

個人的には、勉強会とかの発表などを通じても、井上さん・槙さん・上妻さんとは圧倒的にレベル差があるというか、パーフェクト感のない自分が参加していいのか(これは今でもですが)悩みがずっとありました。

感想

2014年にJavaエンジニア養成読本の執筆に参加させて頂いたとき、きしださんから本当にたくさんの指摘を頂いて、自分の文章力のなさを痛感しました。今回はあのときの反省とかを色々活かし、、、と頑張ったつもりですが、早々レベルアップするものでもなく、文章というのは難しいと改めて今回も痛感しました。

Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)
きしだ なおき のざき ひろふみ 吉田 真也 菊田 洋一 渡辺 修司 伊賀 敏樹
技術評論社
売り上げランキング: 35,923

養成読本の発売前は、家が隣家の火事に巻き込まれて、あらゆる所持品が炎上してしまいました。

今回パーフェクトJava EEでは、家は大丈夫だったのですが、とても大変なプロジェクトに参画となり、炎上してしまいました。というか現在進行形…。執筆業は向かないようです(^^;

本のウリ

井上さんが著者略歴で書かれているのが、まさにそれなのかなと。

「我々執筆陣はオラクル社員ではないので、建前を書く必要がありません。建前よりも本音の本です。」

と(^^;

槙さんは本音出し過ぎなやんちゃぶりをみせていて、Java EEの本なのに「本当にJava EEで良いですか?」というコラムを書いていますw こういう自由さも好きです。

技術的なところでは、Java EE 8で入る予定のMVCを先取り的に書いてあったり、私も日頃CDIを調べるときに「CDI 上妻」とよく打つのですが(目的はスライド JJUG 11月ナイトセミナー CDIをはじめよう に辿り着くためとか)CDIについてここまで詳細に書かれている本は中々ないのではないかなと思います。そしてJPAも深い。

私自身の所でいえば、JSFいいよいいよ、という感じの書き方ではなく、現場で使ってて思うことなど、なるべくちりばめたつもりです。

あと、PrimeFacesについて真面目に触れることができて良かったです。仕様ではなく、あくまでもライブラリなので入れていいのか悩んだ所ではありましたが、海外の書籍では当たり前のように入っていたりするので入れてみました。

PrimeFaces FounderのCagatay CiviciさんからTwitter通じて以下頂いたり

Facebookグループでも反応してくれて、温かいなーと。
f:id:kikutaro777:20160730161450j:plain

おまけ

同時期に「Spring徹底入門」がでていて、私も早速購入しました。今回の執筆メンバは私を除いてSpringにとても精通しています。Springのカバー範囲の広さや進化の速さはエンプラ系Javaに関わる人なら多くが知るところですが、そういう観点を持ちつつJava EEをみると、また色々違うのだろうなぁと他の執筆メンバをみてて強く感じまして(^^;

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
株式会社NTTデータ
翔泳社
売り上げランキング: 2,231

あとJSF&Bean Validationのコードは一応以下に置いてます。
GitHub - kikutaro/PerfectJavaEE: JSF and BeanValidation

PayaraMicro on Heroku !

I'm newbie both Payara and Heroku. Though I tried to play with these for preparing my presentation in Japanese GlassFish User Group event.

glassfish.doorkeeper.jp

About one month ago, I participated Japanese Salesforce event. It was called "Salesforce Summer".eventjp.salesforce.com

At the event, I saw Heroku demonstration. This is the reason why I started to use Heroku.After the event, I checked Heroku site and found good Java tutorial. In the tutorial, the sample Java web application used Spark.

I thought that ... if I use Payara Micro, is it possible to deploy Java EE application to Heroku ?

Finally, it could. Here is procedures.

Getting Started with Java on Heroku

Firstly, I started "Getting Started with Java on Heroku". The tutorial is very polite, so it's easy to do.
f:id:kikutaro777:20150914011127j:plain

  • Installing Toolbelt (for Windows on my environment)
  • heroku login

After that, I cloned "java-getting-started" from github.

git clone https://github.com/heroku/java-getting-started.git

And changed directory.

cd java-getting-started

Next

heroku create
git push heroku master
heroku ps:scale web=1
heroku open

Finally I confirmed the deployed page.

f:id:kikutaro777:20150915233153j:plain

These procedures are same as the tutorial.

PayaraMicro on Heroku

I used the same project, it means I used "java-getting-started" project cloned from GitHub.
It's kind of cheat I think. Normally, it had better create as new project.

Firstly, I changed pom.xml.

<dependency>
    <groupId>fish.payara.extras</groupId>
    <artifactId>payara-micro</artifactId>
    <version>4.1.153</version>
    <type>jar</type>
</dependency>

Also, I edited the code like this.

import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicro;

public class Main {
  public static void main(String[] args) throws BootstrapException {
      PayaraMicro.getInstance()
                .setHttpPort(Integer.parseInt(System.getenv("PORT")))
                .addDeployment("DeployTarget.war")
                .bootStrap();
  }
}

It's very important to call "setHttpPort(Integer.parseInt(System.getenv("PORT")))", because the port of HTTP on Heroku is binded random.

If that helps, I used NetBeans IDE.

f:id:kikutaro777:20150914012105j:plain

After changing code, I copied from WAR file which is target of deploy to this project.
The War was created by Java EE 7, but I used only JSF and CDI.

Finally, I committed the code and "git push heroku master". Everything was done.

Here is my deployed Java EE app with PayaraMicro on Heroku :)
f:id:kikutaro777:20150915233036j:plain

Enjoy!

ガッツリJava EEで作られたZEEF.COM

少し前にJava EE 8に関する情報が色々まとまっていて、ウォッチするのにいいなぁと思ったページがありました。

javaee8.zeef.com

それで「ZEEF」って単語を何となく覚えていたのですが昨日Twitterで

というのをみて「え!WildFlyで動いてるの!?」とびっくりしました。で、さらにびっくりしたのは、なんとこのサイト、フロントがJSFで作られているっていう。

トップ画面の上段にオートコンプリート付きのテキストボックスあるんですけど
f:id:kikutaro777:20150515225008j:plain

この辺はPrimeFaces使ってるっぽいです!
f:id:kikutaro777:20150515225038j:plain

昔、@aoetkさんが

aoe-tk.hatenablog.com

で色々紹介されていたように、オープンなサイトをJSFで、というのはあるにはあるのですが…(^^;

で、このzeef.comのアーキテクチャについてAdam Bienさんがブログでインタビュー回答みたいな形式で書かれていて非常に興味深いです。

A Java EE Startup: Filtering Information with zeef.com : Adam Bien's Weblog

Java SE 8、Java EE 7の組合せでアプリケーションサーバはWildFly 8.2。そしてアプリはWARじゃなくてEAR形式とのこと。そういえば自分、EARで固めたことないなぁ(^^;

先ほども書きましたが、フロントはJSFで、CDI管理BeanやBean Validationや一部JSFのバリデータを利用してるとのこと。

EJB(Stateless以外にEJBTimerなんかも使ってるようです)やJPA,JAX-RSも使って、ガチなJava EE構成っぽいです。セキュリティはJASPIC(Java Authentication Service Provider Interface for Containers)、ただしJASPIC自身はlow-levelなので、higher levelなのは作る手間もあったようで、それがモチベーションとなってJava EE 8 securityのExpert Groupに参加されてるそうです。って、書くとさらっとしてるけど、すごいなぁ(^^;;

で、JSF周辺ですが

OmniFacesやPrimeFaces、PrettyTimeなどを使っているそうです。

PrettyTimeって初めて知りました(^^;これPrettyFaces作ってるのと同じ所ですね。

www.ocpsoft.org

自分もOmniFaces使ってたり

kikutaro777.hatenablog.com

PrimeFacesもガッツリなので

kikutaro777.hatenablog.com

なんか日本では浮いてる感じなのかなぁ…(そもそもJSFとかね)みたいに結構ネガティブだったのですが、あながち間違った選択してないんじゃー、的な気持ちになって嬉しかったです(^^)

その他、Markdownの処理にはPegDown、HTMLのパーサにJSoup、RSS/AtomはROME、画像周辺はImage4JmgscalrBatik、他にもGoogle API client libraryやキャッシュやJPA以外のエンティティにInfinispanHibernate Searchも使っているようです。

Java技術てんこ盛り!使ったことないライブラリも多々あるので少しずつ触ってみたいなぁ。

パフォーマンスどうなの?って辺りには

Java EE is incredible fast. The website itself is now doing over 120k views a month and as mentioned above is running on a single server basically, which is not even that powerful.

とのことで

ですね。サーバのスペックまでは書かれてないですが、それほどパワフルではないとのこと。

で、JSFにも触れてます。

You occasionally hear that JSF is supposedly not suited for public web sites, since it would be slow and using a lot of memory. We found however that this is absolutely not the case.

これは自分がJSFやり始めた頃にもよく聞いて、「JSFは速度やメモリ的にオープンなサイトにはあんまり向かない」と教えられて育ったので結構衝撃的な一文でした(^^;

あわせてJSF関連のベンチマークも紹介されてたので、読みたいところです。

他にも色々細かい説明書かれているので、Java EEな方々には参考になるのではないでしょうか。英語で細かいニュアンスいまいちわからない所もありますが、めっちゃ面白かったです。

Java Day Tokyo 2015でJSFについてお話させて頂きました #javadaytokyo

昨日、有楽町の国際フォーラムで開催された「Java Day Tokyo 2015」に参加しました。

ブログをほじくりかえしてみたら、今年で3回目の参加(^^;時間の流れがはやいなぁ。kikutaro777.hatenablog.com
kikutaro777.hatenablog.com

今回のイベントでは、なんと…セッションでスピーカーを担当させて頂く機会を頂きました(^^;汗汗汗

今年はJavaが誕生して20周年という記念すべき年で、そんな年に自分なんぞが発表させて頂いていいものか、悩みもあったのですが…せっかくの機会ですし、前向きに考えて挑戦させて頂くことになりました。

発表は「Java EE 開発における JSF の活用について」でした。

普段仕事で使っているJSFに関して、(少し大げさですが)自分の持てる知識を全て出した感じです(^^;;

なお、資料に出てくるコードは全てではないですがGitHubのほうにもあげました。あまり準備時間がとれず、少し雑なコードだったりするのですが…今後少しずつ整備・追加していくかもしれません(特にスコープの所とか)github.com

Togetterもまとめて頂いてましたm(_ _)mtogetter.com

あとは感想などをつらつらと…。

発表準備

お話を受けたものの、開発の佳境やら何やら色々な仕事が重なってしまい……

調整能力が必要だなぁ、と痛感する日々でした。

後悔はしたくない、と出来る限りの時間を割きましたが、発表練習がほとんどできず、当日の喋りは微妙だったかと思います(-_-;少し悔しい感じです。

来週納品です。

他のセッション

基調講演の途中時間で接続確認やリハがあったので、基調講演をあまりちゃんと聞けませんでした(*´Д`)

その他のセッションも、自分の発表に向けた緊張がすごくて、スピーカー控室で練習してたり、ほとんど聞けずじまいでした(*´Д`)

自分の発表が終わったあとは気が楽になったので、楽天の岩崎さんのセッションを聞きにいきました。

岩崎さんのお話は力があって、いつも聞いていて楽しいです。私はStrutsや昔のJ2EEを全く知らないのですが、その辺りをよくご存じの上で比較しつつお話されるため、Java EEってホント進化してきてるんだなぁと改めて。

楽天さんがJSFのエキスパートグループに参加されてるのもすごいですね(^^)今後も色々と楽しみです。

おまつり

最後は大山さんと寺田さん司会の元、Javaのクイズ&LTがありました。

Javaはコミュニティが大事、ということで、名刺3枚を回りと交換という所から始まるという(^^;

めっちゃ楽しい時間でした。大山さんが楽しそうにJavaのあれこれを語るのは、みてるだけで楽しいですね。

そしてツッコミ所があるとすかさずツッコミを入れるJavaチャンピオンの櫻庭さん(^^;

こうした方々がずっと昔からJavaコミュニティを支えてて今に至るんだろうなぁー、20年ってすごいなぁと。

LTも1つ1つがとても印象的で良かったです。

勉強会やコミュニティに参加して、色々変わった、というのは私自身も同じなので、@syobochimさんやJava女子部の方、@zephiransasさん、@irofさんのお話は、それぞれとても共感するものでした。

懇親会

最後は東京駅近くのお店へ移動して、懇親会に参加させて頂きました。

ロジ子さんとお会いできて感動(^^)

Dukeケーキ!

f:id:kikutaro777:20150408212615j:plain

寺田さん櫻庭さんによるケーキ入刀でこんな姿にw

f:id:kikutaro777:20150408213503j:plain

大盛り上がりでした(^^)

じゃんけんでDukeキーホルダーゲットしました!そして、懇親会のお土産としてチロルチョコも!

f:id:kikutaro777:20150409141300j:plain

発表疲れもありましたが、吹っ飛ぶくらいに楽しかったです(^^)

これからもがんばろー。

JSFでもモダンなUIが作りたい!

この記事は「Java EE Advent Calendar 2014」の23日目のエントリーです。
昨日は@den2snさんの「JSFのバリデーション - DENの思うこと」でした。明日は@HirofumiIwasakiさんです。

受託でエンプラ

私の仕事は受託開発がメインで、主に製造業のお客様向けに販売管理システムの構築を行っています。
(製造業で複雑な製品扱っている所は営業さんが見積作るの大変なので、その辺をコンフィグレータ使ってうまいことするシステム)

見積業務もお客様によってそれぞれ異なるので、要件に合わせて毎回要件定義して、システムも裏にERPがいたり、フロントでCRMがいて連携したり、色々です。まぁ、いわゆるエンプラなシステムです。

昨今、Web系への憧れというのは当然あって、受託やエンプラで負のネタをみるたび「ですよねー」と思ったりも(^^;;

……

おっと、愚痴でなくAdventでした。

そんなWeb系、フロントとバックで色々と違うのでしょうが、フロント側というのは、素のHTMLは当然のこと、HTML5やCSS、JavaScriptはバリバリで、特に昨今のJavaScriptフレームワークなんかは色々と使いこなせるエンジニアなんだろなぁと勝手にそんなイメージでいます(^^;

一方自分はというと、Web系システムやってるけど全然違います(^^;

最近では、AngularJSとか勉強して、業務でもやってみたいとは思いつつ、周囲をみてもJavaScript書けるエンジニアは一人もいませんし、チームとしての学習コストや保守性を等を考えると中々上長の承認も難しいのかなと(この辺がエンプラ的…)

とはいえ、昨今、お客さんの目が肥えているのは事実で、モダンなWebを求められることはあるわけです。

最近のケースだと、お客さんがNulabさんのBacklogを使っていて「クリックするとダイアログじゃなくてパネルが出てきて、こういう動きとか」みたいな感じでお話があったり。

JSF + PrimeFaces

私の所では、Java EEのJSF(JavaServer Faces)をここ2年くらいメインにしていて、さらにPrimeFacesと呼ばれるリッチコンポーネントを利用しています。

ちょうど初めてJava EE Advent Calendarに参加した2012年がそのネタでした。

JSFイケてないよね、というのは散々あちこちで聞きますし、もう言われ疲れたので、その辺の議論は置いておいて(^^;
今日はJSFだとこんな感じに、という所を書きたいなと思います。

NulabさんのBacklog

ここ1年くらいですが、仕事での課題管理は、社内開発された障害管理システムやTracからNulabさんのBacklogへ移行しています。

以前にnulabさんのカンファレンスnuconに参加しましたが、利用してる会社は相当多いですよね(^^;すごい

せっかくなので、今日はBacklogを参考に、JSFだとどんな風に作れるか、少し遊んでみました。

Backlogはメイン画面がこんな感じです。
f:id:kikutaro777:20141223221613j:plain
ちなみにこれは、会社の社内公募(コンペ)のチームで使ったときのものですが、昨日に社内で結果発表があって何と最優秀に選ばれました!わーい(^^)/

この画面をJSF+PrimeFacesでちょっと作ってみました(^^;
時間の都合で、簡易版ですが…
f:id:kikutaro777:20141223223541j:plain

また、Backlogではどう作られているか、という所までは時間の都合上みれていないです。すみません。

Sticky

Backlogの上段にあるメニューバーは常に最上段に表示されていて、課題のフィードとかが長くなったときでもちゃんと利用できます。
f:id:kikutaro777:20141223222722j:plain

最近だとよくあるものですが、業務系だと…どうでしょう(^^;
マウスで戻らせるものも多々ある気が…。

PrimeFacesにはStickyというコンポーネントがあって、これで同じことができるようになっています。

f:id:kikutaro777:20141223223625j:plain

faceletsの定義は簡単でstickyコンポを置いて、target属性で、固定したいコンポーネントのidを指定するだけです。
今回の例ではツールバーを固定しています。

<p:sticky target="tlbHeader" />

<p:toolbar id="tlbHeader">
    <f:facet name="left">
        <p:commandButton id="btnHomeMenu" icon="ui-icon-home" />
    </f:facet>
    <f:facet name="right">
        <p:themeSwitcher effect="fade">
            <f:selectItems value="#{backlogBean.listTheme}" />
        </p:themeSwitcher>
    </f:facet>
</p:toolbar>

Overlay PanelとTooltip

Backlogの左上にあるアイコンをクリックすると
f:id:kikutaro777:20141223222301j:plain

同じ画面に吹き出し形のパネルが表示されます。
また、画像にマウスオーバーするとツールチップも吹き出しの形で出てますね。
f:id:kikutaro777:20141223222316j:plain

こういうパーツはここだけでなく結構いろんな所で使われています。
ユーザ的にはダイアログ表示より手軽に付加情報がみれていいですよね。

PrimeFacesだとOverlay Panelを使うのが良さそうです。
ツールチップはTooltipコンポーネントがあります。

ボタンがあって
f:id:kikutaro777:20141223223918j:plain

クリックするとパネル表示。ツールチップは吹き出しではないですが。
f:id:kikutaro777:20141223223924j:plain

faceletsはこんな感じで、overlayPanelのfor属性で、先ほどのツールバーに置いてあるボタンのidを指定しています。

<p:overlayPanel for="btnHomeMenu" showEffect="slide" hideEffect="slide" dynamic="true">
    堀北真希さん写真集 絶賛発売中
    <h:panelGrid columns="3">
        <h:graphicImage id="imgCastella" value="/resources/images/castella.jpg" />
        <h:graphicImage id="imgDramatic" value="/resources/images/dramatic.jpg" />
        <h:graphicImage id="imgS" value="/resources/images/s.jpg" />
    </h:panelGrid>
    <p:tooltip for="imgCastella" showEffect="fade" hideEffect="fade"
               value="出版社: ワニブックス ISBN-10: 4847029283 発売日: 2006/3/25" 
               trackMouse="true" />
    <p:tooltip for="imgDramatic" showEffect="fade" hideEffect="fade"
               value="出版社: マガジンハウス ISBN-10: 483872604X 発売日: 2013/9/26" 
               trackMouse="true" />
    <p:tooltip for="imgS" showEffect="fade" hideEffect="fade"
               value="出版社: マガジンハウス ISBN-10: 4838719159 発売日: 2008/10/10" 
               trackMouse="true" />
</p:overlayPanel>

パネルの表示と隠れる際にエフェクトを指定することもできます。ここではslideにして、横からスライドしてくるような表示です。
また、tooltipも色々と属性があって、trackMouseをtrueにすると、マウスカーソルの移動にあわせてツールチップが付いてくるような動きになったりします。

マウスカーソルが画像の右上にあるとき
f:id:kikutaro777:20141223224604j:plain

左下
f:id:kikutaro777:20141223224638j:plain

DataTableのExpansion

Backlogではマウスオーバーすると展開されて情報が出てくるものもよくありますよね。
例えばプロジェクト情報の行にマウスオーバーすると
f:id:kikutaro777:20141223224756j:plain

メニューが
f:id:kikutaro777:20141223224802j:plain

PrimeFacesで、これと同じもの、、、は今回見つからなかったのですが、DataTableのExpansionで少し近いものができるのかなと。

これだとカラムでこんなのがついて
f:id:kikutaro777:20141223225004j:plain

クリックすると展開される形で、マウスオーバーよりアクションは多いですが(^^;
f:id:kikutaro777:20141223225044j:plain

faceletsは次のような形で、普通のdataTableに対して、rowTogglerとrowExpansionを付けてあげるだけでできます。

<p:dataTable var="prj" value="#{backlogBean.listProject}">
    <f:facet name="header">
        プロジェクト
    </f:facet>
    <p:column>
        <h:outputText value="#{prj}" />
    </p:column>
    <p:column width="16">
        <p:rowToggler />
    </p:column>
    <p:rowExpansion>
        <h:commandLink value="課題の検索" />
        <h:commandLink value=" | " />
        <h:commandLink value="課題の追加" />
    </p:rowExpansion>
</p:dataTable>

最初から全部展開させておきたい場合はdataTableにexpandRow属性というのがあるので、これをtrueにすればできたりします。

Rating

Backlogでは各投稿に「いいね」チックに星マークがつけられます。
人によって利用頻度が違いますが、いいですよね。
f:id:kikutaro777:20141223230311j:plain

PrimeFacesだとRatingコンポーネントが、そのままの機能です。
f:id:kikutaro777:20141223230416j:plain

faceletsではratingコンポを置いて、value属性でIntegerの変数(星の数を表す)とバインドするだけです。

<p:rating value="#{ticket.rating}" />

その他の属性で星の数を変えたり、色々な設定が可能です。

DataScroller

課題のフィードは、TwitterやFacebookみたいに、ある一定が表示されていて、どんどん追加表示していくことができます。
「もっと見る」にマウスオーバーすると次の何件かの課題が追加表示される形です。
f:id:kikutaro777:20141223225555j:plain

PrimeFacesだとDataScrollerを使うのが良さそうです。
f:id:kikutaro777:20141223225744j:plain

ボタンを押すと
f:id:kikutaro777:20141223225822j:plain

ボタンでない形式もできて、その場合はTwitterと同じようにフィードの最下端がブラウザの一番下にあたったときに自動的に読み込まれる形式です。
PrimeFacesのshowcaseがそうなってますね。
http://www.primefaces.org/showcase/ui/data/datascroller/basic.xhtml

そのせいで、このshowcaseページは下にあるサンプルコードが読めないっていうあれになってるんですが(^^;

faceletsは次のような感じです。DataTableとかと同じで、POJOなインスタンスを処理できるので、ここではTicketという課題を表すクラスのリストを渡して表示しています。

<p:dataScroller var="ticket" value="#{backlogBean.listTicket}"
                chunkSize="10">
    <f:facet name="loader">
        <p:commandButton type="button" value="View More" />
    </f:facet>
    <h:graphicImage value="/resources/images/makimaki.jpeg" width="32" />
    <h:commandLink value="#{ticket.id}" />
    <p:rating value="#{ticket.rating}" />
    <h:outputText value="#{ticket.content}" />
</p:dataScroller>

GridCSS

最後ですが、Backlogではブラウザの横幅サイズを変えるとレスポンシブにUIが変わります。

f:id:kikutaro777:20141223230955j:plain

横を縮めていくと
f:id:kikutaro777:20141223231008j:plain

PrimeFacesではGridCSSをつかって同じことができます。前に少し書きましたが、この仕組みです。

通常の画面を縮めていき
f:id:kikutaro777:20141223232152j:plain

こうなる
f:id:kikutaro777:20141223232213j:plain

ThemeSwitcher

最後に、これはBacklogと少し違いますが、PrimeFacesでは色々なテーマが用意されており、ThemeSwitcherコンポにて切り替えることができます。

今までのはRedmondというテーマだったのですが、

オレンジベースで少し明るめなui-lightnessや
f:id:kikutaro777:20141223232637j:plain

Flickrチックなもの
f:id:kikutaro777:20141223232702j:plain

カエル的な…
f:id:kikutaro777:20141223232724j:plain

jQuery UIのTheme使ったことある方はお馴染みかもしれませんが(^^;

まとめ

作ったサンプルコードはGitHubに置きました。
kikutaro/JsfBacklogSample · GitHub

今回の例では、自分で書いたCSS、JavaScriptはゼロです(^^;
これは全て、PrimeFacesのコンポーネントが内包しているためです。

それが良いわけでは全然ないのですが、私のように書けない人間がエンプラでモダンさを求められた場合、今こんな風にやっていますという所でした。

ちなみにPrimeFacesは相当な数のコンポーネントが揃っているのですが、まだまだ今でも追加していて驚きます(^^;

JSFはコンポーネントベースなので、どういうコンポがあるか抑えていれば、プロトタイピングもサクサクできるので、今は要件定義でも積極的に使うようにして、はやめに動きの認識合わせをお客さんとすることに利用しています。

JSFはJava EE 8でのJSF2.3に向けて、様々な拡張も継続しているようです。

日本OracleのJavaエバンジェリストである寺田さんから教えて頂いた情報↓

既にブログ書かれている方も(はやい!)

2015年はJavaScriptなどWeb系の勉強やウォッチに力を入れていきたいなと思う今日この頃です。

次期Java EE 7による開発へ向けて

ここ最近、何かと忙しくてブログが全然書けなかったのですが、少し時間ができてきたので、またコツコツ書いていきたいなぁと思います。

現状まだ色々と未確定ですが、次の案件ではJava EE 6ではなくてJava EE 7を利用したいと考えてます。

今回のPrjでは珍しく、上流のフェーズからプロトタイプを開発してます。プロトを利用して、細かい画面イメージや挙動などをすり合わせながら打合せをしているのですが…実はその環境がJava SE 8 + Java EE 7(^^;;;

実はあまりちゃんと上長とは環境の擦り合わせしてなかったのですが(^^;;;

さすがに本開発に向けて、ちゃんと考えていることを伝えないと…。
というわけで、その準備を進めています。こういうネゴは大事…。

今の所、次の一覧のように変えていく予定です。

今の環境 次期開発 備考
Java SE 7 8 まずは皆で要Java 8勉強
Java EE 6 7 GlassFish 4.1
IDE NetBeans 7.3/7.4 NetBeans 8.0.1
ビルド Maven 同左 Gradleは今回諦め…
テスト JUnit/Arqullian 同左
CI Jenkins 同左 -
ソース管理 Subversion Git
チケット Trac Backlog
静的解析 - FindBugs 検討中

Java SE 8やGitは、一緒に開発するチームメンバの皆と勉強しながらって感じですね。

GlassFish 4.1に伴ってJSFは2.2,JPAは2.1など上がります。

一番の垣根はJava SE 8かなぁと。
GlassFish 4.1にてJava SE 8が正式対応となりましたが、細かい所でちゃんと動くんだろうか…と不安も。

ラムダやStreamはサンプルレベルではわかるものの、実際にプロト開発にて自分で書いてみると、二重ループの処理とか…うーん、と思う場面も多々。
この辺はチームメンバ皆でコードレビューするぐらいの感じでやっていきたいなぁと。

一緒に開発する予定の女子メンバ2人はJava女子部のJava SE 8勉強会に参加予定!!
日本で唯一のJavaチャンピオン、櫻庭さんが直々に講師されるということもあって、きっとモチベーションも高まるはず!

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