Daniel, I've been trying to do some comparisons, as I promised, and I believe I'm missing something.
I was testing the interoperability, and when I tried to use an "Intel" RMI client against an "ITC" server, it failed, although it worked against a "Sun" server. Changing client and server produces the same result. Here're the stack traces I get, the test code and the config. Any idea, what I'm doing wrong? Vasily Zakharov Intel Middleware Products Division Stack trace 1 ("ITC" client, "Sun" or "Intel" server): java.rmi.ConnectIOException: I/O exception Creating Connection; nested exception is: java.rmi.MarshalException: Exception marshaling JRMP Header; nested exception is: java.rmi.UnmarshalException: Exception reading the Header response; nested exception is: java.io.EOFException at ar.org.fitc.rmi.transport.ConnectionPool.getClientConnection(Unknown Source) at ar.org.fitc.rmi.transport.TransportManager.invoke(Unknown Source) at ar.org.fitc.rmi.server.UnicastRemoteRefImpl.invoke(Unknown Source) at ar.org.fitc.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) at Client.main(Client.java:14) Caused by: java.rmi.MarshalException: Exception marshaling JRMP Header; nested exception is: java.rmi.UnmarshalException: Exception reading the Header response; nested exception is: java.io.EOFException at ar.org.fitc.rmi.transport.StreamClientConnection.handshake(Unknown Source) at ar.org.fitc.rmi.transport.StreamClientConnection.establishConnection(Unk nown Source) ... 5 more Caused by: java.rmi.UnmarshalException: Exception reading the Header response; nested exception is: java.io.EOFException at ar.org.fitc.rmi.transport.jrmp.ClientProtocolHandler.readHandshakeRespon se(Unknown Source) ... 7 more Caused by: java.io.EOFException at java.io.DataInputStream.readByte(Unknown Source) ... 8 more Stack trace 2 ("Intel" client, "ITC" server): java.rmi.ConnectIOException: Unable to acknowledge protocol with server; nested exception is: java.io.EOFException at org.apache.harmony.rmi.transport.tcp.TcpConnection.serverProtocolAck(Tcp Connection.java:145) at org.apache.harmony.rmi.client.ClientConnection.<init>(ClientConnection.j ava:90) at org.apache.harmony.rmi.transport.tcp.TcpConnection.<init>(TcpConnection. java:73) at org.apache.harmony.rmi.client.ClientConnectionManager.getConnection(Clie ntConnectionManager.java:107) at org.apache.harmony.rmi.remoteref.UnicastRef.newCall(UnicastRef.java:226) at org.apache.harmony.rmi.remoteref.UnicastRef.invoke(UnicastRef.java:127) at org.apache.harmony.rmi.registry.RegistryImpl_Stub.lookup(RegistryImpl_St ub.java:134) at Client.main(Client.java:14) Caused by: java.io.EOFException at java.io.DataInputStream.readByte(Unknown Source) at org.apache.harmony.rmi.transport.tcp.TcpConnection.serverProtocolAck(Tcp Connection.java:112) ... 7 more Server.java: import java.rmi.Remote; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; interface TestRemoteInterface extends Remote { public String test() throws RemoteException; } class TestRemoteObject implements TestRemoteInterface { public String test() throws RemoteException { System.out.println("TestRemoteObject.test() run"); return "SUCCESS"; } } public class Server { public static void main(String[] args) { TestRemoteObject obj = null; try { System.out.println("Setting security manager"); System.setSecurityManager(new RMISecurityManager()); System.err.println("Creating registry"); Registry registry = LocateRegistry.createRegistry(1099); System.out.println("Creating remote object"); obj = new TestRemoteObject(); System.out.println("Exporting remote object"); UnicastRemoteObject.exportObject(obj, 5555); System.out.println("Binding object to registry"); registry.rebind("TestRemoteObject", obj); System.out.println("Sleeping 10 seconds"); Thread.sleep(10000); } catch (Throwable e) { e.printStackTrace(); System.err.println("ERROR"); } finally { if (obj != null) { System.out.println("Unexporting remote object"); try { if (UnicastRemoteObject.unexportObject(obj, false)) { System.out.println("Unexport FALSE"); } else { if (UnicastRemoteObject.unexportObject(obj, true)) { System.out.println("Unexport TRUE"); } else { System.out.println("Unexport FAILED"); System.err.println("ERROR"); System.exit(-1); } } } catch (Throwable e) { e.printStackTrace(); System.err.println("ERROR"); System.exit(-1); } } } } } Client.java: import java.rmi.RMISecurityManager; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; public class Client { public static void main(String[] args) { try { System.out.println("Setting security manager"); System.setSecurityManager(new RMISecurityManager()); System.err.println("Locating registry"); Registry registry = LocateRegistry.getRegistry(); System.err.println("Looking for object"); TestRemoteInterface obj = (TestRemoteInterface) registry.lookup("TestRemoteObject"); System.err.println("Object found: " + obj); System.err.println("Calling method"); Object ret = obj.test(); System.err.println("Object returned: " + ret); System.err.println("SUCCESS"); } catch (Throwable e) { e.printStackTrace(); System.err.println("FAIL"); } } } all.policy: grant{ permission java.security.AllPermission; }; -----Original Message----- From: Daniel Gandara [mailto:[EMAIL PROTECTED] Sent: Monday, April 17, 2006 7:38 PM To: harmony-dev@incubator.apache.org Subject: [rmi] package comparison (was Re: Contribution of RMI framework) Vasily, a couple of things about package comparison: a) java 5.0 vs 1.4.2 Our rmi package was developed according to 5.0 rmi spec, and it takes full advantage of 5.0 new features (like java.util.concurrent) Since Harmony classlib and VMs are still in 1.4.2 we deployed a 1.4.2 version of our package in which we removed the 5.0 dependencies. There is obviously a performance penalty paid by the 1.4.2 release of the package. You can find both versions of the packages at http://issues.apache.org/jira/browse/HARMONY-211 b) compatibility with reference implementation within our contribution you will find a complete set of test cases (source code and documentation for each). We run these test cases against our package before contributing it, so I guess one way to move further is to cross run test cases (you run ours and we run yours). What do you think? c) performance analysis and comparison I believe the first step here is to get along about which is the workload or set of applications that represent a "real" use of rmi package. I see a big challenge here... I'll wait for your comments, Daniel ----- Original Message ----- From: "Zakharov, Vasily M" <[EMAIL PROTECTED]> To: <harmony-dev@incubator.apache.org> Sent: Friday, April 14, 2006 1:17 PM Subject: RE: Contribution of RMI framework Hi, Mikhail, Regretfully, the method-to-method comparison would hardly be effective with RMI, as it's a highly integrated component. 80% of implementation is hidden in non-public API, and some components (e. g. RMIC) have no public API at all. So it's hard to plug just one public method from one implementation to another without modifying non-public code - and non-public code could have (and probably does have) very different structure in different implementations. What we really can do is try to run both these implementations and compare them for conformance to the specification, compatibility with reference implementation, maybe stability, performance, visual code quality etc. I'm now planning to do some of these, so we'd get some results pretty soon. Vasily -----Original Message----- From: Mikhail Loenko [mailto:[EMAIL PROTECTED] Sent: Friday, April 14, 2006 7:53 AM To: harmony-dev@incubator.apache.org Subject: Re: Contribution of RMI framework I think we need compare contributions method by method to assemble the best classlib Thanks, Mikhail 2006/4/14, Daniel Gandara <[EMAIL PROTECTED]>: > Vasily, > good to know that there is someone out there who has also > been working on rmi; I believe we'll have a lot to share and discuss > about it. > > Thanks, > > Daniel > > ----- Original Message ----- > From: "Zakharov, Vasily M" <[EMAIL PROTECTED]> > To: <harmony-dev@incubator.apache.org> > Sent: Wednesday, April 12, 2006 9:53 PM > Subject: Contribution of RMI framework > > > Hi, all, > > I would like to announce the next code contribution to Harmony project > on > behalf of Intel corporation. This contribution contains the > implementation > of RMI framework. > > The archive with this contribution can be found at: > > http://issues.apache.org/jira/browse/HARMONY-337 > > The Remote Method Invocation (RMI) framework enables an object in one > virtual machine to call methods of an object in another one, to create > applications distributed on various Java virtual machines on the same > or different hosts. > > For more information please see the documentation contained in the > bundle. > > The code is a result of efforts of Intel Middleware Product Division > team. > One should be able to run this code with a 1.4+ compatible JRE/VM (was > tested using commercial VMs). No classes require special support from > the VM. > All code is pure Java. The implementation is done according to Java 1.4 > specification of RMI. > > The archive contains the README file that explains the building and > running > process for this code. If any additional comments or clarifications are > needed, feel free to contact me. I will be happy to answer all questions > about this contribution and to participate in its further > development/maintenance and integration into Harmony. > > Vasily Zakharov > Intel Middleware Product Division > --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]