You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2006/03/30 08:17:33 UTC
svn commit: r390003 - in
/geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel:
config/Configuration.java repository/DefaultArtifactResolver.java
Author: dain
Date: Wed Mar 29 22:17:30 2006
New Revision: 390003
URL: http://svn.apache.org/viewcvs?rev=390003&view=rev
Log:
Configuration class loader now created with inverse class loader, hidden clases and non-overrideable classes specified.
Modified:
geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java
geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/DefaultArtifactResolver.java
Modified: geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java?rev=390003&r1=390002&r2=390003&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java (original)
+++ geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java Wed Mar 29 22:17:30 2006
@@ -258,39 +258,14 @@
}
//
- // Propagate non-overridable classes from class parents
- //
- for (Iterator iterator = classParents.iterator(); iterator.hasNext();) {
- Configuration parent = (Configuration) iterator.next();
-
- Environment parentEnvironment = parent.getEnvironment();
- Set nonOverridableClasses = parentEnvironment.getNonOverrideableClasses();
- environment.addNonOverrideableClasses(nonOverridableClasses);
- }
-
- //
// Build the configuration class loader
//
- URL[] urls = buildClassPath(classPath);
- log.debug("ClassPath for " + id + " resolved to " + Arrays.asList(urls));
- if (parents.size() == 0 && classParents.size() == 0) {
- // no explicit parent set, so use the class loader of this class as
- // the parent... this class should be in the root geronimo classloader,
- // which is normally the system class loader but not always, so be safe
- configurationClassLoader = new MultiParentClassLoader(environment.getConfigId(), urls, getClass().getClassLoader());
- } else {
- ClassLoader[] parentClassLoaders = new ClassLoader[classParents.size()];
- for (ListIterator iterator = classParents.listIterator(); iterator.hasNext();) {
- Configuration configuration = (Configuration) iterator.next();
- parentClassLoaders[iterator.previousIndex()] = configuration.getConfigurationClassLoader();
- }
- configurationClassLoader = new MultiParentClassLoader(environment.getConfigId(), urls, parentClassLoaders);
- }
+ configurationClassLoader = createConfigurationClasssLoader(parents, environment, classPath);
//
// Get all service parents in depth first order
//
- getDepthFirstServiceParents(this, allServiceParents);
+ addDepthFirstServiceParents(this, allServiceParents);
//
// Deserialize the GBeans
@@ -321,11 +296,54 @@
}
}
- private void getDepthFirstServiceParents(Configuration configuration, List ancestors) {
+ private MultiParentClassLoader createConfigurationClasssLoader(Collection parents, Environment environment, List classPath) throws MalformedURLException, MissingDependencyException, NoSuchConfigException {
+ // create the URL list
+ URL[] urls = buildClassPath(classPath);
+
+ // parents
+ ClassLoader[] parentClassLoaders;
+ if (parents.size() == 0 && classParents.size() == 0) {
+ // no explicit parent set, so use the class loader of this class as
+ // the parent... this class should be in the root geronimo classloader,
+ // which is normally the system class loader but not always, so be safe
+ parentClassLoaders = new ClassLoader[] {getClass().getClassLoader()};
+ } else {
+ parentClassLoaders = new ClassLoader[classParents.size()];
+ for (ListIterator iterator = classParents.listIterator(); iterator.hasNext();) {
+ Configuration configuration = (Configuration) iterator.next();
+ parentClassLoaders[iterator.previousIndex()] = configuration.getConfigurationClassLoader();
+ }
+ }
+
+ // hidden classes
+ Set hiddenClassesSet = environment.getHiddenClasses();
+ String[] hiddenClasses = (String[]) hiddenClassesSet.toArray(new String[hiddenClassesSet.size()]);
+
+ // we need to propagate the non-overrideable classes from parents
+ LinkedHashSet nonOverridableSet = new LinkedHashSet();
+ for (Iterator iterator = classParents.iterator(); iterator.hasNext();) {
+ Configuration parent = (Configuration) iterator.next();
+
+ Environment parentEnvironment = parent.getEnvironment();
+ nonOverridableSet.addAll(parentEnvironment.getNonOverrideableClasses());
+ }
+ String[] nonOverridableClasses = (String[]) nonOverridableSet.toArray(new String[nonOverridableSet.size()]);
+
+ log.debug("ClassPath for " + id + " resolved to " + Arrays.asList(urls));
+
+ return new MultiParentClassLoader(environment.getConfigId(),
+ urls,
+ parentClassLoaders,
+ environment.isInverseClassLoading(),
+ hiddenClasses,
+ nonOverridableClasses);
+ }
+
+ private void addDepthFirstServiceParents(Configuration configuration, List ancestors) {
ancestors.add(configuration);
for (Iterator parents = configuration.getServiceParents().iterator(); parents.hasNext();) {
Configuration parent = (Configuration) parents.next();
- getDepthFirstServiceParents(parent, ancestors);
+ addDepthFirstServiceParents(parent, ancestors);
}
}
Modified: geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/DefaultArtifactResolver.java?rev=390003&r1=390002&r2=390003&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/DefaultArtifactResolver.java (original)
+++ geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/kernel/repository/DefaultArtifactResolver.java Wed Mar 29 22:17:30 2006
@@ -132,6 +132,11 @@
for (Iterator iterator = parentConfigurations.iterator(); iterator.hasNext();) {
Configuration configuration = (Configuration) iterator.next();
+ // check if this parent matches the groupId, artifactId, and type
+ if (matches(configuration.getId(), groupId, artifactId, type)) {
+ return configuration.getId().getVersion();
+ }
+
Environment environment = configuration.getEnvironment();
if (environment.isInverseClassLoading()) {
// Search dependencies of the configuration before searching the parents
@@ -166,13 +171,17 @@
private Version getArtifactVersion(Collection artifacts, String groupId, String artifactId, String type) {
for (Iterator iterator = artifacts.iterator(); iterator.hasNext();) {
Artifact artifact = (Artifact) iterator.next();
- if (groupId.equals(artifact.getGroupId()) &&
- artifactId.equals(artifact.getArtifactId()) &&
- type.equals(artifact.getType())) {
+ if (matches(artifact, groupId, artifactId, type)) {
return artifact.getVersion();
}
}
return null;
+ }
+
+ private boolean matches(Artifact artifact, String groupId, String artifactId, String type) {
+ return groupId.equals(artifact.getGroupId()) &&
+ artifactId.equals(artifact.getArtifactId()) &&
+ type.equals(artifact.getType());
}
public static final GBeanInfo GBEAN_INFO;