- PR -

SessionBean から EntityBean の内部参照

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2004/09/27
投稿数: 71
投稿日時: 2004-11-11 05:45
SessionBean から EntityBean の内部参照で、以下のようにCOMP_NAMEで記述したら、"ClassCastException"が投げられてしまいます。
CmpHome home = (CmpHome) PortableRemoteObject.narrow(ic.lookup("java:comp/env/ejb/Cmp"),CmpHome.class);

ところが、以下のようにJNDI_NAMEでやるとうまくいきます。
CmpHome home = (CmpHome) PortableRemoteObject.narrow(ic.lookup("Cmp"),CmpHome.class);

"java:comp/env/ejb/Cmp"で成功させるには何が欠けているのでしょうか?よろしくお願いします。
***参考資料(ejb-jar.xmlから抜粋)***
<session>
<ejb-name>StatelessTest</ejb-name>

・省略


<ejb-local-ref>

<ejb-ref-name>ejb/Cmp</ejb-ref-name>

<ejb-ref-type>Entity</ejb-ref-type>

<local-home>test.CmpHome</local-home>

<local>test.Cmp</local>

<ejb-link>Cmp</ejb-link>

</ejb-local-ref>
</session>

<entity>
<ejb-name>Cmp</ejb-name>

・省略

</entity>
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-11 10:17
コンテナには何を使っていますか?

また、キャストするオブジェクトを getClass().toString() したらどんな値がとれますか?
未記入
ベテラン
会議室デビュー日: 2004/09/27
投稿数: 71
投稿日時: 2004-11-11 12:14
早速のご返事有難うございます。
コンテナは、JBoss3.2.6 と JBoss4.0.01 の2種類で試しました。

>また、キャストするオブジェクトを getClass().toString() したらどんな値がとれますか?
ic.lookup("Cmp")は class $Proxy76 と出ましたが、ic.lookup("java:comp/env/ejb/Cmp") は出力される前に例外が発生してしまいます。


***printStackTrace()の内容***
12:32:02,958 INFO [STDOUT] java.lang.ClassCastException
12:32:02,963 INFO [STDOUT] at com.sun.corba.se.internal.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:293)
12:32:02,979 INFO [STDOUT] at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:134)
12:32:02,979 INFO [STDOUT] at test.StatelessTestBean.cmpCreate(StatelessTestBean.java:65)
12:32:02,983 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
12:32:02,984 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
12:32:02,984 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
12:32:02,985 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
12:32:02,987 INFO [STDOUT] at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
12:32:02,987 INFO [STDOUT] at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
12:32:02,988 INFO [STDOUT] at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
12:32:02,996 INFO [STDOUT] at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
12:32:02,997 INFO [STDOUT] at org.jboss.webservice.server.ServiceEndpointInterceptor.invoke(ServiceEndpointInterceptor.java:51)
12:32:02,997 INFO [STDOUT] at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
12:32:02,998 INFO [STDOUT] at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
12:32:02,999 INFO [STDOUT] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:316)
12:32:03,000 INFO [STDOUT] at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:149)
12:32:03,000 INFO [STDOUT] at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:128)
12:32:03,001 INFO [STDOUT] at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
12:32:03,003 INFO [STDOUT] at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
12:32:03,003 INFO [STDOUT] at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
12:32:03,004 INFO [STDOUT] at org.jboss.ejb.Container.invoke(Container.java:854)
12:32:03,005 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
12:32:03,005 INFO [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
12:32:03,006 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
12:32:03,018 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
12:32:03,019 INFO [STDOUT] at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
12:32:03,020 INFO [STDOUT] at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
12:32:03,020 INFO [STDOUT] at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
12:32:03,021 INFO [STDOUT] at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:242)
12:32:03,021 INFO [STDOUT] at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
12:32:03,022 INFO [STDOUT] at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:775)
12:32:03,027 INFO [STDOUT] at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:382)
12:32:03,028 INFO [STDOUT] at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source)
12:32:03,028 INFO [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
12:32:03,029 INFO [STDOUT] at java.lang.reflect.Method.invoke(Method.java:324)
12:32:03,030 INFO [STDOUT] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)
12:32:03,030 INFO [STDOUT] at sun.rmi.transport.Transport$1.run(Transport.java:148)
12:32:03,031 INFO [STDOUT] at java.security.AccessController.doPrivileged(Native Method)
12:32:03,044 INFO [STDOUT] at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
12:32:03,044 INFO [STDOUT] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
12:32:03,045 INFO [STDOUT] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
12:32:03,046 INFO [STDOUT] at java.lang.Thread.run(Thread.java:534)

[ メッセージ編集済み 編集者: 未記入 編集日時 2004-11-11 12:48 ]
orangeful
常連さん
会議室デビュー日: 2004/09/01
投稿数: 23
投稿日時: 2004-11-11 12:56
コード:
CmpHome home = (CmpHome) PortableRemoteObject.narrow(ic.lookup("java:comp/env/ejb/Cmp"),CmpHome.class);


icの内容を教えていただけませんか?
まったくの「new InitialContext();」なのか、それとも既に別のlookup()メソッドでどこかを指したContextオブジェクトだったりはしませんでしょうか?

#私自身がこれで2時間くらいハマったことがあるのは内緒です。

[ メッセージ編集済み 編集者: orangeful 編集日時 2004-11-11 12:57 ]
未記入
ベテラン
会議室デビュー日: 2004/09/27
投稿数: 71
投稿日時: 2004-11-11 13:11
InitialContext ic = new InitialContext(); です。

>#私自身がこれで2時間くらいハマったことがあるのは内緒です。
あ〜、私、3日間もはまってしまいました。
orangeful
常連さん
会議室デビュー日: 2004/09/01
投稿数: 23
投稿日時: 2004-11-11 13:44
引用:

あ〜、私、3日間もはまってしまいました。



いえいえ、今回のケースと私の凡ミスとはまた違うようですから。
スタックトレースを見ると、例外はPortableRemoteObject.narrowが入っているんですね。(よく嫁>自分)
未記入
ベテラン
会議室デビュー日: 2004/09/27
投稿数: 71
投稿日時: 2004-11-11 23:30
ic.lookup("java:comp/env/ejb/Cmp")が返えしてきたのがローカルインターフェースCmpLocalHomeだと分かりました。

設定を以下のようにしたらうまくいくのですが
CmpLocalHome home = (CmpLocalHome) PortableRemoteObject.narrow(ic.lookup("java:comp/env/ejb/Cmp"),CmpLocalHome.class);

リモートインタフェース使用にするにはまだ手がありません。なぜローカルインターフェースCmpLocalHomeが返されるのでしょうか?リモートインタフェースを使用するにはどうしたらよろしいのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-12 00:41
<ejb-local-ref> でしていしているからかな?
<ejb-ref> でリモートインターフェースを指定したらどうでしょう?
#Localが使える状態で積極的にRemoteを使う理由はないと思いますが

スキルアップ/キャリアアップ(JOB@IT)