On 08/04/2009, at 5:10 PM, David Jencks wrote:


On Apr 7, 2009, at 1:46 AM, Gianny Damour wrote:

On 07/04/2009, at 4:00 AM, David Jencks wrote:


There are two things that worry me about this.

1. IIUC whenever you include a jar in a configuration all the configuration's parents get added as parents to the jar's global classloader, in this code in MultiParentClassLoader2:

protected void addParents(Set<GlobalClassLoader> globalClassLoaders) { for (GlobalClassLoader globalClassLoader : globalClassLoaders) {
           for (ClassLoader parent : parents) {
               globalClassLoader.addParent(parent);
           }
       }
   }

I don't think this is acceptable. I think that once we have a GlobalClassloader set up for a jar it needs to be immutable. With your code which jar a class is loaded from could depend on which configurations are started when you try to load the class.

I agree and this was one of my concerns; though it can be addressed. The problem is that the dependencies defined by a given config may not be complete.

Let's assume:
* config A imports dependency D1, D4;
* config B imports dependency D2 and D3;
* config B is a child of config A; and
* D1 and D3 are declared as maven dependencies for D2.

The current implementation builds a partial tree of GlobalClassLoaders based on the dependencies defined by a given config. This means that in the above scenario when config B is started only GlobalClassLoaders for D2 and D3 are put at the right place according to their maven dependencies, i.e. D3 is a parent of D2. D1 is artificially put as a parent of D2 by adding config A's classloader to D2.

A better implementation would be to add the relevant GlobalClassLoaders defined by parent configurations, in our example D1, to the GlobalClassLoaders used by a given config, in our example D2.

I can fix this problem.


I'm sure I haven't thought this through completely but I really wonder if adding parents to the global classloaders is necessary. If we ignore geronimo plugins based on javaee apps for a moment, geronimo plugins won't have any classes in them, and jars will have maven dependencies on the appropriate other jars anyway. So I think that in the normal case adding these parents won't add any missing classes. Constructing a classloader for a javaee app that can be used as a parent of some other classloader is a geronimo specific feature anyway not supported by maven so I think it would be OK to just have people include such dependencies in the <baseURL>-additional.xml (or the pom, possibly).

If we drop this add-parents behavior we might need to add classloading rules to the global classloaders and either specify it directly or push it down from a plugin config. Again I haven't thought this through.

I think that classloading rules are only going to be useful to isolate javaee apps. I think this is going to be OK as classloading rules were introduced to better isolate javaee apps from their runtime container.


2. IIUC the <baseURL>-additional.xml only lets you add to the maven pom. I think we need to be able to delete stuff too.

I can add this functionality.

Assuming that the above is fixed by mid-next week, do you think that current classloading problems would be resolved? Or do you think that re-platforming to an OSGi approach will provide a better mileage?

I'm being led into more extensive changes, I hope to have something working tomorrow or the next day. I think this will be a good and illuminating step towards osgi and that most likely releasing 2.2 with this system will be a good idea before attempting more extensive osgi integration.

Based on this fact, it appears to me as useless to continue further down the road I explored.

I do still believe that simplifying the configuration model is more important than OSGi integration. Making IoC simpler (e.g. no need to declare or annotate injected attributes or references), more flexible (e.g. use of service factory) and to the point (i.e. less verbose) is hopefully part of the extensive changes. Re-using Apache Felix iPOJO would be good.

Thanks,
Gianny


thanks
david jencks


Thanks,
Gianny


As a probably easy-to-fix bug I think that we currently decide if something is a jar or a plugin in MavenDependencyResolver by whether there is exactly one URL for the artifact. However a geronimo plugin with classes inside -- say an ejb jar -- could have exactly one url but not be a jar.

These are just my first impressions, I'll keep looking.

thanks!
david jencks



Reply via email to