You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/05/19 18:00:42 UTC
svn commit: r407834 - in
/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon:
components/classloader/ core/container/spring/
Author: cziegeler
Date: Fri May 19 09:00:40 2006
New Revision: 407834
URL: http://svn.apache.org/viewvc?rev=407834&view=rev
Log:
ClassLoaderFactory depends only on servlet api
Added:
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderUtils.java (with props)
Modified:
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/AbstractClassLoaderFactory.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderConfiguration.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderFactory.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoader.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoaderFactory.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoader.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoaderFactory.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryFactoryImpl.java
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/AbstractClassLoaderFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/AbstractClassLoaderFactory.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/AbstractClassLoaderFactory.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/AbstractClassLoaderFactory.java Fri May 19 09:00:40 2006
@@ -27,17 +27,6 @@
import javax.servlet.ServletContext;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.Serviceable;
-import org.apache.avalon.framework.thread.ThreadSafe;
-import org.apache.excalibur.source.Source;
-import org.apache.excalibur.source.SourceResolver;
-import org.apache.excalibur.source.TraversableSource;
-
/**
* Abstract implementation of {@link ClassLoaderFactory}. It accepts both class directory and jar
* directory configurations.
@@ -55,109 +44,11 @@
* <exclude-classes pattern="org.apache.cocoon.transformation.**"/>
* &/lt;classpath>
* </pre>
+ * @version $Id$
+ * @since 2.2
*/
public abstract class AbstractClassLoaderFactory
- implements ClassLoaderFactory,
- Serviceable,
- ThreadSafe,
- Disposable {
-
- protected ServiceManager manager;
- protected SourceResolver resolver;
-
- /**
- * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
- */
- public void service(ServiceManager manager) throws ServiceException {
- this.manager = manager;
- this.resolver = (SourceResolver)manager.lookup(SourceResolver.ROLE);
- }
-
- private void ensureIsDirectory(Source src) throws Exception {
- if (!src.exists()) {
- throw new Exception(src.getURI() + " doesn't exist");
- } else if (!(src instanceof TraversableSource) || !((TraversableSource)src).isCollection()) {
- throw new Exception(src.getURI() + " is not a directory");
- }
- }
-
- /**
- * @see org.apache.cocoon.components.classloader.ClassLoaderFactory#createClassLoader(java.lang.ClassLoader, org.apache.avalon.framework.configuration.Configuration)
- */
- public ClassLoader createClassLoader(ClassLoader parent, Configuration config)
- throws ConfigurationException {
- final ClassLoaderConfiguration configBean = new ClassLoaderConfiguration();
- final Configuration[] children = config.getChildren();
- for (int i = 0; i < children.length; i++) {
- final Configuration child = children[i];
- final String name = child.getName();
- if ("class-dir".equals(name)) {
- configBean.addClassDirectory(child.getAttribute("src"));
- } else if ("lib-dir".equals(name)) {
- configBean.addLibDirectory(child.getAttribute("src"));
- } else if ("include-classes".equals(name)) {
- configBean.addInclude(child.getAttribute("pattern"));
- } else if ("exclude-classes".equals(name)) {
- configBean.addExclude(child.getAttribute("pattern"));
- } else {
- throw new ConfigurationException("Unexpected element " + name + " at " + child.getLocation());
- }
- }
- try {
- return this.createClassLoader(parent, configBean);
- } catch(ConfigurationException ce) {
- throw ce;
- } catch(Exception e) {
- throw new ConfigurationException("Error creating class loader.", e);
- }
- }
-
- protected ClassLoader createClassLoader(ClassLoader parent, ClassLoaderConfiguration config)
- throws Exception {
- final List urlList = new ArrayList();
- Iterator i;
- // process class directories
- i = config.getClassDirectories().iterator();
- while ( i.hasNext() ) {
- // A class dir: simply add its URL
- final String directory = (String)i.next();
- Source src = null;
- try {
- src = resolver.resolveURI(directory);
- ensureIsDirectory(src);
- urlList.add(new URL(src.getURI()));
- } finally {
- this.resolver.release(src);
- }
- }
-
- // process lib directories
- i = config.getLibDirectories().iterator();
- while ( i.hasNext() ) {
- // A lib dir: scan for all jar and zip it contains
- final String directory = (String)i.next();
- Source src = null;
- try {
- src = resolver.resolveURI(directory);
- ensureIsDirectory(src);
- Iterator iter = ((TraversableSource)src).getChildren().iterator();
- while (iter.hasNext()) {
- Source childSrc = (Source)iter.next();
- String childURI = childSrc.getURI();
- resolver.release(childSrc);
- if (childURI.endsWith(".jar") || childURI.endsWith(".zip")) {
- urlList.add(new URL(childURI));
- }
- }
- } finally {
- this.resolver.release(src);
- }
- }
-
- URL[] urls = (URL[])urlList.toArray(new URL[urlList.size()]);
-
- return this.createClassLoader(urls, config.getIncludes(), config.getExcludes(), parent);
- }
+ implements ClassLoaderFactory {
protected URL getUrl(ServletContext servletContext, String rootPath, String path)
throws MalformedURLException {
@@ -193,10 +84,10 @@
return rootPath + path;
}
- protected ClassLoader createClassLoader(ClassLoader parent,
- ClassLoaderConfiguration config,
- ServletContext servletContext,
- String rootPath)
+ public ClassLoader createClassLoader(ClassLoader parent,
+ ClassLoaderConfiguration config,
+ ServletContext servletContext,
+ String rootPath)
throws Exception {
if ( rootPath == null ) {
rootPath = "/";
@@ -267,14 +158,4 @@
}
}
- /**
- * @see org.apache.avalon.framework.activity.Disposable#dispose()
- */
- public void dispose() {
- if ( this.manager != null ) {
- this.manager.release(this.resolver);
- this.resolver = null;
- this.manager = null;
- }
- }
}
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderConfiguration.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderConfiguration.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderConfiguration.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderConfiguration.java Fri May 19 09:00:40 2006
@@ -22,6 +22,7 @@
/**
* The configuration for a {@link ClassLoaderFactory}.
* @version $Id$
+ * @since 2.2
*/
public class ClassLoaderConfiguration {
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderFactory.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderFactory.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderFactory.java Fri May 19 09:00:40 2006
@@ -16,18 +16,22 @@
*/
package org.apache.cocoon.components.classloader;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
+import javax.servlet.ServletContext;
/**
* A <code>ClassLoader</code> factory, setting up the classpath given a
* <classpath> configuration.
*
* @version $Id$
+ * @since 2.2
*/
public interface ClassLoaderFactory {
final static String ROLE = ClassLoaderFactory.class.getName();
-
- ClassLoader createClassLoader(ClassLoader parent, Configuration config) throws ConfigurationException;
+
+ ClassLoader createClassLoader(ClassLoader parent,
+ ClassLoaderConfiguration config,
+ ServletContext servletContext,
+ String rootPath)
+ throws Exception;
}
Added: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderUtils.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderUtils.java?rev=407834&view=auto
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderUtils.java (added)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderUtils.java Fri May 19 09:00:40 2006
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.components.classloader;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+
+/**
+ * Utility class for converting Avalon based Configuration into a {@link ClassLoaderConfiguration}.
+ * @version $Id$
+ * @since 2.2
+ */
+public abstract class ClassLoaderUtils {
+
+ public static ClassLoaderConfiguration createConfiguration(Configuration config)
+ throws ConfigurationException {
+ final ClassLoaderConfiguration configBean = new ClassLoaderConfiguration();
+ final Configuration[] children = config.getChildren();
+ for (int i = 0; i < children.length; i++) {
+ final Configuration child = children[i];
+ final String name = child.getName();
+ if ("class-dir".equals(name)) {
+ configBean.addClassDirectory(child.getAttribute("src"));
+ } else if ("lib-dir".equals(name)) {
+ configBean.addLibDirectory(child.getAttribute("src"));
+ } else if ("include-classes".equals(name)) {
+ configBean.addInclude(child.getAttribute("pattern"));
+ } else if ("exclude-classes".equals(name)) {
+ configBean.addExclude(child.getAttribute("pattern"));
+ } else {
+ throw new ConfigurationException("Unexpected element " + name + " at " + child.getLocation());
+ }
+ }
+ return configBean;
+ }
+}
Propchange: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ClassLoaderUtils.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoader.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoader.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoader.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoader.java Fri May 19 09:00:40 2006
@@ -30,6 +30,7 @@
* before it checks its parent. In addition it can be configured with includes and excludes.
*
* @version $Id$
+ * @since 2.2
*/
public class DefaultClassLoader extends URLClassLoader {
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoaderFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoaderFactory.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoaderFactory.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/DefaultClassLoaderFactory.java Fri May 19 09:00:40 2006
@@ -22,6 +22,7 @@
/**
* @see AbstractClassLoaderFactory
* @version $Id$
+ * @since 2.2
*/
public class DefaultClassLoaderFactory
extends AbstractClassLoaderFactory {
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoader.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoader.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoader.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoader.java Fri May 19 09:00:40 2006
@@ -24,6 +24,7 @@
/**
* @version $Id$
+ * @since 2.2
*/
public class ReloadingClassLoader extends DefaultClassLoader {
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoaderFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoaderFactory.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoaderFactory.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/components/classloader/ReloadingClassLoaderFactory.java Fri May 19 09:00:40 2006
@@ -22,6 +22,7 @@
/**
* @see AbstractClassLoaderFactory
* @version $Id$
+ * @since 2.2
*/
public class ReloadingClassLoaderFactory extends AbstractClassLoaderFactory {
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryFactoryImpl.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryFactoryImpl.java?rev=407834&r1=407833&r2=407834&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryFactoryImpl.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/BeanFactoryFactoryImpl.java Fri May 19 09:00:40 2006
@@ -20,7 +20,9 @@
import org.apache.avalon.framework.logger.Logger;
import org.apache.cocoon.ProcessingUtil;
import org.apache.cocoon.components.ContextHelper;
+import org.apache.cocoon.components.classloader.ClassLoaderConfiguration;
import org.apache.cocoon.components.classloader.ClassLoaderFactory;
+import org.apache.cocoon.components.classloader.ClassLoaderUtils;
import org.apache.cocoon.core.Settings;
import org.apache.cocoon.environment.Request;
import org.apache.excalibur.source.SourceResolver;
@@ -48,7 +50,7 @@
}
public ClassLoader createClassLoader(Context sitemapContext,
- Configuration config)
+ Configuration config)
throws Exception {
// we don't create a new class loader if there is no new configuration
if ( config == null ) {
@@ -60,9 +62,12 @@
ClassLoaderFactory.ROLE);
// Create a new classloader
+ ClassLoaderConfiguration configBean = ClassLoaderUtils.createConfiguration(config);
ClassLoaderFactory clFactory = (ClassLoaderFactory)parentFactory.getBean(factoryRole);
return clFactory.createClassLoader(Thread.currentThread().getContextClassLoader(),
- config);
+ configBean,
+ null,
+ null);
}
/**