J2EE/XDoclet
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
***コンテンツ一覧 [#g5c49561]
#ls2
***概要 [#gc5fed27]
//ここにコンテンツを記述します。
#contents
[[WTP>J2EE/Eclipseで開発する]]を使って開発をすると、JBoss...
**準備 [#j48c717b]
今回はJBossの環境を主においているので、JBossの設定ファイ...
ウィンドウ > 設定 >> J2EE注釈 >> XDoclet
でXDocletのホームディレクトリなどを入れておくだけです((XD...
JBossなどコンテナ依存の設定ファイルは、更に下の
XDoclet >> ejbdoclet
XDoclet >> webdoclet
などのチェックを入れておけばよいようです。
#ref(xdoclet.png)
**web.xmlの自動生成 [#ma3ff33e]
コンテナ上のEJBビジネスロジックを使用するServlet((EJBクラ...
/**
* Servlet implementation class for Servlet: HogeServlet
*
* @web.servlet name="HelloServlet" display-name="HelloS...
*
* @web.servlet-mapping url-pattern="/hello"
* @web.ejb-ref name = "ejb/HelloEJB" home = "hello.Hell...
* "hello.HelloEJB" type = "Session"
* @jboss.ejb-ref-jndi jndi-name = "HelloEJBHoge" ref-na...
*/
public class HelloServlet extends HttpServlet {
private HelloHome home = null;
public void init(ServletConfig config) throws ServletE...
Context context;
try {
context = new InitialContext();
} catch (NamingException e) {
throw new ServletException("JNDI InitialContextが...
}
try {
Object boundObject = context.lookup("java:comp/env...
home = (HelloHome) PortableRemoteObject.narrow(bou...
HelloHome.class);
} catch (NamingException e) {
throw new ServletException("Homeインタフェースが取...
}
super.init(config);
}
public void doGet(HttpServletRequest request, HttpServ...
throws ServletException, IOException {
String ejbMessage;
try {
Hello remote = home.create();
ejbMessage = remote.sayHello();
System.out.println("ejbMessage = " + ejbMessage);
} catch (Exception e) {
ejbMessage = e.toString();
}
request.setAttribute("ejbMessage", ejbMessage);
getServletContext().getRequestDispatcher("/HelloClie...
request, response);
}
}
***Servletの設定の出力 [#h1ba1bd8]
このうちクラスコメントの
@web.servlet name="HelloServlet" display-name="HelloServ...
@web.servlet-mapping url-pattern="/hello"
の部分で、
<servlet>
<servlet-name>HelloServlet</servlet-name> <- @web.ser...
<display-name>HelloServlet</display-name> <- display-...
<servlet-class>hello.web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern> <- @web.ser...
</servlet-mapping>
というweb.xmlが出力されます。
***ejb-refの出力 [#ie8d8902]
@web.ejb-ref name = "ejb/HelloEJB" home = "hello.HelloEJ...
remote = "hello.HelloEJB" type = "Session"
の部分で
<ejb-ref >
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name> <- @web.ejb...
<ejb-ref-type>Session</ejb-ref-type> <- type = "...
<home>hello.HelloEJBHome</home> <- home = "...
<remote>hello.HelloEJB</remote> <- remote =...
</ejb-ref>
というweb.xmlが出力されます。
**jboss-web.xmlの自動生成 [#f49a574f]
***ejb-refの出力 [#b857b90b]
また先の
@jboss.ejb-ref-jndi jndi-name = "HelloEJBHoge"
ref-name = "ejb/HelloEJB"
の部分で、
<ejb-ref>
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name> <- ref-nam...
<jndi-name>HelloEJBHoge</jndi-name> <- @jboss....
</ejb-ref>
というjboss-web.xmlが出力されます。
**ejb-jar.xmlの自動生成 [#e4eec02f]
EJBのビジネスロジックは以下のようにしました。
/*
* Enterprise Bean
*/
package hello.ejb;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
*
* @version $Revision: 1.3 $
* @ejb.bean name="HelloEJB" display-name = "HelloEJB" j...
* type = "Stateless" view-type = "remote"
* @ejb.interface remote-class="hello.ejb.Hello"
* @ejb.home remote-class="hello.ejb.HelloHome"
*/
public class HelloBean implements SessionBean {
/**
* @return
* @throws RemoteException
* @ejb.interface-method view-type= "remote"
*/
public String sayHello() throws RemoteException {
System.out.println("hoge");
return "Hello EJB !";
}
public void setSessionContext(SessionContext arg0) thr...
RemoteException {
}
public void ejbRemove() throws EJBException, RemoteExc...
}
public void ejbActivate() throws EJBException, RemoteE...
}
public void ejbPassivate() throws EJBException, Remote...
}
}
このうちクラスコメントの
@ejb.bean name="HelloEJB" display-name = "HelloEJB" jndi...
type = "Stateless" view-type = "remote"
@ejb.interface remote-class="hello.ejb.Hello"
@ejb.home remote-class="hello.ejb.HelloHome"
の部分で、
<session >
<description><![CDATA[]]></description>
<display-name>HelloEJB</display-name> <- display-na...
<ejb-name>HelloEJB</ejb-name> <- @ejb.bean ...
<home>hello.ejb.HelloHome</home> <- @ejb.home ...
<remote>hello.ejb.Hello</remote> <- @ejb.inter...
<ejb-class>hello.ejb.HelloEJBSession</ejb-class>
<session-type>Stateless</session-type> <- type = "St...
<transaction-type>Container</transaction-type>
</session>
というejb-jar.xmlが出力されます。
**jboss.xmlの自動生成 [#u20de1cd]
また
<session>
<ejb-name>HelloEJB</ejb-name> <- @ejb.bean name...
<jndi-name>HelloEJBHoge</jndi-name> <- jndi-name="Hel...
また、実際にコンテナにデプロイされる実際の(?)JNDI名
<method-attributes>
</method-attributes>
</session>
もあわせて出力されます。
***その他のインタフェースファイルの作成 [#r5edd00b]
上のXDocletの記述で
-sayHello()メソッドをインタフェースに持つ、Helloインター...
-ビジネスロジック((っつってもHello EJBってかえすだけ))を...
-HelloインタフェースをCreateするメソッドを持つ、HelloHome...
-ユーティリティクラス HelloEJBUtilクラス
のファイルも併せて自動生成されます。
***ビジネスロジックの生成 [#i9547fc5]
また、この場合のビジネスロジックのインタフェースであるhel...
public java.lang.String sayHello( )
throws java.rmi.RemoteException;
が定義されていますが、これは
/**
* @return
* @throws RemoteException
* @ejb.interface-method view-type= "remote"
*/
public String sayHello() throws RemoteException {
System.out.println("hoge");
return "Hello EJB !";
}
の
@ejb.interface-method view-type= "remote"
によって出力されます。
**これはいいなあ [#va6a7e60]
使ってみてわかるのが、EJBのめんどくさいいろいろなインタフ...
**ユーティリティクラスを使う [#id866ec0]
XDocletを使った場合、ユーティリティクラスHelloEJBUtilクラ...
Object boundObject = context.lookup("java:comp/env/ejb/H...
home = (HelloHome) PortableRemoteObject.narrow(boundObje...
とやっているところを、
home = HelloEJBUtil.getHome();
とすることができます。またPropertiesクラスを渡して、Initi...
Properties props = new Properties();
props.put(Context.PROVIDER_URL, "localhost:1099");
home = HelloEJBUtil.getHome(props);
**ファイルのマージ [#k90941ae]
Welcomeファイルの場所やcontext-paramなど、ココのファイル...
-[[マージポイントの説明:http://xdoclet.sourceforge.net/ol...
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
-わからないこと。他のライブラリのサーブレットなど、jarに...
-Annotationが書いてあるソースは構文エラーになっちゃう。 h...
-web.xmlに関しては、listeners.xml、web-settings.xmlなどに...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
***コンテンツ一覧 [#g5c49561]
#ls2
***概要 [#gc5fed27]
//ここにコンテンツを記述します。
#contents
[[WTP>J2EE/Eclipseで開発する]]を使って開発をすると、JBoss...
**準備 [#j48c717b]
今回はJBossの環境を主においているので、JBossの設定ファイ...
ウィンドウ > 設定 >> J2EE注釈 >> XDoclet
でXDocletのホームディレクトリなどを入れておくだけです((XD...
JBossなどコンテナ依存の設定ファイルは、更に下の
XDoclet >> ejbdoclet
XDoclet >> webdoclet
などのチェックを入れておけばよいようです。
#ref(xdoclet.png)
**web.xmlの自動生成 [#ma3ff33e]
コンテナ上のEJBビジネスロジックを使用するServlet((EJBクラ...
/**
* Servlet implementation class for Servlet: HogeServlet
*
* @web.servlet name="HelloServlet" display-name="HelloS...
*
* @web.servlet-mapping url-pattern="/hello"
* @web.ejb-ref name = "ejb/HelloEJB" home = "hello.Hell...
* "hello.HelloEJB" type = "Session"
* @jboss.ejb-ref-jndi jndi-name = "HelloEJBHoge" ref-na...
*/
public class HelloServlet extends HttpServlet {
private HelloHome home = null;
public void init(ServletConfig config) throws ServletE...
Context context;
try {
context = new InitialContext();
} catch (NamingException e) {
throw new ServletException("JNDI InitialContextが...
}
try {
Object boundObject = context.lookup("java:comp/env...
home = (HelloHome) PortableRemoteObject.narrow(bou...
HelloHome.class);
} catch (NamingException e) {
throw new ServletException("Homeインタフェースが取...
}
super.init(config);
}
public void doGet(HttpServletRequest request, HttpServ...
throws ServletException, IOException {
String ejbMessage;
try {
Hello remote = home.create();
ejbMessage = remote.sayHello();
System.out.println("ejbMessage = " + ejbMessage);
} catch (Exception e) {
ejbMessage = e.toString();
}
request.setAttribute("ejbMessage", ejbMessage);
getServletContext().getRequestDispatcher("/HelloClie...
request, response);
}
}
***Servletの設定の出力 [#h1ba1bd8]
このうちクラスコメントの
@web.servlet name="HelloServlet" display-name="HelloServ...
@web.servlet-mapping url-pattern="/hello"
の部分で、
<servlet>
<servlet-name>HelloServlet</servlet-name> <- @web.ser...
<display-name>HelloServlet</display-name> <- display-...
<servlet-class>hello.web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern> <- @web.ser...
</servlet-mapping>
というweb.xmlが出力されます。
***ejb-refの出力 [#ie8d8902]
@web.ejb-ref name = "ejb/HelloEJB" home = "hello.HelloEJ...
remote = "hello.HelloEJB" type = "Session"
の部分で
<ejb-ref >
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name> <- @web.ejb...
<ejb-ref-type>Session</ejb-ref-type> <- type = "...
<home>hello.HelloEJBHome</home> <- home = "...
<remote>hello.HelloEJB</remote> <- remote =...
</ejb-ref>
というweb.xmlが出力されます。
**jboss-web.xmlの自動生成 [#f49a574f]
***ejb-refの出力 [#b857b90b]
また先の
@jboss.ejb-ref-jndi jndi-name = "HelloEJBHoge"
ref-name = "ejb/HelloEJB"
の部分で、
<ejb-ref>
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name> <- ref-nam...
<jndi-name>HelloEJBHoge</jndi-name> <- @jboss....
</ejb-ref>
というjboss-web.xmlが出力されます。
**ejb-jar.xmlの自動生成 [#e4eec02f]
EJBのビジネスロジックは以下のようにしました。
/*
* Enterprise Bean
*/
package hello.ejb;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
*
* @version $Revision: 1.3 $
* @ejb.bean name="HelloEJB" display-name = "HelloEJB" j...
* type = "Stateless" view-type = "remote"
* @ejb.interface remote-class="hello.ejb.Hello"
* @ejb.home remote-class="hello.ejb.HelloHome"
*/
public class HelloBean implements SessionBean {
/**
* @return
* @throws RemoteException
* @ejb.interface-method view-type= "remote"
*/
public String sayHello() throws RemoteException {
System.out.println("hoge");
return "Hello EJB !";
}
public void setSessionContext(SessionContext arg0) thr...
RemoteException {
}
public void ejbRemove() throws EJBException, RemoteExc...
}
public void ejbActivate() throws EJBException, RemoteE...
}
public void ejbPassivate() throws EJBException, Remote...
}
}
このうちクラスコメントの
@ejb.bean name="HelloEJB" display-name = "HelloEJB" jndi...
type = "Stateless" view-type = "remote"
@ejb.interface remote-class="hello.ejb.Hello"
@ejb.home remote-class="hello.ejb.HelloHome"
の部分で、
<session >
<description><![CDATA[]]></description>
<display-name>HelloEJB</display-name> <- display-na...
<ejb-name>HelloEJB</ejb-name> <- @ejb.bean ...
<home>hello.ejb.HelloHome</home> <- @ejb.home ...
<remote>hello.ejb.Hello</remote> <- @ejb.inter...
<ejb-class>hello.ejb.HelloEJBSession</ejb-class>
<session-type>Stateless</session-type> <- type = "St...
<transaction-type>Container</transaction-type>
</session>
というejb-jar.xmlが出力されます。
**jboss.xmlの自動生成 [#u20de1cd]
また
<session>
<ejb-name>HelloEJB</ejb-name> <- @ejb.bean name...
<jndi-name>HelloEJBHoge</jndi-name> <- jndi-name="Hel...
また、実際にコンテナにデプロイされる実際の(?)JNDI名
<method-attributes>
</method-attributes>
</session>
もあわせて出力されます。
***その他のインタフェースファイルの作成 [#r5edd00b]
上のXDocletの記述で
-sayHello()メソッドをインタフェースに持つ、Helloインター...
-ビジネスロジック((っつってもHello EJBってかえすだけ))を...
-HelloインタフェースをCreateするメソッドを持つ、HelloHome...
-ユーティリティクラス HelloEJBUtilクラス
のファイルも併せて自動生成されます。
***ビジネスロジックの生成 [#i9547fc5]
また、この場合のビジネスロジックのインタフェースであるhel...
public java.lang.String sayHello( )
throws java.rmi.RemoteException;
が定義されていますが、これは
/**
* @return
* @throws RemoteException
* @ejb.interface-method view-type= "remote"
*/
public String sayHello() throws RemoteException {
System.out.println("hoge");
return "Hello EJB !";
}
の
@ejb.interface-method view-type= "remote"
によって出力されます。
**これはいいなあ [#va6a7e60]
使ってみてわかるのが、EJBのめんどくさいいろいろなインタフ...
**ユーティリティクラスを使う [#id866ec0]
XDocletを使った場合、ユーティリティクラスHelloEJBUtilクラ...
Object boundObject = context.lookup("java:comp/env/ejb/H...
home = (HelloHome) PortableRemoteObject.narrow(boundObje...
とやっているところを、
home = HelloEJBUtil.getHome();
とすることができます。またPropertiesクラスを渡して、Initi...
Properties props = new Properties();
props.put(Context.PROVIDER_URL, "localhost:1099");
home = HelloEJBUtil.getHome(props);
**ファイルのマージ [#k90941ae]
Welcomeファイルの場所やcontext-paramなど、ココのファイル...
-[[マージポイントの説明:http://xdoclet.sourceforge.net/ol...
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
-わからないこと。他のライブラリのサーブレットなど、jarに...
-Annotationが書いてあるソースは構文エラーになっちゃう。 h...
-web.xmlに関しては、listeners.xml、web-settings.xmlなどに...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: