NetBeans 6.5RC + Glassfish V3 で VisualWebJSF + EJB3.1 + JPA

この組み合わせだとなぜかGlassfish V3にデプロイが出来ない。仕方がないのでデプロイはGlassfish V3の管理ツールでwarを配備。特に手間ではないけど困り者。GlassfishV3が標準でついてくる割には連携がいまいちだなぁ。まさかこのまま正式版が出なければいいのだが。

今回はボタンをクリックしたらJavaDBサンプルテーブルのCustomerテーブルの一覧を表示するというシンプルなものを。


プロジェクトをVisualWebJSFで作成。

EJB3.1は標準で動かないのでGlassfishV3のアップデートで追加した「javax.ejb.jar」をプロジェクトのライブラリに追加する。

JavaDBのサンプルデータからエンティティクラスを自動で生成する。ここまでは2年前のNetBeansでもやっていたことで特に不思議ではない。いまどき全部手で作るやつもいないだろうし。


SessionBean1.javaに以下の文を追加する。

    private List<Customer> customerList;

    public List<Customer> getCustomerList() {
        return customerList;
    }

    public void setCustomerList(List<Customer> customerList) {
        this.customerList = customerList;
    }


続いてEJBの作成。EJBといってもアノテーションがついてるだけの普通のクラス。JTAとかAOPとかデータベースの設定とかそんなのは考えなくても良い。NamedQueryも自動生成されているのでそれを使う。NetBeansJPAサポートはすべての項目単体で検索が出来るように最低限のNamedQueryは自動生成することが出来るのだ(デフォで作成する)。

package visualwwebjsfxejb31.ejb31;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import visualwwebjsfxejb31.entity.Customer;

@Stateless
public class CustomerLogic {
    @PersistenceContext
    private EntityManager em;

    public List<Customer> getData(){
        return  em.createNamedQuery("Customer.findAll").getResultList();
    }
}


最後にPage1.javaに以下の文を追加。もちろん画面もぽとぺたで貼り付けてある。

    public String button1_action() {
        getSessionBean1().setCustomerList( logic.getData() );
        return null;
    }
    @EJB
    private CustomerLogic logic;


実行。ボタンをクリックすると以下のようになる。


画面はGUIで配置できるし、ビジネスロジックはただのアノテーションつけたクラスがEJB3.1になってトランザクションとかDIとかやってくれるし、あとは画面とのリンク用にプロパティを用意するだけ。テーブルだから今回はコレクションにつめただけ。

おそらくJavaのWebアプリでもっとも早くこの画面を作れる環境だと思う。

シンプルすぎる。もっともearとejb-jar、インターフェースを使う状態ならば現行のJavaEE5+NetBeans6.1でOK。