You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2010/07/01 15:46:10 UTC
svn commit: r959660 - in /incubator/lcf/trunk/modules/framework:
agents/org/apache/lcf/agents/interfaces/ core/org/apache/lcf/core/common/
core/org/apache/lcf/core/interfaces/ core/org/apache/lcf/core/system/
pull-agent/org/apache/lcf/authorities/inter...
Author: kwright
Date: Thu Jul 1 13:46:10 2010
New Revision: 959660
URL: http://svn.apache.org/viewvc?rev=959660&view=rev
Log:
Add a class loader specific to LCF, which is initialized with information gleaned from the configuration file. The configuration file is now XML, and defaults to properties.xml rather than properties.ini.
Added:
incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/common/LCFResourceLoader.java (with props)
Modified:
incubator/lcf/trunk/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java
incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/interfaces/ConfigParams.java
incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/system/LCF.java
incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/authorities/interfaces/AuthorityConnectorFactory.java
incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/crawler/interfaces/RepositoryConnectorFactory.java
incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/agents/tests/TestBase.java
incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/core/tests/TestBase.java
incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestBase.java
incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestConnectorBase.java
Modified: incubator/lcf/trunk/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java (original)
+++ incubator/lcf/trunk/modules/framework/agents/org/apache/lcf/agents/interfaces/OutputConnectorFactory.java Thu Jul 1 13:46:10 2010
@@ -19,6 +19,7 @@
package org.apache.lcf.agents.interfaces;
import org.apache.lcf.core.interfaces.*;
+import org.apache.lcf.agents.system.LCF;
import java.util.*;
import java.io.*;
@@ -129,7 +130,7 @@ public class OutputConnectorFactory
{
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -149,8 +150,7 @@ public class OutputConnectorFactory
}
catch (ClassNotFoundException e)
{
- throw new LCFException("No class implementing IOutputConnector called '"+
- className+"'.",
+ throw new LCFException("No output connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
@@ -199,7 +199,7 @@ public class OutputConnectorFactory
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -224,8 +224,7 @@ public class OutputConnectorFactory
if (connMgr.isInstalled(className) == false)
return null;
- throw new LCFException("No class implementing IOutputConnector called '"+
- className+"'.",
+ throw new LCFException("No output connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
@@ -552,7 +551,7 @@ public class OutputConnectorFactory
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -579,8 +578,7 @@ public class OutputConnectorFactory
if (connMgr.isInstalled(className) == false)
return null;
- throw new LCFException("No class implementing IOutputConnector called '"+
- className+"'.",
+ throw new LCFException("No output connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
Added: incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/common/LCFResourceLoader.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/common/LCFResourceLoader.java?rev=959660&view=auto
==============================================================================
--- incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/common/LCFResourceLoader.java (added)
+++ incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/common/LCFResourceLoader.java Thu Jul 1 13:46:10 2010
@@ -0,0 +1,206 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.lcf.core.common;
+
+import org.apache.lcf.core.interfaces.*;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.net.MalformedURLException;
+import java.util.*;
+import java.io.*;
+
+/** An instance of this class is capable of minting URLClassLoader objects on
+* demand, for the purpose of loading plugins.
+*/
+public class LCFResourceLoader
+{
+ public static final String _rcsid = "@(#)$Id$";
+
+ /** The current 'working directory' */
+ protected String instanceDir;
+ /** The parent class loader */
+ protected ClassLoader parent;
+ /** The class loader we're caching */
+ protected ClassLoader classLoader = null;
+ /** The current 'classpath' - a list of File objects */
+ protected ArrayList currentClasspath = new ArrayList();
+
+ /** Construct a resource manager.
+ *@param instanceDir is the current "working path" of the instance.
+ *@param parent is the parent class loader.
+ */
+ public LCFResourceLoader(String instanceDir, ClassLoader parent)
+ throws LCFException
+ {
+ this.instanceDir = makeLegalDir(instanceDir);
+ this.parent = parent;
+ }
+
+ /** Set the classpath to a given list of libdirs.
+ */
+ public synchronized void setClassPath(ArrayList libdirList)
+ throws LCFException
+ {
+ if (currentClasspath.size() > 0)
+ {
+ currentClasspath.clear();
+ classLoader = null;
+ }
+ int i = 0;
+ while (i < libdirList.size())
+ {
+ String path = (String)libdirList.get(i++);
+ addToClassPath(path,null);
+ }
+ }
+
+ /** Clear the class-search path.
+ */
+ public synchronized void clearClassPath()
+ {
+ if (currentClasspath.size() == 0)
+ return;
+ currentClasspath.clear();
+ classLoader = null;
+ }
+
+ /** Add to the class-search path.
+ *@param path is the path to a jar or class root, relative to the "working path" of this loader.
+ */
+ public synchronized void addToClassPath(String path)
+ throws LCFException
+ {
+ final File file = resolvePath(new File(instanceDir), path);
+ if (file.canRead())
+ {
+ addDirsToClassPath(new File[]{file.getParentFile()},
+ new FileFilter[]{new FileFilter() {
+ public boolean accept(final File pathname)
+ {
+ return pathname.equals(file);
+ }
+ } } );
+ }
+ else
+ throw new LCFException("Path '"+path+"' does not exist or is not readable");
+ }
+
+ /** Add to the class-search path.
+ *@param dir is the directory to add.
+ *@param filter is the file filter to use on that directory.
+ */
+ public synchronized void addToClassPath(String dir, FileFilter filter)
+ throws LCFException
+ {
+ File base = resolvePath(new File(instanceDir), dir);
+ addDirsToClassPath(new File[]{base}, new FileFilter[]{filter});
+ }
+
+ /** Get the specified class using the proper classloader.
+ *@param cname is the fully-qualified class name.
+ */
+ public synchronized Class findClass(String cname)
+ throws ClassNotFoundException,LCFException
+ {
+ if (classLoader == null)
+ {
+ // Mint a class loader on demand
+ if (currentClasspath.size() == 0)
+ classLoader = parent;
+ else
+ {
+ URL[] elements = new URL[currentClasspath.size()];
+
+ for (int j = 0; j < currentClasspath.size(); j++)
+ {
+ try
+ {
+ URL element = ((File)currentClasspath.get(j)).toURI().normalize().toURL();
+ elements[j] = element;
+ }
+ catch (MalformedURLException e)
+ {
+ // Should never happen, but...
+ throw new LCFException(e.getMessage(),e);
+ }
+ }
+ classLoader = URLClassLoader.newInstance(elements, parent);
+ }
+ }
+
+ // If we ever get this far, we have a classloader at least...
+ return Class.forName(cname,true,classLoader);
+ }
+
+ /** Add fully-resolved directories (with filters) to the current class path.
+ *@param baseList is the list of library directories.
+ *@param filterList is the corresponding list of filters.
+ */
+ protected void addDirsToClassPath(File[] baseList, FileFilter[] filterList)
+ throws LCFException
+ {
+ int i = 0;
+ while (i < baseList.length)
+ {
+ File base = baseList[i];
+ FileFilter filter;
+ if (filterList != null)
+ filter = filterList[i];
+ else
+ filter = null;
+
+ if (base.canRead() && base.isDirectory())
+ {
+ File[] files = base.listFiles(filter);
+
+ if (files != null && files.length > 0)
+ {
+ int j = 0;
+ while (j < files.length)
+ {
+ File file = files[j++];
+ currentClasspath.add(file);
+ // Invalidate the current classloader
+ classLoader = null;
+ }
+ }
+ }
+ else
+ throw new LCFException("Supposed directory '"+base.toString()+"' is either not readable, or is not a directory");
+ i++;
+ }
+ }
+
+
+ /** Ensures a path is always interpreted as a directory */
+ protected static String makeLegalDir(String path)
+ {
+ return (path != null && (!(path.endsWith("/") || path.endsWith("\\"))))?path+File.separator: path;
+ }
+
+ /** Resolve a path.
+ *@param base is the "working directory".
+ *@param path is the path, to be calculated relative to the base.
+ */
+ protected static File resolvePath(File base,String path)
+ {
+ File r = new File(path);
+ return r.isAbsolute() ? r : new File(base, path);
+ }
+
+}
\ No newline at end of file
Propchange: incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/common/LCFResourceLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/common/LCFResourceLoader.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/interfaces/ConfigParams.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/interfaces/ConfigParams.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/interfaces/ConfigParams.java (original)
+++ incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/interfaces/ConfigParams.java Thu Jul 1 13:46:10 2010
@@ -75,6 +75,15 @@ public class ConfigParams
fromXML(xml);
}
+ /** Construct from XML.
+ *@param xmlstream is the input XML stream. Does NOT close the stream.
+ */
+ public ConfigParams(InputStream xmlstream)
+ throws LCFException
+ {
+ fromXML(xmlstream);
+ }
+
/** Get as XML
*@return the xml corresponding to these ConfigParams.
*/
@@ -133,9 +142,25 @@ public class ConfigParams
public void fromXML(String xml)
throws LCFException
{
+ XMLDoc doc = new XMLDoc(xml);
+ initializeFromDoc(doc);
+ }
+
+ /** Read from an XML binary stream.
+ *@param xmlstream is the input XML stream. Does NOT close the stream.
+ */
+ public void fromXML(InputStream xmlstream)
+ throws LCFException
+ {
+ XMLDoc doc = new XMLDoc(xmlstream);
+ initializeFromDoc(doc);
+ }
+
+ protected void initializeFromDoc(XMLDoc doc)
+ throws LCFException
+ {
children.clear();
params.clear();
- XMLDoc doc = new XMLDoc(xml);
ArrayList list = new ArrayList();
doc.processPath(list, "*", null);
Modified: incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/system/LCF.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/system/LCF.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/system/LCF.java (original)
+++ incubator/lcf/trunk/modules/framework/core/org/apache/lcf/core/system/LCF.java Thu Jul 1 13:46:10 2010
@@ -19,6 +19,7 @@
package org.apache.lcf.core.system;
import org.apache.lcf.core.interfaces.*;
+import org.apache.lcf.core.common.LCFResourceLoader;
import java.io.*;
import java.util.*;
import java.security.MessageDigest;
@@ -27,7 +28,17 @@ public class LCF
{
public static final String _rcsid = "@(#)$Id$";
+ // Configuration XML node names and attribute names
+ public static final String NODE_PROPERTY = "property";
+ public static final String ATTRIBUTE_NAME = "name";
+ public static final String ATTRIBUTE_VALUE = "value";
+ public static final String NODE_LIBDIR = "libdir";
+ public static final String ATTRIBUTE_PATH = "path";
+ // Class loader
+ /** The object that manages LCF plugin class loading. This is initialized when the initialize method is called. */
+ protected static LCFResourceLoader resourceLoader = null;
+
// Shutdown hooks
/** Temporary file collector */
protected static FileTrack tracker = null;
@@ -67,8 +78,8 @@ public class LCF
protected static String masterDatabaseName = null;
protected static String masterDatabaseUsername = null;
protected static String masterDatabasePassword = null;
- protected static java.util.Properties localProperties = null;
- //protected static String configPath = null;
+ protected static ConfigParams localConfiguration = null;
+ protected static Map localProperties = null;
protected static long propertyFilelastMod = -1L;
protected static String propertyFilePath = null;
@@ -77,7 +88,7 @@ public class LCF
// System property names
public static final String lcfConfigFileProperty = "org.apache.lcf.configfile";
- // System property/property file property names
+ // System property/config file property names
// Database access properties
/** Database name property */
@@ -121,6 +132,9 @@ public class LCF
try
{
+ // Initialize resource loader
+ resourceLoader = new LCFResourceLoader(System.getProperty("user.dir"),Thread.currentThread().getContextClassLoader());
+
// Get system properties
java.util.Properties props = System.getProperties();
// First, look for a define that might indicate where to look
@@ -131,11 +145,12 @@ public class LCF
System.err.println("Couldn't find "+lcfConfigFileProperty+" property; using default");
String configPath = (String)props.get("user.home") + "/"+applicationName;
configPath = configPath.replace('\\', '/');
- propertyFilePath = new File(configPath,"properties.ini").toString();
+ propertyFilePath = new File(configPath,"properties.xml").toString();
}
- // Read .ini parameters
- localProperties = new java.util.Properties();
+ // Read configuration
+ localConfiguration = new ConfigParams();
+ localProperties = new HashMap();
checkProperties();
String logConfigFile = getProperty(logConfigFileProperty);
@@ -195,8 +210,8 @@ public class LCF
InputStream is = new FileInputStream(f);
try
{
- localProperties.load(is);
- System.err.println("Property file successfully read");
+ localConfiguration.fromXML(is);
+ System.err.println("Configuration file successfully read");
propertyFilelastMod = f.lastModified();
}
finally
@@ -205,12 +220,44 @@ public class LCF
}
}
else
- System.err.println("Property file not read because it didn't change");
+ {
+ System.err.println("Configuration file not read because it didn't change");
+ return;
+ }
}
catch (Exception e)
{
- throw new LCFException("Could not read property file '"+f.toString()+"'",e);
+ throw new LCFException("Could not read configuration file '"+f.toString()+"'",e);
+ }
+
+ // For convenience, post-process all "property" nodes so that we have a semblance of the earlier name/value pairs available, by default.
+ // e.g. <property name= value=/>
+ localProperties.clear();
+ ArrayList libDirs = new ArrayList();
+ int i = 0;
+ while (i < localConfiguration.getChildCount())
+ {
+ ConfigNode cn = localConfiguration.getChild(i++);
+ if (cn.getType().equals(NODE_PROPERTY))
+ {
+ String name = cn.getAttributeValue(ATTRIBUTE_NAME);
+ String value = cn.getAttributeValue(ATTRIBUTE_VALUE);
+ if (name == null)
+ throw new LCFException("Node type '"+NODE_PROPERTY+"' requires a '"+ATTRIBUTE_NAME+"' attribute");
+ localProperties.put(name,value);
+ }
+ else if (cn.getType().equals(NODE_LIBDIR))
+ {
+ String path = cn.getAttributeValue(ATTRIBUTE_PATH);
+ if (path == null)
+ throw new LCFException("Node type '"+NODE_LIBDIR+"' requires a '"+ATTRIBUTE_PATH+" attribute");
+ // What exactly should I do with this classpath information? The classloader can be dynamically updated, but if I do that will everything work?
+ // I'm going to presume the answer is "yes" for now...
+ libDirs.add(path);
+ }
}
+ // Apply libdirs to the resource loader.
+ resourceLoader.setClassPath(libDirs);
}
/** Read a property, either from the system properties, or from the local property file image.
@@ -221,7 +268,7 @@ public class LCF
{
String rval = System.getProperty(s);
if (rval == null)
- rval = localProperties.getProperty(s);
+ rval = (String)localProperties.get(s);
return rval;
}
@@ -998,6 +1045,16 @@ public class LCF
}
}
+
+ /** Locate a class in the configuration-determined class path. This method
+ * is designed for loading plugin classes, and their downstream dependents.
+ */
+ public static Class findClass(String cname)
+ throws ClassNotFoundException,LCFException
+ {
+ return resourceLoader.findClass(cname);
+ }
+
/** Perform system shutdown, using the registered shutdown hooks. */
protected static void cleanUpSystem()
{
Modified: incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/authorities/interfaces/AuthorityConnectorFactory.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/authorities/interfaces/AuthorityConnectorFactory.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/authorities/interfaces/AuthorityConnectorFactory.java (original)
+++ incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/authorities/interfaces/AuthorityConnectorFactory.java Thu Jul 1 13:46:10 2010
@@ -19,6 +19,7 @@
package org.apache.lcf.authorities.interfaces;
import org.apache.lcf.core.interfaces.*;
+import org.apache.lcf.core.system.LCF;
import java.util.*;
import java.io.*;
import java.lang.reflect.*;
@@ -120,7 +121,7 @@ public class AuthorityConnectorFactory
{
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -140,8 +141,7 @@ public class AuthorityConnectorFactory
}
catch (ClassNotFoundException e)
{
- throw new LCFException("No class implementing IAuthorityConnector called '"+
- className+"'.",
+ throw new LCFException("No authority connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
@@ -190,7 +190,7 @@ public class AuthorityConnectorFactory
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -214,8 +214,7 @@ public class AuthorityConnectorFactory
if (connMgr.isInstalled(className) == false)
return null;
- throw new LCFException("No class implementing IAuthorityConnector called '"+
- className+"'.",
+ throw new LCFException("No authority connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
@@ -452,7 +451,7 @@ public class AuthorityConnectorFactory
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -479,8 +478,7 @@ public class AuthorityConnectorFactory
if (connMgr.isInstalled(className) == false)
return null;
- throw new LCFException("No class implementing IAuthorityConnector called '"+
- className+"'.",
+ throw new LCFException("No authority connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
Modified: incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/crawler/interfaces/RepositoryConnectorFactory.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/crawler/interfaces/RepositoryConnectorFactory.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/crawler/interfaces/RepositoryConnectorFactory.java (original)
+++ incubator/lcf/trunk/modules/framework/pull-agent/org/apache/lcf/crawler/interfaces/RepositoryConnectorFactory.java Thu Jul 1 13:46:10 2010
@@ -21,6 +21,7 @@ package org.apache.lcf.crawler.interface
import org.apache.lcf.core.interfaces.*;
import org.apache.lcf.agents.interfaces.*;
import org.apache.lcf.crawler.system.Logging;
+import org.apache.lcf.crawler.system.LCF;
import java.util.*;
import java.io.*;
@@ -159,7 +160,7 @@ public class RepositoryConnectorFactory
{
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -179,8 +180,7 @@ public class RepositoryConnectorFactory
}
catch (ClassNotFoundException e)
{
- throw new LCFException("No class implementing IRepositoryConnector called '"+
- className+"'.",
+ throw new LCFException("No repository connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
@@ -229,7 +229,7 @@ public class RepositoryConnectorFactory
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -254,8 +254,7 @@ public class RepositoryConnectorFactory
if (connMgr.isInstalled(className) == false)
return null;
- throw new LCFException("No class implementing IRepositoryConnector called '"+
- className+"'.",
+ throw new LCFException("No repository connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
@@ -605,7 +604,7 @@ public class RepositoryConnectorFactory
try
{
- Class theClass = Class.forName(className);
+ Class theClass = LCF.findClass(className);
Class[] argumentClasses = new Class[0];
// Look for a constructor
Constructor c = theClass.getConstructor(argumentClasses);
@@ -632,8 +631,7 @@ public class RepositoryConnectorFactory
if (connMgr.isInstalled(className) == false)
return null;
- throw new LCFException("No class implementing IRepositoryConnector called '"+
- className+"'.",
+ throw new LCFException("No repository connector class '"+className+"' was found.",
e);
}
catch (NoSuchMethodException e)
Modified: incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/agents/tests/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/agents/tests/TestBase.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/agents/tests/TestBase.java (original)
+++ incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/agents/tests/TestBase.java Thu Jul 1 13:46:10 2010
@@ -84,7 +84,7 @@ public class TestBase extends org.apache
throws Exception
{
initialize();
- if (propertiesFile.exists())
+ if (isInitialized())
{
// Test the uninstall
LCF.initializeEnvironment();
Modified: incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/core/tests/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/core/tests/TestBase.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/core/tests/TestBase.java (original)
+++ incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/core/tests/TestBase.java Thu Jul 1 13:46:10 2010
@@ -29,7 +29,7 @@ import org.junit.*;
public class TestBase
{
protected File currentPath = null;
- protected File propertiesFile = null;
+ protected File configFile = null;
protected File loggingFile = null;
protected File logOutputFile = null;
@@ -41,15 +41,20 @@ public class TestBase
currentPath = new File(".").getCanonicalFile();
// First, write a properties file and a logging file, in the current directory.
- propertiesFile = new File("properties.ini").getCanonicalFile();
+ configFile = new File("properties.xml").getCanonicalFile();
loggingFile = new File("logging.ini").getCanonicalFile();
logOutputFile = new File("lcf.log").getCanonicalFile();
// Set a system property that will point us to the proper place to find the properties file
- System.setProperty("org.apache.lcf.configfile",propertiesFile.getCanonicalFile().getAbsolutePath());
+ System.setProperty("org.apache.lcf.configfile",configFile.getCanonicalFile().getAbsolutePath());
}
}
+ protected boolean isInitialized()
+ {
+ return configFile.exists();
+ }
+
@Before
public void setUp()
throws Exception
@@ -85,10 +90,13 @@ public class TestBase
"log4j.appender.MAIN=org.apache.log4j.RollingFileAppender\n" +
"log4j.appender.MAIN.layout=org.apache.log4j.PatternLayout\n");
- writeFile(propertiesFile,
- "org.apache.lcf.databaseimplementationclass=org.apache.lcf.core.database.DBInterfaceDerby\n" +
- "org.apache.lcf.derbydatabasepath="+currentPathString.replaceAll("\\\\","/")+"\n" +
- "org.apache.lcf.logconfigfile="+loggingFile.getAbsolutePath().replaceAll("\\\\","/")+"\n");
+ writeFile(configFile,
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
+ "<configuration>\n"+
+ " <property name=\"org.apache.lcf.databaseimplementationclass\" value=\"org.apache.lcf.core.database.DBInterfaceDerby\"/>\n" +
+ " <property name=\"org.apache.lcf.derbydatabasepath\" value=\""+currentPathString.replaceAll("\\\\","/")+"\"/>\n" +
+ " <property name=\"org.apache.lcf.logconfigfile\" value=\""+loggingFile.getAbsolutePath().replaceAll("\\\\","/")+"\"/>\n" +
+ "</configuration>\n");
LCF.initializeEnvironment();
IThreadContext tc = ThreadContextFactory.make();
@@ -117,7 +125,7 @@ public class TestBase
throws Exception
{
initialize();
- if (propertiesFile.exists())
+ if (isInitialized())
{
LCF.initializeEnvironment();
IThreadContext tc = ThreadContextFactory.make();
@@ -127,7 +135,7 @@ public class TestBase
// Get rid of the property and logging files.
logOutputFile.delete();
- propertiesFile.delete();
+ configFile.delete();
loggingFile.delete();
}
}
@@ -138,7 +146,7 @@ public class TestBase
OutputStream os = new FileOutputStream(f);
try
{
- Writer w = new OutputStreamWriter(os);
+ Writer w = new OutputStreamWriter(os,"utf-8");
try
{
w.write(fileContents);
Modified: incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestBase.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestBase.java (original)
+++ incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestBase.java Thu Jul 1 13:46:10 2010
@@ -86,7 +86,7 @@ public class TestBase extends org.apache
throws Exception
{
initialize();
- if (propertiesFile.exists())
+ if (isInitialized())
{
// Test the uninstall
LCF.initializeEnvironment();
Modified: incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestConnectorBase.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestConnectorBase.java?rev=959660&r1=959659&r2=959660&view=diff
==============================================================================
--- incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestConnectorBase.java (original)
+++ incubator/lcf/trunk/modules/framework/tests/org/apache/lcf/crawler/tests/TestConnectorBase.java Thu Jul 1 13:46:10 2010
@@ -192,7 +192,7 @@ public class TestConnectorBase extends o
throws Exception
{
initialize();
- if (propertiesFile.exists())
+ if (isInitialized())
{
// Test the uninstall
LCF.initializeEnvironment();