EJB исключение при попытке запустить клиент - PullRequest
1 голос
/ 10 марта 2011

Я создал объект EJB и столкнулся с этой ошибкой во время выполнения,

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 

Как создать объект EJB в моем клиенте?У меня есть интерфейс бина TestPortal и класс бина 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);

Объект ref = initialContext.lookup (sEjbRemote);

Когда я печатаю объект в SOP ref.toString ();

я получил следующую информацию, но яЯ не могу создать объект для TestPortal, который находится в PoratlEJB.ear, который развернут в версии JBOSS-AS: 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 ice = EJB3 Тип: фабрика прокси является локальным содержимым: false Тип: содержимое удаленного бизнес-интерфейса: test.ejb.TestPortal Тип: URL-адрес удаленного хоста Содержимое: socket: // s9458: 3973 /

1 Ответ

1 голос
/ 10 марта 2011

Как правило, мы делаем что-то вроде этого,

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); 
...