2016-05-13 5 views
0

Я пытаюсь сделать вызов EJB от Jboss (6.4 EAP) к WebSphere (7.x). У меня есть рабочий пример из WebSphere (WAS) для WAS, однако одно и то же имя местоположения и поиска возвращает исключение, которое не было найдено. В настоящее время я делаю это тестирование внутри веб-приложения, развернутого как WAR в Jboss.Jboss (6.4 EAP) в WebSphere (7.x)

У меня нет EJB, определенного в web.xml, ни в jboss-web.xml (я не считаю, что мне это нужно). Версия EJB в WebSphere - 2.1.

Properties env = new Properties(); 
env.put(Context.PROVIDER_URL, "corbaloc::example.test.com:11000"); 
InitialContext ctx = new InitialContext(env); 
Object obj= ctx.lookup("cell/clusters/MyEJBHome12Cluster/MyEJBHome"); 

выше бросает NameNotFoundException:

javax.naming.NameNotFoundException: cell/clusters/MyEJBHome12Cluster/MyEJBHome -- service jboss.naming.context.java.cell.clusters."MyEJBHome12Cluster"."MyEJBHome" 
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:104) 
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:197) 
    at org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:243) 
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:183) 
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:179) 
    at javax.naming.InitialContext.lookup(InitialContext.java:411) 
    at javax.naming.InitialContext.lookup(InitialContext.java:411) 
    at com.test.ejbClient.getRemoteConnection(ejbClient.java:192) 
    at com.test.ejbClient.runIt(ejbClient.java:77) 
    at com.test.TestRemoteEJB.doGet(TestRemoteEJB.java:59) 

Я также попытался использовать солнце завод: com.sun.jndi.cosnaming.CNCtxFactory

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"); 

, который дает несколько схожие результаты :

javax.naming.NameNotFoundException [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0] 
    at com.sun.jndi.cosnaming.ExceptionMapper.mapException(ExceptionMapper.java:61) 
    at com.sun.jndi.cosnaming.CNCtx.callResolve(CNCtx.java:502) 
    at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:541) 
    at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:519) 
    at javax.naming.InitialContext.lookup(InitialContext.java:411) 
    at javax.naming.InitialContext.lookup(InitialContext.java:411) 
    at com.test.ejbClient.getRemoteConnection(ejbClient.java:192) 
    at com.test.ejbClient.runIt(ejbClient.java:77) 
    at com.test.TestRemoteEJB.doGet(TestRemoteEJB.java:59) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:231) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) 
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0 
    at org.omg.CosNaming.NamingContextPackage.NotFoundHelper.read(NotFoundHelper.java:72) 
    at org.omg.CosNaming._NamingContextStub.resolve(_NamingContextStub.java:251) 
    at com.sun.jndi.cosnaming.CNCtx.callResolve(CNCtx.java:488) 

Вышеописанная попытка была сделана с использованием следующего сайта: Reference Link First

Затем я попытался использовать банки клиента IBM, чтобы проверить, могу ли я позвонить. Я последовал за этот сайт: Reference Link 2

я добавил 2 баночки:

  • com.ibm.ws.ejb.thinclient_8.5.0.jar
  • com.ibm.ws.orb_8.5.0.jar

Я также добавил все банки, в которых были классы EJB и классы-заглушки. Я использовал фабрику com.ibm.websphere.naming.WsnInitialContextFactory. Он смотрит на EJB штраф, но во время разговора PortableRemoteObject.narrow, он терпит неудачу с

java.lang.ClassCastException: com.test._MyEJBHome_Stub cannot be cast to org.omg.CORBA.Object 

Я сомневаюсь, что я мог бы использовать в любом случае БЫЛ банки, как я должен работать с Java 1.8, который выиграл» t работать с клиентскими банками, которые у меня выше, и я не предпочитаю использовать банки IBM внутри JBoss, когда Jboss должен это сделать.

+0

Вы вероятно, знаете, что по умолчанию WebSphere МИОП прослушивает 2809, а не 11000. Если это не проблема, возможно, что-то на этой странице будет полезно: https://www.ibm.com/support/ knowledgecenter/SSAW57_7.0.0/com.ibm.websphere.nd.doc/info/ae/ae/rnam_example_prop3.html –

+0

Исправление моего предыдущего комментария: Обычно вы просматриваете InitialContext через порт начальной загрузки, который по умолчанию равен 2809, а не 11000. Если это не проблема, возможно, что-то на этой странице будет полезно: https://www.ibm.com/support/knowledgecenter/SSAW57_7.0.0/com.ibm.websphere.nd.doc/info/ae/ae/ rnam_example_prop3.html Эта страница также может быть полезна: https://www.ibm.com/support/knowledgecenter/was_beta/com.ibm.websphere.base.doc/ae/rnam_example_prop1.html –

+0

Я встречаюсь с тем же вопрос. можете ли вы рассказать мне, как вы его решили? – Stony

ответ

1

Мы действительно нашли решение этой проблемы. Существует волшебный набор символов, который должен быть в поиске JBoss. Раньше URL провайдера и JNDI были отдельными. Теперь все они находятся в строке поиска, как показано ниже. Кроме того, никакие другие параметры не были добавлены в InitialContext.

InitialContext ctx = new InitialContext(); // no need to add anything to the context 

// A few reminders about the below: 
// 1. For multiple hosts, separate with commas, i.e. "corbaname::@<server:port>,:@<server2:port2>" 
// 2. If periods are used in the lookup name, they must be escaped, i.e. MyEJBHome-1.0 needs to be MyEJBHome-1\.0 
Object obj= ctx.lookup("corbaname::@example.test.com:11000/NameServiceServerRoot#cell/clusters/MyEJBHome12Cluster/MyEJBHome"); 

// Normal EJB things below 
MyEJBHome home = (MyEJBHome) javax.rmi.PortableRemoteObject.narrow(obj, MyEJBHome.class); 
MyEJB myEJB = home.create(); 
+0

Спасибо, Ник. Оно работает! – Stony

Смежные вопросы