Archived

This forum has been archived. Please start a new discussion on GitHub.

getting ConnectionLostException

folks,
I call a server method getObjects which Returns a Sequence of Objects, 120K. I am getting ConnectionLostException. I can pass 100K object on same remote object.
There are other objects in same jvm that are doing fine.

Thanks a bunch.

Ice.ConnectionLostException
error = 0
Ice.ConnectionLostException
error = 0
at IceInternal.Outgoing.invoke(Outgoing.java:147)
at _BackofficeImplDataAccessIDelM.getObjects(_BackofficeImplDataAccessIDelM.java:915)
at BackofficeImplDataAccessIPrxHelper.getObjects(BackofficeImplDataAccessIPrxHelper.java:611)

Comments

  • marc
    marc Florida
    Please see this thread regarding our support policy here on these forums:

    http://www.zeroc.com/vbulletin/showthread.php?t=1697
  • matthew
    matthew NL, Canada
    It sounds like you are running into the configured memory limit size of a request. Set Ice.MessageSizeMax to a higher value and try again. See the Ice Manual for more information on this topic. If you set Ice.Warn.Connections you can get more information on errors in your server.
  • Thanks for your reply
    I have
    Ice.MessageSizeMax=204800000

    I am on Win 2003 Server. Ice 2.1.2. java 1.5

    Ice.Warn.Connections=1
    did not produce any warnings for me.

    Thanks
  • matthew
    matthew NL, Canada
    Yeah, I realized after posting that this couldn't be your problem :) Is it possible you are getting a null pointer exception when marshaling the objects? Another possibility is that the client is lacking an object factory on the client side to create the objects when receiving them.

    The easiest way for us to help you is for you to supply a self contained compilable example that demonstrates the problem.
  • None of my object is null.
    And it works for 100K objects ( basically no factory issue too). Actually I am just sending 120K copies of same object.

    I am suspecting some bad TCP/IP config on the server.
    Is there a way I can print the original java exception that was thrown when the socket connection broke.

    Thanks again
  • marc
    marc Florida
    The Java server prints the original exception if you set Ice.Warn.Connections=1 for the Java server (not the client).
  • Thanks Marc. This is what I got. JVM has enough memory. System is also fime.

    Thanks

    Using Sun JDK:

    warning: connection exception:
    Ice.SocketException
    error = 0
    at IceInternal.TcpTransceiver.write(TcpTransceiver.java:194)
    at Ice.ConnectionI.sendResponse(ConnectionI.java:903)
    at IceInternal.Incoming.invoke(Incoming.java:420)
    at Ice.ConnectionI.invokeAll(ConnectionI.java:1940)
    at Ice.ConnectionI.message(ConnectionI.java:1139)
    at IceInternal.ThreadPool.run(ThreadPool.java:703)
    at IceInternal.ThreadPool.access$100(ThreadPool.java:12)
    at IceInternal.ThreadPool$EventHandlerThread.run(ThreadPool.ja
    Caused by: java.io.IOException: An operation on a socket could not be
    at sun.nio.ch.SocketDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)
    at sun.nio.ch.IOUtil.write(IOUtil.java:75)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:3
    at IceInternal.TcpTransceiver.write(TcpTransceiver.java:133)
    ... 7 more


    Using JRockIt:

    warning: connection exception:
    Ice.SocketException
    error = 0
    at IceInternal.TcpTransceiver.write(TcpTransceiver.java:194)
    at Ice.ConnectionI.sendResponse(ConnectionI.java:903)
    at IceInternal.Incoming.invoke(Incoming.java:420)
    at Ice.ConnectionI.invokeAll(ConnectionI.java:1940)
    at Ice.ConnectionI.message(ConnectionI.java:1139)
    at IceInternal.ThreadPool.run(ThreadPool.java:703)
    at IceInternal.ThreadPool.access$100(ThreadPool.java:12)
    at IceInternal.ThreadPool$EventHandlerThread.run(ThreadPool.java:1140)
    Caused by: java.net.SocketException: Insufficient buffer space
    at jrockit.io.NativeIO.write(Ljava.io.FileDescriptor;II)I(Unknown Source)
    at jrockit.nio.ch.IOUtil.write(Ljava.io.FileDescriptor;IIJLjrockit.io.NativeIO;Ljava.lang.Object;)I(Unknown Source)
    at jrockit.nio.ch.IOUtil.write(Ljava.io.FileDescriptor;Ljrockit.io.IOMemory;IJLjrockit.io.NativeIO;Ljava.lang.Object;)I(Unknown Source)
    at jrockit.nio.ch.IOUtil.write(Ljava.io.FileDescriptor;Ljava.nio.ByteBuffer;JLjrockit.io.NativeIO;Ljava.lang.Object;)I(Unknown Source)
    at jrockit.nio.ch.SocketChannelImpl.write(Ljava.nio.ByteBuffer;)I(Unknown Source)
    at IceInternal.TcpTransceiver.write(TcpTransceiver.java:133)
  • marc
    marc Florida
    I believe that:
    java.net.SocketException: Insufficient buffer space
    

    Corresponds to:
    WSAENOBUFS
    10055 	
    
    No buffer space available.
        An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
    

    Google found an explanation of this error here:

    http://www.proxyplus.cz/faq/articles/EN/art10002.htm