IBM Content Navigator无法连接到高可用性Content Engine存储库

时间:2016-06-09 07:06:21

标签: filenet-content-engine ibm-content-navigator

我们有一个改进措施如下:

CPE :2台服务器
         ICN :2台服务器
         Application Server :WAS 8.5.5 Base

使用Load Balancer配置内容引擎和导航器以实现高可用性。但是,如果 ICN 1 连接到 CPE1 CPE1 是dwn,则导航器无法连接到 CPE2 即使 CPE 的负载均衡器指向 CPE2

日志如下:

javax.naming.NamingException: NMSV0610I: A NamingException is being thrown from a javax.naming.Context implementation. Details follow:
    Context implementation: com.ibm.ws.naming.jndicos.CNContextImpl
    Context method: lookupExt
    Context name: HDOSYS0202Node01Cell/nodes/HDOSYS0202Node01/servers/server1
    Target name: FileNet/Engine,10.39.128.66:2809/FileNet/Engine
    Other data: 
    Exception stack trace: javax.naming.NamingException: Error during resolve [Root exception is org.omg.CORBA.TRANSIENT: initial and forwarded IOR inaccessible vmcid: IBM minor code: E07 completed: No]
    at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1867)
    at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1776)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1433)
    at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:615)
    at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:165)
    at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:179)
    at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
    at javax.naming.InitialContext.lookup(InitialContext.java:436)
    com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1864)
    Caused by: org.omg.CORBA.TRANSIENT: initial and forwarded IOR inaccessible vmcid: IBM minor code: E07 completed: No

    Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:412)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:271)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:258)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:376)
    at java.net.Socket.connect(Socket.java:546)
    at com.ibm.ws.orbimpl.transport.WSTCPTransportConnection.createSocket(WSTCPTransportConnection.java:370)
    at com.ibm.CORBA.transport.TransportConnectionBase.connect(TransportConnectionBase.java:366)
    at com.ibm.ws.orbimpl.transport.WSTransport.getConnection(WSTransport.java:437)
    at com.ibm.CORBA.transport.TransportBase.getConnection(TransportBase.java:188)
    at com.ibm.rmi.iiop.TransportManager.get(TransportManager.java:100)
    at com.ibm.rmi.iiop.GIOPImpl.getConnection(GIOPImpl.java:134)
    at com.ibm.rmi.iiop.GIOPImpl.createRequest(GIOPImpl.java:178)
    at com.ibm.rmi.corba.ClientDelegate._createRequest(ClientDelegate.java:2010)
    at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1186)
    at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1272)

3 个答案:

答案 0 :(得分:2)

Content Platform Engine不支持故障转移所需的会话复制。建立连接后,客户端将绑定到特定端点,因此corbaloc和负载平衡别名都不会有帮助。如果节点不在群集中,则对等体将不在JNDI树中,因此不了解彼此。你所拥有的被称为“瘦腿”配置。您可以对前端进行负载平衡,但每个前端都会与特定的后端通信,因此不具备高可用性。您可以将CE置于硬件负载平衡器(SNAT)之后,但它仍然缺少故障转移。 CPE将在JBOSS上运行,但ICN不会运行,因此要高度可用,您需要部署到WebSphere ND或Weblogic。

答案 1 :(得分:0)

你能分享用于建立CPE连接的URI吗?

当Content Platform Engine通过应用程序服务器集群配置高度可用时,Content Platform Engine URI应具有以下格式(没有回车符):

corbaloc::node1_hostname:BOOTSTRAP_ADDRESS,:node2_hostname:BOOTSTRAP_ADDRESS/cell/clusters/your_websphere_cluster_name/FileNet/Engine

示例:

corbaloc::testnode1:9810,:testnode2:9810/cell/clusters/testwascluster/FileNet/Engine

除了节点名称之外,此配置还需要WebSphere集群名称作为URI的一部分。群集配置的引导端口(默认情况下为端口9810)通常与非群集(独立)配置上的引导端口不同(默认情况下为端口2809)。

无论使用何种SSL,都只使用一个URI。如果启用了EJB安全性,则会自动建立WebSphere EJB over SSL。

答案 2 :(得分:-2)

我找到了一个链接,其中包含解决此问题的代码。唯一的问题是如何为Content Navigator实现此代码

“这可能有所帮助。我最近编写了一个EJB打印应用程序,我公司的其他应用程序使用它来生成可打印的文档。我也在客户端上使用访问bean来远程调用我的EJB。客户端是一个4服务器集群,我的EJB是一个2服务器集群。如果在不重新启动客户端的情况下停止运行我的EJB的应用程序服务器,我也遇到了“连接被拒绝”异常的问题。这就是我所做的到目前为止已经完成了解决问题。

查看访问bean,在创建实例之后,当你调用你的远程方法时(无论是什么,在我的情况下是我将在下面的例子中使用的renderDocuments()),访问bean执行以下操作: “

public DocumentRenderOutputContext renderDocuments
    DocumentRequestList documentRequestList)
{
    try
    {
        instantiateEJB();
        return ejbRef().renderDocuments
            documentRequestList);
    }
    catch (NamingException ne)
    {
throw new DocumentRenderException(ne);
    }
    catch (CreateException ce)
    {
throw new DocumentRenderException(ce);
    }
    catch (RemoteException re)
    {
        THE EXCEPTION THROWN WHEN THE APP SERVER IS
        BROUGHT DOWN WITHOUT RESTARTING THE CLIENT
        WILL BE CAUGHT HERE
    }
}

If you bring down your EJB app server(s) without re-starting the client, the remote exception above will catch the "connect refused" exception.

So what i do inside the remote exception catch is the following:

try
{
    //see below for methods
    reset(); 
    return retryRenderDocuments(documentRequestList);
}
catch (NamingException ne)
{
    throw new DocumentRenderException(ne);
}
catch (CreateException ce)
{
    throw new DocumentRenderException(ce);
}
catch (RemoteException remote)
{
    throw new DocumentRenderException(re);
}

private void reset() throws NamingException
{   
    resetHomeCache();
    resetEJBRef();
}

private DocumentRenderOutputContext retryRenderDocuments
    DocumentRequestList documentRequestList)
    throws
    RemoteException,
    NamingException,
    CreateException,
    DocumentRenderException
{
    DocumentRenderOutputContext outputContext = null;

    Properties properties = new Properties();

    properties.put(
        javax.naming.Context.PROVIDER_URL,
getInit_NameServiceURLName()); //im assuming youve
properties.put(
PROPS.JNDI_CACHE_OBJECT,
PROPS.JNDI_CACHE_OBJECT_CLEARED);
InitialContext initialContext = new InitialContext(properties);

Object object = initialContext.lookup(getInit_JNDIName());

ECommercePrintHome homeRef = (ECommercePrintHome) object;

ECommercePrint printEngine = homeRef.create();

outputContext = printEngine.renderDocuments(documentRequestList);

return outputContext;
}

参考: - http://www.theserverside.com/discussions/thread.tss?thread_id=31495