【问题标题】:Remote EJB lookup issue with WebSphere 6.1WebSphere 6.1 的远程 EJB 查找问题
【发布时间】:2010-06-09 10:04:47
【问题描述】:

我之前看到过这个问题,但我尝试了各种提出的解决方案,但无济于事。

基本上,我有两个 EJB 企业应用程序,它们需要相互通信。第一个是 Web 应用程序,第二个是搜索服务器 - 它们位于不同的开发服务器上,而不是在同一个节点、单元或 JVM 中,尽管它们在同一个物理框上。

我正在通过IIOP进行JNDI查找,我使用的URL如下:

iiop://searchserver:2819

在我的 hosts 文件中,我将 searchserver 设置为 127.0.0.1。我的搜索服务器的端口也绑定到这个主机名。

但是,当 Web 应用程序(使用 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

非常感谢您的帮助!

马克

附:这是 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>

【问题讨论】:

  • 你能发布包含 jndiname 和 provider.url 的 Spring 配置吗?
  • 嗨 josek,我已经附上了上面的 SpringApplicationContext 条目。

标签: java spring websphere ejb


【解决方案1】:

我现在已经解决了这个问题。顺便说一句,我不得不说,WebSphere 真的很可怕。

所以,我的机器名称的 DNS 为 H00723.int.hmv.co.uk。我需要将端口绑定到搜索应用程序的该名称,然后更新 spring 应用程序上下文以使用它们。

为什么我不能简单地将 localhost 与正确的端口一起使用,这让我感到困惑。 WAS 会与同一物理 IP 上的多个实例混淆,而其他应用服务器则不会。

抱歉,我自己回答了一个问题,浪费了人们的时间!如果您确实阅读了本文,感谢您抽出宝贵时间。

【讨论】:

  • 好的,刚刚看到你的回复-然后忽略我的
  • 它的行为并不奇怪。它使用称为反向 DNS 查找的东西。各方(我们称他们为 Server1 和 Server2)应该以与他们了解自己完全相同的方式相互了解。在您的情况下,您将服务器称为 127.0.0.1 而服务器认为它是 H00723.int.hmv.co.uk 与 127.0.0.1 不匹配希望这可以澄清
【解决方案2】:

old URL 表明完全限定的 jndiname 可以工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多