尝试运行客户端时出现EJB异常

时间:2011-03-10 09:35:10

标签: java ejb-3.0 ejb

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

1 个答案:

答案 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);