2010-06-09 6 views
1

이 질문을 전에 보았습니다. 그러나 여러 가지 해결책을 제안했지만 아무 소용이 없었습니다.WebSphere 6.1에서 원격 EJB 조회 문제가 발생했습니다.

본질적으로 서로 통신해야하는 두 개의 EJB 엔터프라이즈 응용 프로그램이 있습니다. 첫 번째는 웹 응용 프로그램이고 두 번째는 검색 서버입니다. 동일한 물리적 상자에 있지만 동일한 노드, 셀 또는 JVM이 아닌 다른 개발 서버에 있습니다.

나는 IIOP를 통해 JNDI 조회를하고있어, 다음과 같이 내가 사용하고있는 URL은 다음과 같습니다

IIOP : //의 SearchServer : 내 호스트에서 2819

, 나는이의 SearchServer에 설정 한 정보 파일 127.0.0.1. 내 검색 서버의 포트도이 호스트 이름에 바인딩됩니다.

그러나 웹 응용 프로그램 (Spring btw를 사용하는)이 검색 EJB를 검색하려고 시도하면 다음 오류로 인해 실패합니다. 이것은 나를 괴롭히는 것입니다. 서버 사이의 이런 종류의 통신은 분명히 작동하기 쉽습니다. 포트를 확인했는데 정확합니다.

예외는 초기 컨텍스트가 H00723Node03Cell/nodes/H00723Node03/servers/server1, 이름 : ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome이라는 것을 알 수 있습니다. 이것은 검색 서버가 아닌 웹 응용 프로그램 서버입니다. 이 올바른지? Spring이 올바른 컨텍스트를 사용하도록 어떻게 할 수 있습니까?

[08/06/10 17:14:28:655 BST] 00000028 SystemErr  R org.springframework.remoting.RemoteLookupFailureException: Failed to locate remote EJB [ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome]; nested exception is javax.naming.NameNotFoundException: Context: H00723Node03Cell/nodes/H00723Node03/servers/server1, name: ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome: First component in name hmvsearch/HMVSearchHome not found. [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0] 
    at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doInvoke(SimpleRemoteSlsbInvokerInterceptor.java:101) 
    at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.invoke(AbstractRemoteSlsbInvokerInterceptor.java:140) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at $Proxy7.doSearchByProductKeywordsForKiosk(Unknown Source) 
    at com.hmv.web.usecases.search.SearchUC.execute(SearchUC.java:128) 
    at com.hmv.web.actions.search.SearchAction.executeAction(SearchAction.java:129) 
    at com.hmv.web.actions.search.KioskSearchAction.executeAction(KioskSearchAction.java:37) 
    at com.hmv.web.actions.HMVAbstractAction.execute(HMVAbstractAction.java:123) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
    at com.hmv.web.controller.HMVActionServlet.process(HMVActionServlet.java:149) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1282) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1239) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:136) 
    at com.hmv.web.support.SessionFilter.doFilter(SessionFilter.java:137) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:142) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:121) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:82) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:670) 
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:2933) 
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:221) 
    at com.ibm.ws.webcontainer.VirtualHost.handleRequest(VirtualHost.java:210) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1912) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:84) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:472) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:411) 
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:101) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952) 
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1462) 
Caused by: javax.naming.NameNotFoundException: Context: H00723Node03Cell/nodes/H00723Node03/servers/server1, name: ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome: First component in name hmvsearch/HMVSearchHome not found. [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0] 
    at com.ibm.ws.naming.jndicos.CNContextImpl.processNotFoundException(CNContextImpl.java:4392) 
    at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1752) 
    at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1707) 
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1412) 
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1290) 
    at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:145) 
    at javax.naming.InitialContext.lookup(InitialContext.java:361) 
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:132) 
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:88) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:130) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:155) 
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) 
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) 
    at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.lookup(AbstractRemoteSlsbInvokerInterceptor.java:98) 
    at org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.getHome(AbstractSlsbInvokerInterceptor.java:143) 
    at org.springframework.ejb.access.AbstractSlsbInvokerInterceptor.create(AbstractSlsbInvokerInterceptor.java:172) 
    at org.springframework.ejb.access.AbstractRemoteSlsbInvokerInterceptor.newSessionBeanInstance(AbstractRemoteSlsbInvokerInterceptor.java:226) 
    at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.getSessionBeanInstance(SimpleRemoteSlsbInvokerInterceptor.java:141) 
    at org.springframework.ejb.access.SimpleRemoteSlsbInvokerInterceptor.doInvoke(SimpleRemoteSlsbInvokerInterceptor.java:97) 
    ... 36 more 

도움을 주셔서 감사합니다.

마크

P. 다음은 ejb 용 SpringApplicationContext 항목입니다.

<bean id="hmvSearch" 
    class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean"> 
    <property name="jndiName" value="ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome" /> 
    <property name="lookupHomeOnStartup" value="false" /> 
    <property name="cacheHome" value="false" /> 
    <property name="refreshHomeOnConnectFailure" value="true" /> 
    <property name="businessInterface" value="com.hmv.dataaccess.ejb.hmvsearch.HMVSearch" /> 
    <property name="jndiEnvironment"> 
     <props> 
      <prop key="java.naming.factory.initial">com.ibm.websphere.naming.WsnInitialContextFactory</prop> 
      <prop key="com.ibm.websphere.naming.jndicache.cacheobject">none</prop> 
      <prop key="java.naming.provider.url">iiop://localhost:2819</prop> 
     </props> 
    </property> 
</bean> 
+0

jndiname과 provider.url을 포함하여 Spring 구성을 게시 할 수 있습니까? – JoseK

+0

안녕하세요 josek, 위의 SpringApplicationContext 항목을 첨부했습니다. –

답변

3

이제이 문제를 해결했습니다. WebSphere는 참으로 끔찍한 말입니다.

그래서 내 컴퓨터 이름은 DNS가 H00723.int.hmv.co.uk입니다. 검색 응용 프로그램에 해당 이름으로 포트를 바인드하고이를 사용하도록 스프링 응용 프로그램 컨텍스트를 업데이트해야했습니다.

올바른 포트와 함께 localhost를 사용할 수없는 이유는 무엇입니까? WAS는 다른 응용 프로그램 서버와 달리 동일한 실제 IP에서 여러 인스턴스와 혼동을 일으 킵니다.

질문이있는 사람들을 낭비하게되어 죄송합니다. 나 자신에게 답변했습니다. 이걸 읽은 적이 있다면 시간을내어 주셔서 감사합니다.

+0

자, 이제 답장을 보았습니다. - 내 것을 무시하십시오. – JoseK

+3

이상하게 행동하지 않습니다. 그것은 역 DNS look up으로 불리는 것을 사용합니다. 당사자 (Server1 및 Server2라고 함)는 자신을 이해하는 것과 정확히 동일한 방식으로 서로를 알아야합니다. 귀하의 경우, 서버를 127.0.0.1로 호출하는 반면 서버는 H00723.int.hmv.co.uk이 127.0.0.1과 일치하지 않는다고 생각합니다. 희망 사항이 명확 해집니다. – Manglu

0

old URL은 완전한 jndiname이 작동 할 것을 제안합니다.

<value>cell/nodes/machineName/servers/server1/ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome</value> 
관련 문제