我创建了一个bean对象,并在运行时遇到了这个错误,
java.lang.ClassCastException at
com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(Unknown Source) at
javax.rmi.PortableRemoteObject.narrow(Unknown Source) at Client_TestPortal.main Client_TestPortal.java:71) Caused by:
java.lang.ClassCastException: javax.naming.Reference ... 3 more
如何在我的客户端创建bean对象?我有一个bean接口TestPortal
和一个bean类TestPortalBean
,在耳朵里PortalEJB
。
这是代码,我用来在客户端创建EJB实例,
String sEjbRemote = "PortalEJB/TestPortalBean/remote";
Properties pProp = new Properties();
pProp.put("java.naming.factory.initial",sInitCtxtCls);
pProp.put("java.naming.provider.url", sUrl);
javax.naming.InitialContext initialContext = new InitialContext(pProp);
Object ref = initialContext.lookup(sEjbRemote);
System.out.println("\n\n \t Source :::"+ref.toString());
test.ejb.TestPortal testportal = (test.ejb.TestPortal)PortableRemoteObject.narrow(ref,test.ejb.TestPortal.class);
Object ref = initialContext.lookup(sEjbRemote);
当我在SOP ref.toString();
中打印对象时我得到了以下信息,但我无法为在JBOSS-AS版本中部署的PoratlEJB.ear中的TestPortal创建对象:Jboss-5.0.1.GA
Source :::Reference Class Name: Proxy for: test.ejb.TestPortal
类型:ProxyFactoryKey 内容:ProxyFactory / TestPortalBean / PortalEJB / TestPortalBean / remote 类型:EJB容器名称 内容:jboss.j2ee:ear = PortalEJB.ear,jar = PortalEJB.jar,name = TestPortalBean,serv 冰= EJB3 类型:代理工厂是本地的 内容:错误 类型:远程业务接口 内容:test.ejb.TestPortal 键入:远程主机URL 内容:socket:// s9458:3973 /
答案 0 :(得分:1)
通常,我们会这样做,
Properties props = getConfigurationProps();
InitialContext ctx = new InitialContext(props);
tp = (TestPortal) ctx.lookup(TEST_PORTAL_JNDI_NAME);
<强> [编辑] 强>
从您的代码中我可以看到您正在尝试narrow()
该对象。让我们看一下有关这方面的文件,它说,
Checks to ensure that an object of a remote or abstract interface type can be cast to a desired type.
Parameters:
narrowFrom - the object to check.
narrowTo - the desired type.
Returns:
an object which can be cast to the desired type.
Throws:
ClassCastException - if narrowFrom cannot be cast to narrowTo.
我不确定你在做什么。但是你可以随时做到这一点,正如我在第一次尝试中所表现的那样。
TestPortal ref = (TestPortal) initialContext.lookup(sEjbRemote);
代替,
Object ref = initialContext.lookup(sEjbRemote);