Re: problem w/ serialization of java.rmi.Remote pointer across HTTP through firewall

George Ludwig <[email protected]>
Newsgroups gmane.comp.java.sun.rmi
Message-ID <[email protected]>
Bob,

I reallly appreciate your input on this. I did a stack
dump on the client using jrockit, and got the dump
listed at the end of this msg. Getting a stack dump
from tomcat is a problematic right now, but I can see
here in the client that there is definitely a DGC
dirty call being made on the remote stub. This call
will never succeed, because the service referenced by
the stub is not resolvable from outside the firewall.
If it were, I wouldn't be needing to write the proxy
in the first place! I'm guessing the timeout for the
dirty call defaults to around 20 seconds.

Is there any kind of workaround to this problem? Can
I, on the local client, disable the DGC
makeDirtyCall()? Can I at least change the timeout to,
say, 1 milli? I'm on JDK 1.4.2

If I can't, I will have to hack the proxy servlet to
strip Remote references from all outgoing data, then
repopulate them from cache on their way back through.
It's totally doable, but somewhat ugly. And I'd have
to worry about inadvertantly including a Remote
reference somewhere that wasn't being filtered etc.

Cheers,

George
`
Thread-0x80 "Main Thread" <Active, priority=5> {

jrockit/net/SocketNativeIO.connect(ILjava/net/InetAddress;IIIZ)I(Native
Method)

jrockit/net/SocketNativeIO.connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;III)I(Unknown
Source)

java/net/AbstractSocketImpl.doConnect(Ljava/net/InetAddress;II)V(Unknown
Source)
    ^-- Holding lock:
java/net/PlainSocketImpl@121b778[thin lock]

java/net/PlainSocketImpl.doConnect(Ljava/net/InetAddress;II)V(Unknown
Source)

java/net/PlainSocketImpl.connectToAddress(Ljava/net/InetAddress;II)V(Unknown
Source)

java/net/PlainSocketImpl.connect(Ljava/net/SocketAddress;I)V(Unknown
Source)

java/net/Socket.connect(Ljava/net/SocketAddress;I)V(Socket.java:452)

java/net/Socket.connect(Ljava/net/SocketAddress;)V(Socket.java:402)

java/net/Socket.<init>(Ljava/net/SocketAddress;Ljava/net/SocketAddress;Z)V(Socket.java:309)

java/net/Socket.<init>(Ljava/lang/String;I)V(Socket.java:124)

sun/rmi/transport/proxy/RMIDirectSocketFactory.createSocket(Ljava/lang/String;I)Ljava/net/Socket;(RMIDirectSocketFactory.java:22)

sun/rmi/transport/proxy/RMIMasterSocketFactory.createSocket(Ljava/lang/String;I)Ljava/net/Socket;(RMIMasterSocketFactory.java:128)

sun/rmi/transport/tcp/TCPEndpoint.newSocket()Ljava/net/Socket;(TCPEndpoint.java:562)

sun/rmi/transport/tcp/TCPChannel.createConnection()Lsun/rmi/transport/Connection;(TCPChannel.java:185)

sun/rmi/transport/tcp/TCPChannel.newConnection()Lsun/rmi/transport/Connection;(TCPChannel.java:171)

sun/rmi/server/UnicastRef.newCall(Ljava/rmi/server/RemoteObject;[Ljava/rmi/server/Operation;IJ)Ljava/rmi/server/RemoteCall;(UnicastRef.java:313)

sun/rmi/transport/DGCImpl_Stub.dirty([Ljava/rmi/server/ObjID;JLjava/rmi/dgc/Lease;)Ljava/rmi/dgc/Lease;(Unknown
Source)

sun/rmi/transport/DGCClient$EndpointEntry.makeDirtyCall(Ljava/util/Set;J)V(DGCClient.java:328)

sun/rmi/transport/DGCClient$EndpointEntry.registerRefs(Ljava/util/List;)Z(DGCClient.java:275)

sun/rmi/transport/DGCClient.registerRefs(Lsun/rmi/transport/Endpoint;Ljava/util/List;)V(DGCClient.java:112)

sun/rmi/transport/LiveRef.read(Ljava/io/ObjectInput;Z)Lsun/rmi/transport/LiveRef;(LiveRef.java:274)

sun/rmi/server/UnicastRef.readExternal(Ljava/io/ObjectInput;)V(UnicastRef.java:464)

java/rmi/server/RemoteObject.readObject(Ljava/io/ObjectInputStream;)V(RemoteObject.java:420)

java/lang/LangAccessImpl.readObject(Ljava/lang/Class;Ljava/lang/Object;Ljava/io/ObjectInputStream;)V(Unknown
Source)

java/io/ObjectStreamClass.invokeReadObject(Ljava/lang/Object;Ljava/io/ObjectInputStream;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject()Ljava/lang/Object;(Unknown
Source)

java/util/ArrayList.readObject(Ljava/io/ObjectInputStream;)V(ArrayList.java:547)

java/lang/LangAccessImpl.readObject(Ljava/lang/Class;Ljava/lang/Object;Ljava/io/ObjectInputStream;)V(Unknown
Source)

java/io/ObjectStreamClass.invokeReadObject(Ljava/lang/Object;Ljava/io/ObjectInputStream;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject()Ljava/lang/Object;(Unknown
Source)

java/util/HashMap.readObject(Ljava/io/ObjectInputStream;)V(Unknown
Source)

java/lang/LangAccessImpl.readObject(Ljava/lang/Class;Ljava/lang/Object;Ljava/io/ObjectInputStream;)V(Unknown
Source)

java/io/ObjectStreamClass.invokeReadObject(Ljava/lang/Object;Ljava/io/ObjectInputStream;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V(Unknown
Source)

java/io/ObjectInputStream.readOrdinaryObject(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject0(Z)Ljava/lang/Object;(Unknown
Source)

java/io/ObjectInputStream.readObject()Ljava/lang/Object;(Unknown
Source)

services/InfrastructureClient.callProxy()Lservices/Response;(InfrastructureClient.java:261)

services/InfrastructureClient.dispatchCall(I)Lservices/Response;(InfrastructureClient.java:120)

services/InfrastructureClient.callSynch()Lservices/Response;(InfrastructureClient.java:61)

services/ServiceCache.getServiceAddresses(Lservices/ServiceAddress;Ljava/lang/String;)[Lservices/ServiceAddress;(ServiceCache.java:86)
    ^-- Holding lock: java/util/HashMap@c02450[thin
lock]

services/Util.getServiceFromDirectory(Lservices/ServiceAddress;Ljava/lang/String;Lservices/logger/Logger;)[Lservices/ServiceAddress;(Util.java:105)

services/test/TEST3.doIt(Ljava/net/URL;Lservices/ThreadedService;Lservices/ServiceAddress;Lservices/logger/MessageLogger;ZZI)V(TEST3.java:74)

services/test/TEST3.main([Ljava/lang/String;)V(TEST3.java:50)
}

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

===========================================================================
To unsubscribe, send email to [email protected] and include in the body
of the message "signoff RMI-USERS".  For general help, send email to
[email protected] and include in the body of the message "help".

For a list of frequently asked RMI questions please refer to:
http://java.sun.com/j2se/1.3/docs/guide/rmi/faq.html

To view past RMI-USERS postings, please see:
http://archives.java.sun.com/archives/rmi-users.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.