Challenge Java EE !

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

JSFで1レコード複数行のテーブル表示

JSF

PrimeFacesとか使うとそれっぽいコンポもあるのですが、シンプルにやるなら以下とかどうでしょうか(^^;

<h:dataTable id="todoTbl" var="todo" value="#{todoBean.todoList}"  border="1">
    <h:column>
        <h:outputText value="#{todo.id}" />
    </h:column>
    <h:column>
        <h:panelGrid columns="1">
            <h:outputText value="#{todo.todo}" />
            <h:outputText value="#{todo.duedate}" />
        </h:panelGrid>
    </h:column>
</h:dataTable>

Columnの中をpanelGridで分割してるだけです。

以下のデータベースのデータを

f:id:kikutaro777:20140719092309j:plain

表示すると

f:id:kikutaro777:20140719092332j:plain

JCPの中の方のお話を聞いてきました #jjug

今日のJJUGナイトセミナーはいつもと少し違う感じのテーマで「世界とつながるJCP」というものでした。

http://www.java-users.jp/?p=1236

前半は、USのOracleに勤められていて、JCPのPMO(Program Management Office)に所属されている浜本さんから、JCPとは何か?どんなことをしているか?といったお話がありました。

中の人から直接お話を聞けるってすごい貴重な機会な気が(^^;;

後半は日本オラクルの寺田さんからAdopt a JSRに関する紹介でした。

JCPとJSR

JCPやJSRという言葉は、Javaを学び始めた2年前の自分にとっては暗号のようなものでした…(^^;勉強会とかでも

「JSR-XXXにおいて~」

とか

「JCPでEarly Draftが出てて~」

とか

Javaのあらゆる仕様はJCP(Java Community Process)という国際的な標準化プロセスを経て、様々な企業や世界中のコミュニティ、そして個人が関わって決められていくもので、個々の仕様はJSRs(Java Specification Requests)呼ばれ、番号がつく、と理解したのは結構後でした(^^;;

JCPの中

JCPはオープンであることをとても意識しているとのことで、実際、あらゆる情報が公開されていて、会議の議事録などもみれるそうです(^^;へー

https://www.jcp.org/en/home/index

浜本さんから説明のあったスライドの図がわかりやすかったのですが(公開…はされないかな(^^;;)JCPはトップに議長がいて、Executive Committee (EC)、Program Management Office(PMO)があって、そしてスペックリード、エキスパートグループ、それに参加するメンバ、といった構造になっているとのこと。

スペックリードやエキスパートグループはよく聞くので、大体イメージ通りでしたが、全体像は初めて知りました(^^;

当たり前ですが、Executive Committeeは早々たるメンツなんですね。
Red HatやIBM、Intel…Goldman Sachsなんかも。スライドで紹介されていたのですが、以下ページでも確認できます。

https://jcp.org/en/participation/committee

日本では富士通さんのみですが、かつてはNTT Docomoさんなどもいたとか。

個人的にはCloudBeesさんが入ってて面白いなーと。

あとJUG(Java User Group)も入っていてブラジルのSouJava、イギリスのLondon Java Community、モロッコのMoroccoJUGの3つが入ってます。

ちなみにJCP自体のプロセスもJSRを利用したサイクルで改善・改良を行っているとのことで、JCP.nextと呼ばれる4つのJSRがあるそうです。(JCP.next.1 (JSR 348)、JCP.next.2 (JSR 355)、JCP.next.3 (JSR 358)、JCP.next.4 (JSR 364))

こういう運営、自己組織化っぽい感じで面白いなぁと(^^)

こんな風にJavaでは、言語仕様などを1つのベンダで決めてしまうのではなく、あらゆる意見を取り入れて皆の合意を得て進んでいっているとのことで、面白いですね。
(逆にいえば、ステークホルダが多いというか、どうしても進みが遅くなる面もあるので、Javaは遅れてるとか揶揄されてしまうのかなぁ、とも思いますが)

JCPへメンバーとして参加するには、JSPA(Java Specification Participation Agreement)への署名・提出が必要で、JJUGを経由したり、組織あるいは個人で参加もできるとのこと(JCPでアカウントを作るだけだとレジスタードユーザというもので、JCPメンバーではないそうです)

Adopt a JSR

今の時代は、自らが参加する時代(Participation Age)とのことで、誰もが草の根運動的に参加できるAdopt a JSRについて日本オラクルの寺田さんからお話がありました。

以下のWikiページ、寺田さん自らが翻訳されたそうです。
https://java.net/projects/jjug/pages/Adopt-a-JSR-JP
https://java.net/projects/jjug/pages/WhatToWorkOnForAJSRJP

プレゼンの最後にアンケート用紙のようなものを配られ、参加者が自らの手で書き込む簡単なワークショップが行われました。
特に回収とかはなく、是非参加者自身の方々が自ら考える機会を、とのことで準備されたそうです。熱い。

時間の都合上、アンケートの1ページ目だけを手で書いたのですが

・今日のセミナーに参加した理由をご記入ください

・皆様にとってJavaコミュニティに対して参加・貢献するモチベーションは何ですか?

といったものが質問として書いてありました。

改めて考えてみると結構難しいんですよね(^^;汗

私の場合

・今日のセミナーに参加した理由をご記入ください

JCPやJSRはよく耳にするが、もう少し具体的にどのようなものなのか?中の人が発表されるとのことで参加しました。

・皆様にとってJavaコミュニティに対して参加・貢献するモチベーションは何ですか?

参加の1番のモチベーションは最新技術情報の入手と世間一般では皆何を利用しているのか?どう工夫してるのか?を知るためです。
またJJUGはとてもレベルの高い人たちが集まりつつも、初心者にも温かい雰囲気で、参加するだけでも楽しいです。

と書きました。

「貢献」という部分に関しては難しいですね(^^;まだまだ自分自身が勉強の足りない身という思いが強いので、貢献するには程遠い気がします。

ブログも半分メモ書きみたいなものなので。

ただブログ書いてて個人的に大事にしているのは

「Javaってやってみると意外と面白いですよ(^^;」

という点ですかね。。。正直最初は仕事で言われたから嫌々やるという感じだったのですが、色々やってみるとJavaFXで自分が好きな堀北さんと遊んで楽しかったり、Twitter4jで堀北さんを題材に遊んで楽しかったり、それらがLinuxでもMacでも同じように遊べたり、Raspberry Piなんかでも遊べるし。

#あれ、Java EEでてこない…(^^;

自分のブログで書いたネタを参考にして、少しでも同じように楽しめた方がいたならば、少しは何か貢献できてるのかもしれないですが(^^;

Java EEのDIを可視化するVisual EE

CDI

Mavenでビルドするだけで以下動画のようなCDIを可視化するHTMLを出力してくれます。

少し前にAdam Bienさんのブログにて

VISUALIZE YOUR JAVA EE 7 DEPENDENCY INJECTION AND RELATIONS

と紹介されていたものです。Visual EEは以下に。

Visual EE

使い方は簡単で、mavenのpom.xmlに

<plugins>
    <plugin>
        <groupId>de.struller-baumann</groupId>
        <artifactId>visualee</artifactId>
        <version>0.26</version>
        <configuration>
            <outputdirectory>visualee</outputdirectory>
        </configuration>
        <executions>
            <execution>
                 <phase>process-resources</phase>
                 <goals>
                     <goal>visualize</goal>
                 </goals>
            </execution>
         </executions>
    </plugin>
</plugins>

と設定するだけ(^^;コードにCDIを利用したものが入っていればビルドした結果、srcと同列階層にvisualeeというフォルダができます。

コードは@Injectがあるだけでも先ほどのような表示がされます。

@Named
@ViewScoped
public class CdiBean {

    @Inject
    private SimpleDependent dep;
}
@Dependent
public class SimpleDependent {
    
}

f:id:kikutaro777:20140707193532j:plain

@Producesもちゃんと描いてくれます。

@Dependent
public class SimpleProducer {
    @Produces
    @SimpleListQualifier
    public List<String> getSimpleStrList(){
        return new ArrayList<>();
    }
}

f:id:kikutaro777:20140707193209j:plain

残念ながら@Alternativeを利用した場合の実体インスタンスのInjectまでは描いてくれませんでした(^^;
インタフェースがInjectされた絵となってます。

f:id:kikutaro777:20140707193848j:plain

SimpleImplDependentOneとSimpleImplDependentTwoが@Alternativeついた実装クラスですがプカプカ浮いてます。このツールが出力するhtml(というかグラフ描いてるjs)のほうが興味深いですね

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