- - PR -
SessionBean から EntityBean の内部参照
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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> | ||||
|
投稿日時: 2004-11-11 10:17
コンテナには何を使っていますか?
また、キャストするオブジェクトを getClass().toString() したらどんな値がとれますか? | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2004-11-11 12:56
icの内容を教えていただけませんか? まったくの「new InitialContext();」なのか、それとも既に別のlookup()メソッドでどこかを指したContextオブジェクトだったりはしませんでしょうか? #私自身がこれで2時間くらいハマったことがあるのは内緒です。 [ メッセージ編集済み 編集者: orangeful 編集日時 2004-11-11 12:57 ] | ||||
|
投稿日時: 2004-11-11 13:11
InitialContext ic = new InitialContext(); です。
>#私自身がこれで2時間くらいハマったことがあるのは内緒です。 あ〜、私、3日間もはまってしまいました。 ![]() | ||||
|
投稿日時: 2004-11-11 13:44
いえいえ、今回のケースと私の凡ミスとはまた違うようですから。 スタックトレースを見ると、例外はPortableRemoteObject.narrowが入っているんですね。(よく嫁>自分) | ||||
|
投稿日時: 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が返されるのでしょうか?リモートインタフェースを使用するにはどうしたらよろしいのでしょうか? | ||||
|
投稿日時: 2004-11-12 00:41
<ejb-local-ref> でしていしているからかな?
<ejb-ref> でリモートインターフェースを指定したらどうでしょう? #Localが使える状態で積極的にRemoteを使う理由はないと思いますが |