2010-06-09 136 views
1

我以前見過這個問題,但我嘗試了各種解決方案,但都無濟於事。WebSphere 6.1的遠程EJB查詢問題

本質上,我有兩個EJB企業應用程序,需要相互通信。第一個是Web應用程序,第二個是搜索服務器 - 它們位於不同的開發服務器上,不在同一個節點,單元或JVM中,儘管它們位於同一個物理盒子上。

我正在通過IIOP JNDI查找,和我使用的網址如下:

IIOP:// searchserver:2819

在我的主機文件,我已經設置searchserver到127.0.0.1。我的搜索服務器的端口也綁定到這個主機名。

但是,當Web應用程序(使用Spring btw)嘗試查找搜索EJB時,它會失敗並顯示以下錯誤。這促使我堅持下去,當然這些服務器之間的通信應該相當簡單。我檢查了端口,他們是正確的。

我注意到這個例外說明了初始上下文是H00723Node03Cell/nodes/H00723Node03/servers/server1,名稱:ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome。這是Web應用程序服務器而不是搜索服務器。它是否正確?我怎樣才能讓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 

非常感謝您的任何幫助!

Marc

P.S.這裏是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

你可以發佈Spring配置,包括jndiname和provider.url嗎? – JoseK 2010-06-09 11:46:03

+0

您好josek,我已經附上上面的SpringApplicationContext條目。 – 2010-06-09 12:03:13

回答

3

我已經解決了這個問題。不得不說,WebSphere是真正的醜陋,我不得不說。

因此,我的機器名稱的DNS爲H00723.int.hmv.co.uk。我需要將端口綁定到搜索應用程序的名稱,然後更新Spring應用程序上下文以使用它們。

爲什麼我不能簡單地使用本地主機與正確的端口是我覺得困惑的東西。 WAS與同一物理IP上的多個實例混淆在一起,其他應用服務器不這樣做。

對不起,浪費人們的時間與我回答自己的問題!如果您確實閱讀過這篇文章,請多花點時間。

+0

好吧剛纔看到你的回覆 - 忽略我的 – JoseK 2010-06-09 13:09:57

+3

這並不奇怪。它使用一種稱爲反向DNS查找的東西。 各方(我們稱之爲Server1和Server2)應該以他們自己理解的方式完全相同。在你的情況下,你調用服務器爲127.0.0.1,而服務器認爲它是H00723.int.hmv.co.uk它不匹配相同的127.0.0.1 希望這個澄清 – Manglu 2010-06-16 13:14:20

0

這個old URL表明完全合格的jndiname將工作。

<value>cell/nodes/machineName/servers/server1/ejb/com/hmv/dataaccess/ejb/hmvsearch/HMVSearchHome</value>