Hi Gregg,

Sorry I missed this earlier, have a look at my latest messages, they might provide some more background to my thoughts.

Mike Warres has a good example of when the existing mechanism causes codebase annotation loss and type conflicts on page 23 of his paper "Class Loading Issues in Java RMI and Jini Network Technology".

https://issues.apache.org/jira/secure/attachment/12413650/Java+Classloader+issues+relating+to+Jini+smli_tr-2006-149.pdf

Because the Service API is loaded from the local file system and isn't dynamically downloaded, it may not have an annotation, I'm thinking about creating a new URL scheme, that provides information about all Jar files, whether local or downloaded dynamically, such as jar name and version annotation. This should help people who wish to provision their codebases.

Note I haven't had any thoughts about removing PreferredClassProvider, but I'm thinking about another ClassLoader structure, although I'm prone to changing my mind as I struggle to understand it all. I haven't got any implementations, yet, still working it all out.

Gregg Wonderly wrote:
I have a Jini based application that is a content based router system for satellite networks. There are multiple servers running with comms cards, and the ServiceUI needs to see all of them at once, because I use transactions to commit data changes to all servers. In this case, one clients ServiceUI must lookup all of the services, ignoring itself, and then get the service proxies to work with. All of the services proxies need to share interfaces and data classes that are commonly exchanged.

I didn't need a different kind of classloader tree, I just needed to make sure that the parent class loader of the RMIClassLoaderSPI was the ClassLoader of the client (The context ClassLoader which is a PreferredClassLoader), which was already happening. All the other service instance unmarshalling would in fact make use of the PreferredClassLoader, so that versioning could be done by preferring classes, for example, and each services preferred classes would be honored.

There is only one -dl.jar involved in the commonality aspects of the involved Classes. I could break the common classes into a separate jar, but I have not done that, yet.

This type of application must be restarted fairly rarely, so class compatibility is a very key issue.

Peter, can you provide a more specific example of when you think the structure you are proposing would be valuable, i.e. the existing mechanism would break?

Gregg Wonderly


Reply via email to