JBossでEJB3
JBossとJBossIDEをひさびさに使ったついでに、世間でうわさのEJB3というのをはじめて(今更)さわってみた。
インストール
ファイル配置
ステートレスセッションビーンを作ってみた。unpackデプロイで確認。
ejb3test.ear/ EAR myejb.ejb3/ EJB3 hoge/ Echo.class EJBのインターフェイス EchoBean.class EJBの実装 EchoClient.class EJBを呼び出すクラス hoge.war/ WEBアプリ hoge.jsp JSP META-INF/ application.xml
Echo.java
package hoge; import javax.ejb.Remote; @Remote public interface Echo { public String sayEcho(String message); }
EchoBean.java
package hoge; import javax.ejb.Stateless; public @Stateless class EchoBean implements Echo { public String sayEcho(String message){ System.out.println(message); return message; } }
EchoClient.java
package hoge; import javax.naming.InitialContext; public class EchoClient { public static String sayEcho(String message) { try { InitialContext ctx = new InitialContext(); Echo echo = (Echo)ctx.lookup(Echo.class.getName()); String result = echo.sayEcho(message); return result; } catch (Exception e) { e.printStackTrace(); return ""; } } public static void main(String[] args) throws Exception { String result = sayEcho("hello2"); System.out.println(result); } }
application.xml
<?xml version="1.0" encoding="UTF-8"?> <application version="1.4" 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/application_1_4.xsd"> <display-name>hoge ear</display-name> <module> <ejb>myejb.ejb3</ejb> </module> <module> <web> <web-uri>hoge.war</web-uri> <context-root>hoge</context-root> </web> </module> </application>
実行
- 一応動いた。JSPからの呼び出しは普通に動いた。
- EchoClientのmainからの実行は、jbossall-client.jarをクラスパスに追加して実行。動いたが、クライアント側では正常にメッセージが帰ってきたが、サーバ側で、java.net.SocketException: Connection resetとかエラーになる。call by valueだかなんだかの設定がいるのかも。よく知らない。
- もう満足(淡白)。チュートリアルにはエンティティビーンとか作る説明もあるです。
- あ、EclipseのJBossIDEのEJB3プロジェクトから作りました(といっても、これはクラスパス通してるだけだと思うが)。デプロイは、プロジェクトの場所を直接deploy以下においた。
- 安定して動くなら、XDocletのタグよりEJB3のアノテーションを使った方がすっきりしそう。標準だし。