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も自動生成されているのでそれを使う。NetBeansのJPAサポートはすべての項目単体で検索が出来るように最低限の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。