From 81c18b9d890800ddde2069e47d352fa99daf3ef8 Mon Sep 17 00:00:00 2001 From: "Paul A. Jungwirth" Date: Fri, 12 Jul 2024 10:25:20 -0700 Subject: [PATCH 1/2] Fix mvn exec:java ClassNotFoundException This was reported by #493. Running benchmarks without packaging first fails like so: ``` mvn clean compile exec:java -P postgres -Dexec.args="-b tpcc -c config/postgres/sample_tpcc_config.xml --create=true --load=true --execute=true" java.lang.RuntimeException: Failed to retrieve class for com.oltpbenchmark.benchmarks.tpcc.TPCCBenchmark at com.oltpbenchmark.util.ClassUtil.getClass (ClassUtil.java:200) at com.oltpbenchmark.util.ClassUtil.getClass (ClassUtil.java:187) at com.oltpbenchmark.util.ClassUtil.newInstance (ClassUtil.java:112) at com.oltpbenchmark.DBWorkload.main (DBWorkload.java:165) at org.codehaus.mojo.exec.ExecJavaMojo.doMain (ExecJavaMojo.java:385) at org.codehaus.mojo.exec.ExecJavaMojo.doExec (ExecJavaMojo.java:374) at org.codehaus.mojo.exec.ExecJavaMojo.lambda$execute$0 (ExecJavaMojo.java:296) at java.lang.Thread.run (Thread.java:1583) Caused by: java.lang.ClassNotFoundException: com.oltpbenchmark.benchmarks.tpcc.TPCCBenchmark at jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java:641) at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass (ClassLoaders.java:188) at java.lang.ClassLoader.loadClass (ClassLoader.java:526) at java.lang.Class.forName0 (Native Method) at java.lang.Class.forName (Class.java:534) at java.lang.Class.forName (Class.java:513) at org.apache.commons.lang3.ClassUtils.getClass (ClassUtils.java:532) at org.apache.commons.lang3.ClassUtils.getClass (ClassUtils.java:514) at com.oltpbenchmark.util.ClassUtil.getClass (ClassUtil.java:198) at com.oltpbenchmark.util.ClassUtil.getClass (ClassUtil.java:187) at com.oltpbenchmark.util.ClassUtil.newInstance (ClassUtil.java:112) at com.oltpbenchmark.DBWorkload.main (DBWorkload.java:165) at org.codehaus.mojo.exec.ExecJavaMojo.doMain (ExecJavaMojo.java:385) at org.codehaus.mojo.exec.ExecJavaMojo.doExec (ExecJavaMojo.java:374) at org.codehaus.mojo.exec.ExecJavaMojo.lambda$execute$0 (ExecJavaMojo.java:296) at java.lang.Thread.run (Thread.java:1583) ``` The bug was introduced by 611f3d49e8. I believe we should be using `Thread.getCurrentThread().getContextClassLoader()`, not `ClassLoader.getSystemClassLoader()`. --- src/main/java/com/oltpbenchmark/api/BenchmarkModule.java | 4 ++-- src/main/java/com/oltpbenchmark/util/ClassUtil.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/oltpbenchmark/api/BenchmarkModule.java b/src/main/java/com/oltpbenchmark/api/BenchmarkModule.java index d8e9dbb9f..989d6eb9a 100644 --- a/src/main/java/com/oltpbenchmark/api/BenchmarkModule.java +++ b/src/main/java/com/oltpbenchmark/api/BenchmarkModule.java @@ -62,7 +62,7 @@ public BenchmarkModule(WorkloadConfiguration workConf) { this.workConf = workConf; this.dialects = new StatementDialects(workConf); // setClassLoader(); - this.classLoader = ClassLoader.getSystemClassLoader(); + this.classLoader = Thread.currentThread().getContextClassLoader(); } /** @@ -70,7 +70,7 @@ public BenchmarkModule(WorkloadConfiguration workConf) { * implementation. */ protected void setClassLoader() { - this.classLoader = ClassLoader.getSystemClassLoader(); + this.classLoader = Thread.currentThread().getContextClassLoader(); } // -------------------------------------------------------------------------- diff --git a/src/main/java/com/oltpbenchmark/util/ClassUtil.java b/src/main/java/com/oltpbenchmark/util/ClassUtil.java index 474dfa6bf..8d4eca577 100644 --- a/src/main/java/com/oltpbenchmark/util/ClassUtil.java +++ b/src/main/java/com/oltpbenchmark/util/ClassUtil.java @@ -184,7 +184,7 @@ public static Constructor getConstructor(Class target_class, Class. * @return */ public static Class getClass(String class_name) { - return getClass(ClassLoader.getSystemClassLoader(), class_name); + return getClass(Thread.currentThread().getContextClassLoader(), class_name); } /** From f4f91e935633a866d492c0ae33f792e5c32b136b Mon Sep 17 00:00:00 2001 From: Brian Kroth Date: Thu, 10 Oct 2024 16:22:22 +0000 Subject: [PATCH 2/2] test with sqlite - no setup required --- .github/workflows/maven.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index b335db41d..0f2fe93f9 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -61,6 +61,10 @@ jobs: - name: Compile with Maven run: mvn -B compile test-compile --file pom.xml + - name: Test exec plugin + run: | + mvn exec:java -P sqlite -Dexec.args="-b noop -c config/sqlite/sample_noop_config.xml --create=true --load=true --execute=true" + - name: Test with Maven run: mvn -B test --file pom.xml