読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

ガッツリ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な方々には参考になるのではないでしょうか。英語で細かいニュアンスいまいちわからない所もありますが、めっちゃ面白かったです。

JSFのURLをきれいにするPrettyFaces

GW中、久しぶりにCore JavaServer Facesの本を改めて読み返していたのですが、RESTful Navigation and Bookmarkable URLsの章で「pretty URLs」という表現があることに気づきました。

かわいいurlって何?と思ったのですが、Alcで調べると、prettyには「きれいにする」という意味があるようです。eow.alc.co.jp

本の文脈的にもこれっぽい。。。で、本の中には

Currently, JSF does not have a standard mechanism for producing or consuming "pretty URLs", but since JSF 2.0, there is support for GET requests.

と記述があって、Bookmarkableな仕組みの話につないでいました。

で、そういえばPrettyFacesというライブラリがあったなぁと。

PrettyFaces

前にPrettyFacesを知ったときは、PrimeFacesやIceFacesのようなリッチコンポ―ネントの1つなのかなー?ぐらいの感じでスルーしてました(^^;; が、上記の意味を知って、改めてみてみたらJSFにおけるURLを色々と使いやすくするものでした。

f:id:kikutaro777:20150507223224j:plain

サイトTopページに

PrettyFaces is an OpenSource URL-rewriting library with enhanced support for JavaServer Faces – JSF 1.1, 1.2 and 2.0 – enabling creation of bookmark-able, pretty URLs. PrettyFaces solves the “RESTful URL” problem elegantly, including features such as: page-load actions, seamless integration with faces navigation, dynamic view-id assignment, managed parameter parsing, and configuration-free compatibility with other web frameworks.

とあります。JSFで"RESTful URL"…!?

気になったので、ちょっと触ってみました。

mavenのpom.xmlで以下追加しました。

<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-servlet</artifactId>
    <version>3.0.0.Alpha6</version>
</dependency>
<dependency>
    <groupId>org.ocpsoft.rewrite</groupId>
    <artifactId>rewrite-config-prettyfaces</artifactId>
    <version>3.0.0.Alpha6</version>
</dependency>

WEB-INF配下に「pretty-config.xml」というxmlを追加します。

f:id:kikutaro777:20150507223528j:plain

今回はxmlを利用しましたが、アノテーションベースでも書けるようです(試してないです)

URLのマッピング

JSFでベタにWebアプリを作成すると、以下のようなURLになります(facesはservlet-mappingで変更可能+ここの例ではxhtmlを利用を前提としてます)

http://localhost:8080/PrettyFaces/faces/login.xhtml

PrettyFacesでは、これを

http://localhost:8080/PrettyFaces/login

と以下定義によってマッピングできます。

pretty-config.xmlの定義

<url-mapping id="login">
    <pattern value="/login" />
    <view-id value="/faces/login.xhtml" />
</url-mapping>

Path Parameters

PrettyFacesのDocumentationでは「3.2. Add Path-parameters to your mapped URL (REST)」のタイトルにあるようにRESTとして紹介しています。

http://localhost:8080/PrettyFaces/faces/product/order.xhtml

http://localhost:8080/PrettyFaces/product/ここにパラメータ

のようにマッピング。JSFのViewParamで取れるとのことで

<h:body>
    <h:form>
        <f:metadata>
            <f:viewParam name="id" value="#{orderBean.id}" />
        </f:metadata>

        <h:outputText value="#{orderBean.id}" />
    </h:form>
</h:body>

のように記述。

f:id:kikutaro777:20150507230638j:plain

サンプルそのまま書いてしまった(^^;けど動きました。ためしに「book」というパラメータにすると

f:id:kikutaro777:20150507230734j:plain

pretty-config.xmlは以下です。

<url-mapping id="order">
    <pattern value="/product/#{id}" />
    <view-id value="/faces/product/order.xhtml" />
</url-mapping>

なお、直接EL式でバインドも可能なようで、次のような設定でも動きました。

<url-mapping id="user">
   <pattern value="/#{userBean.user}" />
   <view-id value="/faces/user/user.xhtml" />
</url-mapping>

他にも色々と機能あるようなので、もう少しみてみようかなぁ。

JSFではServletやJAX-RSを比べて、URLを意識した設計をすることはあまりないと思いますが、その辺を結び付けたいときには使えるのかも。相性が良いかは置いておいて。

また、今回はお試しレベルにすぎず、実戦投入してるわけではないので、ご注意を(^^;

Windows Server 2012 R2でGlassFish 4.1のサービス登録に失敗した

Windows Server 2012 R2にGlassFish 4.1をサービス登録しようとして

asadmin create-service

と管理者権限で行ったのですが、以下エラーになりました(domain1の指定有無でも同じ)。

f:id:kikutaro777:20150427180344j:plain

Error while trying to install GlassFish as a Windows Service.
The return value was: -2146232576.
STDERR:
STDOUT:
Command create-service failed.

前にWindows Server 2008 R2とGlassFish 3.1.2.2ではなかった気が…と思いながらぐぐってみたら以下.NETがいるよ、的な情報が。ただ、以下はGlassFish 3.1の話なのと、入れようとした環境では.NET Framework 4.5はインストール済みなのだけど。。。

[GLASSFISH-14057] .Net is a prerequisite for create-service - Java.net JIRA

と、試しに.NET 3.5を入れました。

f:id:kikutaro777:20150427181010j:plain

で、再度コマンド入力したら、サービス登録成功しました。

f:id:kikutaro777:20150427181059j:plain

上記終わってからたどり着いたのですが、日本語の情報もありました。

sakaisusie.hatenablog.com

上記サイトでは「WindowsXPなら.NET Framework 3.5」もインストールしておく。」とありますが、サーバOSでも入ってなければ必要っぽいですね。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村
QLOOKアクセス解析