我创建了一个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对象?我在耳朵
TestPortal
中有一个bean接口TestPortalBean
和一个bean类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);
对象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 /远程
类型:EJB容器名称
内容:jboss.j2ee:ear = PortalEJB.ear,jar = PortalEJB.jar,name = TestPortalBean,serv
ice = EJB3
类型:代理工厂是本地的
内容:假
类型:远程业务接口
内容:test.ejb.TestPortal
类型:远程主机URL
内容:socket:// s9458:3973 /
最佳答案
通常,我们这样做
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);