More Related Content
Similar to Glassfish勉強会(JavaEE6について)
Similar to Glassfish勉強会(JavaEE6について) (20)
Glassfish勉強会(JavaEE6について)
- 2. 自己紹介 名前 浅井 良 現職 株式会社オージス総研 アドバンストモデリングソリューション部アーキテクトチーム所属 去年から達人プログラマーを目指してのブログを書いています。 http://d.hatena.ne.jp/ryoasai/ TwitterIDryoasai74 Googleアカウント ryoasai74
- 13. ③EJB実装クラスを定義する 実装するのはHelloではない! public class HelloBean implements SessionBean { private SessionContext context; public void setSessionContext( SessionContextaContext) { context = aContext; } public void ejbActivate() {} public void ejbPassivate() {} public void ejbRemove() {} public void ejbCreate() {} public String sayHello(String name) { return “こんにちは " + name; } } 業務的に意味のあるのは この部分だけ
- 14. ④XMLデプロイメント記述子を作成する <?xml version="1.0" encoding="UTF-8"?> <ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"> <display-name>EJB2App-ejb</display-name> <enterprise-beans> <session> <display-name>HelloBeanSB</display-name> <ejb-name>HelloBean</ejb-name> <home>hello.ejb.HelloHome</home> <remote>hello.ejb.Hello</remote> <ejb-class>hello.ejb.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> … </ejb-jar>
- 15. 呼び出し側も大変だった ①JNDIからホームオブジェクトをルックアップ public static HelloHomelookupHelloHome() { Context context = null; try { context = new InitialContext(); return (HelloHome) PortableRemoteObject.narrow( context.lookup("java:global/EJB2App/EJB2App-ejb/HelloBean!hello.ejb.HelloHome"), HelloHome.class); } catch (NamingException ex) { throw new RuntimeException(ex); } finally { if (context != null) { try { context.close(); } catch (NamingException ex) { throw new RuntimeException(ex); } } } }
- 16. ②ホームオブジェクトから EJBオブジェクトを作成して呼び出す Hello hello = null; try { hello = helloHome.create(); return hello.sayHello(name); } catch (CreateException ex) { throw new RuntimeException(ex); } catch (RemoteException ex) { throw new RuntimeException(ex); } finally { if (hello != null) { try { hello.remove(); } catch (RemoteException ex) { throw new RuntimeException(ex); } catch (RemoveException ex) { throw new RuntimeException(ex); } } } 業務的に意味のあるのは この行だけ
- 23. ③インジェクションして普通に呼び出す @EJB private Hello hello; public void someMethod() { ... String message = hello.sayHello("Test"); ... } アノテーションを使ってインジェクションする。 普通にメソッドを呼び出す。
- 35. 主要Webフレームワークの位置づけ S2Struts Struts1 設定簡易化 アクション ベース Struts2 SAStruts 会話状態サポート Spring MVC Spring WebFlow Web MVC FW Spring Faces JSF 会話状態サポート コンポーネント ベース Seam Tapestry 設定簡易化 Teeda Wicket Click
- 41. 画面テンプレートの定義例 <html …> <head> … <ui:insert name="head"/> </head> <body> … <div class="body"> <ui:insert name="body"/> </div> </body> </html> template.xhtml
- 42. 個別画面の定義例 hello.xhtml <html …> <ui:composition template="/layout/template.xhtml"> <ui:define name="body"> <h1>こんにちは世界!</h1> </ui:define> </ui:composition> </html>
- 44. コンポジットコンポーネントの定義例 link.xhtml <html …> <composite:interface> <composite:attribute name="value“ /> <composite:attribute name="outcome"/> </composite:interface> <composite:implementation> <h:link outcome="#{cc.attrs.outcome}" value="#{cc.attrs.value}"> <f:param name="cid“ value="#{javax.enterprise.context.conversation.id}"/> </h:link> </composite:implementation> </html> パラメーターを宣言 部品の中身を定義
- 46. JSF1.2までの画面遷移定義 JSF1.2まではすべての画面遷移ルールをxmlで定義する必要があった <navigation-rule> <description> sprint navigation rules </description> <from-view-id>/sprint/show.xhtml</from-view-id> <navigation-case> <from-outcome>showStories</from-outcome> <to-view-id>/story/show.xhtml</to-view-id> </navigation-case> <navigation-case> <from-outcome>showDashboard</from-outcome> <to-view-id>/dashboard/show.xhtml</to-view-id> </navigation-case> </navigation-rule> faces-config.xml
- 48. BeanValidation(JSR303) public class Task extends AbstractEntity implements Serializable{ … @NotNull @Size(min=0, max=128) private String name; アノテーションを付けるだけで単項目のバリデーションが行われる。
- 49. Ajax機能を簡単に利用 <h:panelGroup> <h:inputText id=“endDate” value=“#{currentProject.endDate}”> <f:convertDateTime pattern=“yyyy/MM/dd" /> <f:ajax event="blur" render="endDateError" /> </h:inputText> </h:panelGroup> <h:message id="endDateError" for="endDate" styleClass="errorMessage" /> このように書くとblur、 つまり、フォーカスが外れた段階でAjaxリクエストが送信され、結果がエラーメッセージに反映される。
- 58. Story Task ID=null ID=null Task 永続コンテキスト ID=null Story Project ID=3 ID=101 Task Sprint ID=9 Story ID=11 ID=10 Project ID=101 DB 永続コンテキスト中のエンティティの状態はDBと自動的に同期される。
- 63. CDIのBeanの例 Beanの有効 なスコープを定義 JSFのビューから 参照する名前を定義 一定の条件を満たせば自動的にCDIのBean @Named @ConversationScoped public class SprintAction implements Serializable { @Inject ScrumManagerscrumManager; @Inject SprintRepositorysprintRepository; … } 任意のBeanは@Injectで注入