Index: api/src/java/javax/jdo/spi/JDOImplHelper.java
===================================================================
--- api/src/java/javax/jdo/spi/JDOImplHelper.java (revision 1325829)
+++ api/src/java/javax/jdo/spi/JDOImplHelper.java (working copy)
@@ -839,7 +839,7 @@
public static Object construct(String className, String keyString) {
StringConstructor stringConstructor;
try {
- Class keyClass = Class.forName(className);
+ Class> keyClass = Class.forName(className);
synchronized(stringConstructorMap) {
stringConstructor =
(StringConstructor) stringConstructorMap.get(keyClass);
@@ -847,8 +847,8 @@
if (stringConstructor != null) {
return stringConstructor.construct(keyString);
} else {
- Constructor keyConstructor =
- keyClass.getConstructor(new Class[]{String.class});
+ Constructor> keyConstructor =
+ keyClass.getConstructor(new Class>[]{String.class});
return keyConstructor.newInstance(new Object[]{keyString});
}
} catch (JDOException ex) {
Index: api/test/java/javax/jdo/ObjectStateTest.java
===================================================================
--- api/test/java/javax/jdo/ObjectStateTest.java (revision 1325829)
+++ api/test/java/javax/jdo/ObjectStateTest.java (working copy)
@@ -215,7 +215,7 @@
}
private static Method getDeclaredMethod
- (Class clazz, String methodName, Class[] parameters) {
+ (Class> clazz, String methodName, Class[] parameters) {
try {
Method result = clazz.getDeclaredMethod(methodName, parameters);
return result;
Index: api/test/java/javax/jdo/util/BatchTestRunner.java
===================================================================
--- api/test/java/javax/jdo/util/BatchTestRunner.java (revision 1325829)
+++ api/test/java/javax/jdo/util/BatchTestRunner.java (working copy)
@@ -111,10 +111,10 @@
String msg = null;
try {
// get class instance
- Class clazz = Class.forName(className);
+ Class> clazz = Class.forName(className);
// constructor taking PrintStream arg
- Constructor ctor = clazz.getConstructor(
- new Class[] { PrintStream.class } );
+ Constructor> ctor = clazz.getConstructor(
+ new Class>[] { PrintStream.class } );
// create instance
return (ResultPrinter)ctor.newInstance(
new Object[] { System.out });
Index: exectck/pom.xml
===================================================================
--- exectck/pom.xml (revision 1325829)
+++ exectck/pom.xml (working copy)
@@ -43,7 +43,14 @@
true
-
+
+
+
+ ${basedir}/src/conf
+
+
+
+
Index: exectck/src/main/java/org/apache/jdo/exectck/Enhance.java
===================================================================
--- exectck/src/main/java/org/apache/jdo/exectck/Enhance.java (revision 1325829)
+++ exectck/src/main/java/org/apache/jdo/exectck/Enhance.java (working copy)
@@ -1,4 +1,3 @@
-
package org.apache.jdo.exectck;
import java.net.MalformedURLException;
@@ -34,7 +33,6 @@
"org" + File.separator + "apache" + File.separator + "jdo" + File.separator + "tck" + File.separator + "pc" + File.separator,
"org" + File.separator + "apache" + File.separator + "jdo" + File.separator + "tck" + File.separator + "models" + File.separator + "inheritance" + File.separator
};
-
/**
* Location of TCK generated output.
* @parameter expression="${jdo.tck.doEnhance}"
@@ -71,6 +69,13 @@
* @required
*/
private String impl;
+ /**
+ * Location of implementation log file.
+ * @parameter expression="${jdo.tck.impl.logfile}"
+ * default-value="${user.dir}/datanucleus.txt"
+ * @required
+ */
+ private String implLogFile;
/**
* Location of jar files for implementation under test.
* @parameter expression="${project.lib.iut.directory}"
@@ -78,8 +83,14 @@
* @required
*/
private String iutLibsDirectory;
-
/**
+ * Location of jar files for implementation under test.
+ * @parameter expression="${project.lib.iut.directory}"
+ * default-value="${basedir}/../lib/jdori"
+ * @required
+ */
+ private String jdoriLibsDirectory;
+ /**
* List of identity types to be tested.
* @parameter expression="${jdo.tck.identitytypes}"
* default-value="applicationidentity datastoreidentity"
@@ -100,7 +111,7 @@
PropertyUtils.string2Set(identitytypes, idtypes);
// Create directory for enhancer logs
- String enhanceLogsDirName = logsDirectory + File.separator + "enhancer";
+ String enhanceLogsDirName = logsDirectory + File.separator + "enhanced";
File enhancerLogsDir = new File(enhanceLogsDirName);
if (!(enhancerLogsDir.exists()) && !(enhancerLogsDir.mkdirs())) {
throw new MojoExecutionException("Failed to create directory "
@@ -121,21 +132,22 @@
File toFile = null;
File fromFile = null;
String fromFileName = null;
- String fromDirName = null;
String pkgName = null;
int startIdx = -1;
Iterator fi = null;
String[] classArray = new String[10];
String enhancedIdDirName = null;
+ String classesDirName = buildDirectory + File.separator
+ + "classes" + File.separator;
ArrayList classes = null;
// Copy metadata from src to enhanced
for (String idtype : idtypes) {
for (String srcDir : srcDirs) {
- fromDirName = srcDirectory + File.separator + srcDir;
+ String srcDirName = srcDirectory + File.separator + srcDir;
// iterator over list of abs name of metadata files in src
fi = FileUtils.iterateFiles(
- new File(fromDirName), metadataExtensions, true);
+ new File(srcDirName), metadataExtensions, true);
while (fi.hasNext()) {
try {
@@ -165,14 +177,12 @@
// Copy pc and pa classes from target/classes to enhanced
String[] extensions = {"class"};
- fromDirName = buildDirectory + File.separator
- + "classes" + File.separator;
enhancedIdDirName = enhancedDirName + idtype + File.separator;
classes = new ArrayList();
for (String pcPkgName : PC_PKG_DIRS) {
// iterator over list of abs name of class files in target/classes
fi = FileUtils.iterateFiles(
- new File(fromDirName + pcPkgName), extensions, true);
+ new File(classesDirName + pcPkgName), extensions, true);
while (fi.hasNext()) {
try {
fromFile = fi.next();
@@ -181,8 +191,8 @@
int index = fromFileName.indexOf(pcPkgName);
if (index == -1) {
throw new MojoExecutionException(
- "Cannot get index of package path " + pcPkgName +
- " in file name" + fromFileName);
+ "Cannot get index of package path " + pcPkgName
+ + " in file name" + fromFileName);
}
toFile = new File(enhancedIdDirName + fromFileName.substring(index));
FileUtils.copyFile(fromFile, toFile);
@@ -197,32 +207,106 @@
}
// Enhance classes
- URL[] classPathURLs = new URL[2];
- ArrayList cpList = new ArrayList();
- ClassLoader loader = null;
+
+ // Build ClassLoader for finding enhancer
+ URL[] classPathURLs1 = new URL[2];
+ ArrayList cpList1 = new ArrayList();
+ ClassLoader enhancerLoader = null;
try {
- cpList.add((new File(enhancedIdDirName)).toURI().toURL());
- cpList.add((new File(fromDirName)).toURI().toURL());
+ // Must add enhancedIdDirName first!!
+ cpList1.add((new File(enhancedIdDirName)).toURI().toURL());
String[] jars = {"jar"};
- if (impl.equals("iut")) {
+ if (impl.equals("jdori")) {
+ cpList1.add((new File(jdoriLibsDirectory)).toURI().toURL());
+ fi = FileUtils.iterateFiles(new File(jdoriLibsDirectory), jars, true);
+ while (fi.hasNext()) {
+ cpList1.add(fi.next().toURI().toURL());
+ }
+ } else {
+ cpList1.add((new File(iutLibsDirectory)).toURI().toURL());
fi = FileUtils.iterateFiles(new File(iutLibsDirectory), jars, true);
while (fi.hasNext()) {
- cpList.add(fi.next().toURI().toURL());
+ cpList1.add(fi.next().toURI().toURL());
}
}
- loader = new URLClassLoader(cpList.toArray(classPathURLs),
+ enhancerLoader = new URLClassLoader(cpList1.toArray(classPathURLs1),
getClass().getClassLoader());
- // Utilities.printClasspath(loader);
+ System.out.println("ClassLoader enhancerLoader:");
+ Utilities.printClasspath(enhancerLoader);
} catch (MalformedURLException ex) {
Logger.getLogger(Enhance.class.getName()).log(Level.SEVERE, null, ex);
}
- JDOEnhancer enhancer = JDOHelper.getEnhancer(loader);
+
+ // Build ClassLoader with classes to be enhanced
+// URL[] classPathURLs2 = new URL[1];
+// ArrayList cpList2 = new ArrayList();
+// ClassLoader classes2BEnhancedLoader = null;
+// try {
+// cpList2.add((new File(enhancedIdDirName)).toURI().toURL());
+//// cpList2.add((new File(classesDirName)).toURI().toURL());
+// classes2BEnhancedLoader = new URLClassLoader(cpList2.toArray(classPathURLs2),
+// getClass().getClassLoader());
+// System.out.println("ClassLoader classes2BEnhancedLoader:");
+// Utilities.printClasspath(classes2BEnhancedLoader);
+// } catch (MalformedURLException ex) {
+// Logger.getLogger(Enhance.class.getName()).log(Level.SEVERE, null, ex);
+// }
+
+ // Context classloader for finding log4j.properties
+ ClassLoader prevCl = Thread.currentThread().getContextClassLoader();
+ try {
+ URL implUrl;
+ if (impl.equals("jdori")) {
+ implUrl = (new File(jdoriLibsDirectory)).toURI().toURL();
+ } else {
+ implUrl = (new File(iutLibsDirectory)).toURI().toURL();
+ }
+ URL enhancedClassesUrl = (new File(enhancedIdDirName)).toURI().toURL();
+ // Classes dir needed for org.apache.jdo.tck.util.TCKFileAppender
+ URL classesUrl = (new File(classesDirName)).toURI().toURL();
+ ClassLoader loggingPropsCl =
+ URLClassLoader.newInstance(new URL[]{implUrl,
+ enhancedClassesUrl, classesUrl}, prevCl);
+ Thread.currentThread().setContextClassLoader(loggingPropsCl);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ System.out.println("ClassLoader ContextClassLoader:");
+ Utilities.printClasspath(Thread.currentThread().getContextClassLoader());
+ System.out.println("Get enhancer");
+ JDOEnhancer enhancer = JDOHelper.getEnhancer(enhancerLoader);
+ System.out.println("enhancer.setVerbose()");
enhancer.setVerbose(true);
- enhancer.setClassLoader(loader);
+ System.out.println("enhancer.setClassLoader()");
+// enhancer.setClassLoader(classes2BEnhancedLoader);
+ enhancer.setClassLoader(enhancerLoader);
String[] classArr = classes.toArray(classArray);
enhancer.addClasses(classArr);
System.out.println("Enhancing classes for identity type " + idtype);
+ // enhancer needs org/apache/jdo/tck/util/DeepEquality
enhancer.enhance();
+ Thread.currentThread().setContextClassLoader(prevCl);
+
+ // TODO This is only for the RI right now, but could be made to work for UIT
+ if ("jdori".equals(impl)) {
+ // Move log to per-test location
+ String idname = "dsid";
+ if (idtype.trim().equals("applicationidentity")) {
+ idname = "app";
+ }
+ String testLogFilename = logsDirectory + File.separator +
+ "enhanced" + File.separator + idname +
+ "-datanucleus.txt";
+ System.out.println("testLogFilename is " + testLogFilename);
+ try {
+ File logFile = new File(implLogFile);
+// FileUtils.moveFile(logFile, new File(testLogFilename));
+ FileUtils.copyFile(logFile, new File(testLogFilename));
+ } catch (Exception e) {
+ System.out.println(">> Error moving implementation log file " +
+ e.getMessage());
+ }
+ }
}
System.out.println("");
}
Index: exectck/src/main/java/org/apache/jdo/exectck/RunTCK.java
===================================================================
--- exectck/src/main/java/org/apache/jdo/exectck/RunTCK.java (revision 1325829)
+++ exectck/src/main/java/org/apache/jdo/exectck/RunTCK.java (working copy)
@@ -24,6 +24,7 @@
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
@@ -100,8 +101,14 @@
* @required
*/
private String iutLibsDirectory;
-
/**
+ * Location of jar files for implementation under test.
+ * @parameter expression="${project.lib.iut.directory}"
+ * default-value="${basedir}/../lib/jdori"
+ * @required
+ */
+ private String jdoriLibsDirectory;
+ /**
* Name of file in src/conf containing pmf properties.
* @parameter expression="${jdo.tck.pmfproperties}"
* default-value="jdori-pmf.properties"
@@ -297,7 +304,9 @@
alreadyran = false;
for (String idtype : idtypes) {
- propsString.add("-Djdo.tck.identitytype=" + idtype);
+ List idPropsString = new ArrayList();
+ idPropsString.addAll(propsString);
+ idPropsString.add("-Djdo.tck.identitytype=" + idtype);
String enhancedDirName = buildDirectory + File.separator + "enhanced"
+ File.separator + impl + File.separator + idtype + File.separator;
File enhancedDir = new File(enhancedDirName);
@@ -313,6 +322,7 @@
URL url1 = enhancedDir.toURI().toURL();
URL url2 = new File(buildDirectory + File.separator
+ "classes" + File.separator).toURI().toURL();
+ System.out.println("url2 is " + url2.toString());
cpList.add(url1);
cpList.add(url2);
String[] jars = {"jar"};
@@ -327,6 +337,12 @@
while (fi.hasNext()) {
cpList.add(fi.next().toURI().toURL());
}
+ } else {
+ fi = FileUtils.iterateFiles(
+ new File(jdoriLibsDirectory), jars, true);
+ while (fi.hasNext()) {
+ cpList.add(fi.next().toURI().toURL());
+ }
}
} catch (MalformedURLException ex) {
ex.printStackTrace();
@@ -338,21 +354,22 @@
}
for (String cfg : cfgs) {
-
+ List cfgPropsString = new ArrayList();
+ cfgPropsString.addAll(idPropsString);
// Parse conf file and set properties String
props = PropertyUtils.getProperties(confDirectory
+ File.separator + cfg);
- propsString.add("-Djdo.tck.testdata="
+ cfgPropsString.add("-Djdo.tck.testdata="
+ getTrimmedPropertyValue(props, "jdo.tck.testdata"));
- propsString.add("-Djdo.tck.standarddata="
+ cfgPropsString.add("-Djdo.tck.standarddata="
+ getTrimmedPropertyValue(props, "jdo.tck.standarddata"));
- propsString.add("-Djdo.tck.mapping.companyfactory="
+ cfgPropsString.add("-Djdo.tck.mapping.companyfactory="
+ getTrimmedPropertyValue(props, "jdo.tck.mapping.companyfactory"));
-// propsString.append("-Djdo.tck.description=\"" +
+// innerPropsString.append("-Djdo.tck.description=\"" +
// props.getProperty("jdo.tck.description") + "\"");
- propsString.add("-Djdo.tck.requiredOptions="
+ cfgPropsString.add("-Djdo.tck.requiredOptions="
+ getTrimmedPropertyValue(props, "jdo.tck.requiredOptions"));
- propsString.add("-Djdo.tck.signaturefile="
+ cfgPropsString.add("-Djdo.tck.signaturefile="
+ signaturefile);
String mapping = getTrimmedPropertyValue(props, "jdo.tck.mapping");
if (mapping == null) {
@@ -374,8 +391,8 @@
}
List classesList = Arrays.asList(classes.split(" "));
- propsString.add("-Djdo.tck.schemaname=" + idtype + mapping);
- propsString.add("-Djdo.tck.cfg=" + cfg);
+ cfgPropsString.add("-Djdo.tck.schemaname=" + idtype + mapping);
+ cfgPropsString.add("-Djdo.tck.cfg=" + cfg);
runonce = getTrimmedPropertyValue(props, "runOnce");
runonce = (runonce == null) ? "false" : runonce;
@@ -402,7 +419,7 @@
command.add("java");
command.add("-cp");
command.add(cpString);
- command.addAll(propsString);
+ command.addAll(cfgPropsString);
command.add(dbproperties);
// TODO!!! split jvmproperties into a List!!
command.add(jvmproperties);
@@ -426,41 +443,41 @@
" with " + idtype +
" on '" + db + "'" +
" mapping=" + mapping + " ... ");
- result = (new Utilities()).invokeTest(command);
- if (result.getExitValue() == 0) {
- System.out.println("success");
- } else {
- System.out.println("FAIL");
- }
-
- // TODO This is only for the RI right now, but could be made to work for UIT
- if ("jdori".equals(impl)) {
- // Move log to per-test location
- String idname = "dsid";
- if (idtype.trim().equals("applicationidentity")) {
- idname = "app";
+ try {
+ result = (new Utilities()).invokeTest(command);
+ if (result.getExitValue() == 0) {
+ System.out.println("success");
+ } else {
+ System.out.println("FAIL");
}
- String configName = cfg;
- if (cfg.indexOf('.') > 0) {
- configName = configName.substring(0, cfg.indexOf('.'));
- }
- String testLogFilename = thisLogDir +
- idname + "-" + configName + "-datanucleus.txt";
- try {
- File logFile = new File(implLogFile);
- FileUtils.moveFile(logFile, new File(testLogFilename));
- } catch (Exception e) {
- System.out.println(">> Error moving implementation log file " +
- e.getMessage());
- }
+ if (runtckVerbose) {
+ System.out.println("\nCommand line is: \n" + command.toString());
+ System.out.println("Test exit value is " + result.getExitValue());
+ System.out.println("Test result output:\n" + result.getOutputString());
+ System.out.println("Test result error:\n" + result.getErrorString());
+ }
+ } catch (java.lang.RuntimeException re) {
+ System.out.println("Exception on command " + command);
}
- if (runtckVerbose) {
- System.out.println("\nCommand line is: \n" + command.toString());
- System.out.println("Test exit value is " + result.getExitValue());
- System.out.println("Test result output:\n" + result.getOutputString());
- System.out.println("Test result error:\n" + result.getErrorString());
+ // Move log to per-test location
+ String idname = "dsid";
+ if (idtype.trim().equals("applicationidentity")) {
+ idname = "app";
}
+ String configName = cfg;
+ if (cfg.indexOf('.') > 0) {
+ configName = configName.substring(0, cfg.indexOf('.'));
+ }
+ String testLogFilename = thisLogDir
+ + idname + "-" + configName + "-" + impl + ".txt";
+ try {
+ File logFile = new File(implLogFile);
+ FileUtils.moveFile(logFile, new File(testLogFilename));
+ } catch (Exception e) {
+ System.out.println(">> Error moving implementation log file "
+ + e.getMessage());
+ }
if (runonce.equals("true")) {
alreadyran = true;
Index: exectck/src/main/java/org/apache/jdo/exectck/Utilities.java
===================================================================
--- exectck/src/main/java/org/apache/jdo/exectck/Utilities.java (revision 1325829)
+++ exectck/src/main/java/org/apache/jdo/exectck/Utilities.java (working copy)
@@ -63,7 +63,9 @@
System.out.println(urls.length + " URL(s) for loader: ");
for (int i = 0; i < urls.length; i++) {
- System.out.println(" " + urls[i].getFile());
+ if (urls[i] != null) {
+ System.out.println(" " + urls[i].getFile());
+ }
}
}
Index: pom.xml
===================================================================
--- pom.xml (revision 1325829)
+++ pom.xml (working copy)
@@ -89,6 +89,7 @@
commons-io
1.4
+
org.springframework
spring-core
@@ -154,11 +156,13 @@
commons-logging
1.1
+
@@ -209,7 +213,7 @@
mcaisse
Michelle Caisse
Michelle.Caisse@Sun.COM
- Sun Microsystems, Inc.
+ Apache.org
-8
Index: tck/src/conf/log4j.properties
===================================================================
--- tck/src/conf/log4j.properties (revision 1325829)
+++ tck/src/conf/log4j.properties (working copy)
@@ -85,8 +85,8 @@
log4j.additivity.com.mchange.v2 = false
# DataNucleus appenders
-#log4j.appender.DataNucleus = org.apache.jdo.tck.util.TCKFileAppender
-log4j.appender.DataNucleus = org.apache.log4j.FileAppender
+log4j.appender.DataNucleus = org.apache.jdo.tck.util.TCKFileAppender
+#log4j.appender.DataNucleus = org.apache.log4j.FileAppender
log4j.appender.DataNucleus.Enhancer.File = datanucleus.txt
log4j.appender.DataNucleus.File = datanucleus.txt
log4j.appender.DataNucleus.layout = org.apache.log4j.PatternLayout