我创建了一个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);

08-05 15:48