Transparent RMI (or TRMI) sits on top of RMI [RemoteMethodInvocation], and allows any interface to be used remotely (i.e. not just those that extend Remote). Methods don't need to throw RemoteException - disconnections and so on can be handled within the stub.
It uses the Proxy mechanism to wrap existing interfaces, and delegate the calls to the remote, actual implementation. The end result is that remote calls become transparent within the application - you don't need to differentiate between local and remote objects.
Some external links:
http://www.javaworld.com/javaworld/jw-08-2002/jw-0809-trmi.html - A JavaWorld article on the idea.
http://trmi.sourceforge.net/ - The homepage on SourceForge.
-- GuyGurAri
Quite useful, I've been finding... There are a couple of rough edges that I've run into:
- the matching of exported and implemented interfaces was broken: would only match the first implemented interface against the exported interfaces, and would ignore interfaces implemented through superclasses (easily fixed, replaced a block of code with an aClass.isInstance(anObject) call)
- the automatic wrapping of parameters could be a little more aggressive: I tend to make most of my engine classes serializable for the sake of saving state, not for distribution (easily fixed as well, reordering the checks in the stub implementation)
- the default error handling masks any exception coming from a remote object: the stub quietly retries until you kill the process, no visible output or anything (again... easily fixed, wrap the exception in a RuntimeException and rethrow by default)
But all in all, a useful package. You have no idea how nice it is to not mess around with catching R
emoteException all over the place, or dealing with multiple branches of the same basic interfaces, or custom stubs.
GuyGurAri, if you want to see any of my changes, just give me a shout (my contact info's on my page here).
-- WilliamUnderwood