J2EE/EJB
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
***コンテンツ一覧 [#we76f7eb]
#ls2
J2EEコンテナであるJBossを使ってEJBの勉強をしてみました。...
***EJBの使い方 [#l6778de5]
例えば、sayHello()メソッドでStringを返却するEJBを作る場合...
-sayHello()メソッドをインタフェースに持つ、Helloインター...
-実際にビジネスロジック((っつってもHello EJBってかえすだ...
-HelloインタフェースをCreateするメソッドを持つ、HelloHome...
これとさまざまなDD(Deployment Descriptor)ファイルを作成し...
-JNDI経由で、Homeインタフェースの取得
-Homeインタフェースから、実際のビジネスロジックをcreate
-createしたビジネスロジックを実行
という手順となります。
このようにすることによって、ビジネスロジックがどこで実行...
***まずはJNDI名と、EJBたちの関係 [#u1713768]
さて、先ほどJNDI経由でHomeインタフェースを取得すると言い...
先の例で行くと、
initContext = new InitialContext();
Object ref = initContext.lookup("HelloEJBHoge");
HelloHome home = (HelloHome) PortableRemoteObject.narrow...
とルックアップするのですが、この"HelloEJBHoge"がキー値で...
話を整理すると、
-コンテナには、HelloEJBHogeというキーで、hello.HelloHome...
-InitialContextをそのキー値でlookupすることで、hello.Hell...
ということです。そこで''そもそもコンテナにオブジェクトを...
***考察 [#p0b2925c]
さて先の疑問を解決したいと思います。まだTry and Errorです...
まず、hello.HelloHomeに名前を付けます。これはJ2EEの仕様内...
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD...
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<home>hello.HelloHome</home> <-ココ
<remote>hello.Hello</remote>
<ejb-class>hello.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
これで、hello.HelloHomeにはHelloEJBという''EJB名''が付け...
さらに、このEJB名"HelloEJB"とコンテナ側に登録されている"H...
<?xml version="1.0"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<jndi-name>HelloEJBHoge</jndi-name>
</session>
</enterprise-beans>
</jboss>
これでHelloEJBHogeというキーとhello.HelloHomeが関連づけら...
ようやくこれで、HelloEJBHogeでlookupすればhello.HelloHome...
public static void main(String[] args) throws NamingExce...
RemoteException, CreateException {
InitialContext initContext = null;
try {
initContext = new InitialContext();
Object ref = initContext.lookup("HelloEJBHoge");
HelloHome home = (HelloHome) PortableRemoteObject.na...
HelloHome.class);
Hello hello = home.create();
System.out.println(hello.sayHello());
} finally {
if (initContext != null) {
initContext.close();
}
}
}
これで確かに稼動しました!。ちなみにEclipseから実行したと...
javax.naming.NoInitialContextException: Cannot instantia...
org.jnp.interfaces.NamingContextFactory [Root exception ...
java.lang.ClassNotFoundException: org.jnp.interfaces.Nam...
at javax.naming.spi.NamingManager.getInitialContext(Unk...
at javax.naming.InitialContext.getDefaultInitCtx(Unknow...
at javax.naming.InitialContext.init(Unknown Source)
なんてエラーが表示されしまうかも。。。
***クライアントからではなく、サーブレットなどからアクセス...
さて、いわゆるローカルな(?)Lookupはこれで良さそうですが...
context.lookup("java:comp/env/ejb/HelloEJB");
てやる例のヤツです。
さて、
context.lookup("java:comp/env/ejb/HelloEJB");
と指定すると、web.xml内のejb-refを ejb/HelloEJB で検索し...
<ejb-ref>
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>hello.HelloHome</home>
<remote>hello.Hello</remote>
<ejb-link>HelloEJB</ejb-link>
</ejb-ref>
これで、ejb-linkのところでjboss.xmlのejb-nameを見に行って...
EJBException in method: public abstract hello.Hello hell...
throws java.rmi.RemoteException,javax.ejb.CreateException:
javax.ejb.EJBException: Invalid invocation, check your d...
method=public abstract hello.Hello hello.HelloHome.creat...
java.rmi.RemoteException,javax.ejb.CreateException
でも、わざと
<ejb-link>HelloEJB</ejb-link>
をjboss.xmlにないHelloEJBaとかすると
javax.naming.NamingException: ejb-ref: ejb/HelloEJB, no ...
and no jndi-name in jboss-web.xml)
なんていわれるから、DDたちはあってるような気がする。。。
また、ENCを使わないでクライアントでやったように直接
Object boundObject = context.lookup("HelloEJBHoge");
とやっても、ENCでやったときと同じエラーが出ちゃいます。
:2005/11/22追記|どうも、EARファイルへのパッケージングのや...
***jboss-web.xmlを使う [#a0eab205]
JBossでは先に書いた <ejb-link>HelloEJB</ejb-link> とjboss...
<ejb-ref>
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name>
<jndi-name>HelloEJBHoge</jndi-name>
</ejb-ref>
と書くだけのようです。こっちの方が、きれいですね。ちなみ...
:2005/11/22追記|「JBossでは」というよりも、同じEARに入れ...
***関連リンク [#n768272e]
-[[Webコンテナ設定:http://neverbird.sourceforge.jp/manual...
----
この記事は
#vote(おもしろかった[9],そうでもない[7])
-作ったearファイルをRational Application Developerで動か...
-JBossの掲示板 http://www.jbossgroup.com/index.html?modul...
-急がばまわれで、チュートリアルをダウンロードしてきて、一...
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
***コンテンツ一覧 [#we76f7eb]
#ls2
J2EEコンテナであるJBossを使ってEJBの勉強をしてみました。...
***EJBの使い方 [#l6778de5]
例えば、sayHello()メソッドでStringを返却するEJBを作る場合...
-sayHello()メソッドをインタフェースに持つ、Helloインター...
-実際にビジネスロジック((っつってもHello EJBってかえすだ...
-HelloインタフェースをCreateするメソッドを持つ、HelloHome...
これとさまざまなDD(Deployment Descriptor)ファイルを作成し...
-JNDI経由で、Homeインタフェースの取得
-Homeインタフェースから、実際のビジネスロジックをcreate
-createしたビジネスロジックを実行
という手順となります。
このようにすることによって、ビジネスロジックがどこで実行...
***まずはJNDI名と、EJBたちの関係 [#u1713768]
さて、先ほどJNDI経由でHomeインタフェースを取得すると言い...
先の例で行くと、
initContext = new InitialContext();
Object ref = initContext.lookup("HelloEJBHoge");
HelloHome home = (HelloHome) PortableRemoteObject.narrow...
とルックアップするのですが、この"HelloEJBHoge"がキー値で...
話を整理すると、
-コンテナには、HelloEJBHogeというキーで、hello.HelloHome...
-InitialContextをそのキー値でlookupすることで、hello.Hell...
ということです。そこで''そもそもコンテナにオブジェクトを...
***考察 [#p0b2925c]
さて先の疑問を解決したいと思います。まだTry and Errorです...
まず、hello.HelloHomeに名前を付けます。これはJ2EEの仕様内...
<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD...
'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<home>hello.HelloHome</home> <-ココ
<remote>hello.Hello</remote>
<ejb-class>hello.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
これで、hello.HelloHomeにはHelloEJBという''EJB名''が付け...
さらに、このEJB名"HelloEJB"とコンテナ側に登録されている"H...
<?xml version="1.0"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<jndi-name>HelloEJBHoge</jndi-name>
</session>
</enterprise-beans>
</jboss>
これでHelloEJBHogeというキーとhello.HelloHomeが関連づけら...
ようやくこれで、HelloEJBHogeでlookupすればhello.HelloHome...
public static void main(String[] args) throws NamingExce...
RemoteException, CreateException {
InitialContext initContext = null;
try {
initContext = new InitialContext();
Object ref = initContext.lookup("HelloEJBHoge");
HelloHome home = (HelloHome) PortableRemoteObject.na...
HelloHome.class);
Hello hello = home.create();
System.out.println(hello.sayHello());
} finally {
if (initContext != null) {
initContext.close();
}
}
}
これで確かに稼動しました!。ちなみにEclipseから実行したと...
javax.naming.NoInitialContextException: Cannot instantia...
org.jnp.interfaces.NamingContextFactory [Root exception ...
java.lang.ClassNotFoundException: org.jnp.interfaces.Nam...
at javax.naming.spi.NamingManager.getInitialContext(Unk...
at javax.naming.InitialContext.getDefaultInitCtx(Unknow...
at javax.naming.InitialContext.init(Unknown Source)
なんてエラーが表示されしまうかも。。。
***クライアントからではなく、サーブレットなどからアクセス...
さて、いわゆるローカルな(?)Lookupはこれで良さそうですが...
context.lookup("java:comp/env/ejb/HelloEJB");
てやる例のヤツです。
さて、
context.lookup("java:comp/env/ejb/HelloEJB");
と指定すると、web.xml内のejb-refを ejb/HelloEJB で検索し...
<ejb-ref>
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>hello.HelloHome</home>
<remote>hello.Hello</remote>
<ejb-link>HelloEJB</ejb-link>
</ejb-ref>
これで、ejb-linkのところでjboss.xmlのejb-nameを見に行って...
EJBException in method: public abstract hello.Hello hell...
throws java.rmi.RemoteException,javax.ejb.CreateException:
javax.ejb.EJBException: Invalid invocation, check your d...
method=public abstract hello.Hello hello.HelloHome.creat...
java.rmi.RemoteException,javax.ejb.CreateException
でも、わざと
<ejb-link>HelloEJB</ejb-link>
をjboss.xmlにないHelloEJBaとかすると
javax.naming.NamingException: ejb-ref: ejb/HelloEJB, no ...
and no jndi-name in jboss-web.xml)
なんていわれるから、DDたちはあってるような気がする。。。
また、ENCを使わないでクライアントでやったように直接
Object boundObject = context.lookup("HelloEJBHoge");
とやっても、ENCでやったときと同じエラーが出ちゃいます。
:2005/11/22追記|どうも、EARファイルへのパッケージングのや...
***jboss-web.xmlを使う [#a0eab205]
JBossでは先に書いた <ejb-link>HelloEJB</ejb-link> とjboss...
<ejb-ref>
<ejb-ref-name>ejb/HelloEJB</ejb-ref-name>
<jndi-name>HelloEJBHoge</jndi-name>
</ejb-ref>
と書くだけのようです。こっちの方が、きれいですね。ちなみ...
:2005/11/22追記|「JBossでは」というよりも、同じEARに入れ...
***関連リンク [#n768272e]
-[[Webコンテナ設定:http://neverbird.sourceforge.jp/manual...
----
この記事は
#vote(おもしろかった[9],そうでもない[7])
-作ったearファイルをRational Application Developerで動か...
-JBossの掲示板 http://www.jbossgroup.com/index.html?modul...
-急がばまわれで、チュートリアルをダウンロードしてきて、一...
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: