Closed scottmarlow closed 1 month ago
I looked in the current Platform TCK sources and think that we might only have this problem with jpa tests. Connector + JDBC do have some tests like connManagerClient1.java or callStmtClient1.java but I think those map to the same class names in EE 11 so are unlikely to hit this bug.
I just counted the number of generated source files that have this problem and it happens in 1276 jpa tests. So, think I will find the cause and see if I can fix it.
Look at updating parseVehiclePackage() to pass in clazz.getName() (e.g. "ee.jakarta.tck.persistence.core.annotations.access.field.Client1") to be used instead of "ee.jakarta.tck.persistence.core.annotations.access.field.Client.class".
I'm going to push my hack for this fix to a branch but don't expect that we need to merge it as it needs further refinement.
The problem here is that the EE10 build.xml parse is using the EE10 test class which no longer exists. I don't see why the hack you have would change this. This is really another name mapping problem, but we can't add all these new client classes to the mapping.
It seems like the code is going to have to look for the EE10 version of the input EE11 client class after mapping, and if it ends in a number and does not exist in the EE10 code, look to map the EE10 non-numbered class to the input numbered class. I'll take a look at this tomorrow as its late.
The problem here is that the EE10 build.xml parse is using the EE10 test class which no longer exists. I don't see why the hack you have would change this. This is really another name mapping problem, but we can't add all these new client classes to the mapping.
As best as I can tell from looking around at different Client1.java tests in the EE 10 TCK vs EE 11 TCK, the EE 11 jpa tests are the only examples of where we split EE 10 Client.java into multiple (EE 11) Client1.java + Client2.java sources. So the class name mapping issue is limited to the JPA tests.
My hack in diff form is:
diff --git a/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/Utils.java b/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/Utils.java
index b3f17ba..e81259c 100644
--- a/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/Utils.java
+++ b/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/Utils.java
@@ -260,6 +260,15 @@ public class Utils {
clazz = dotClass.replace('$', '.');
}
}
+ // JPA hack
+ if(clazz.contains("ee.jakarta.tck.persistence") && clazz.endsWith(".Client.class")) {
+ System.out.println("xxx set a breakpoint here: " + clazz);
+ String testClassName = System.getProperty("testpackage.classname") + ".class";
+ System.out.println("clazz " + clazz + " needs to be updated with " + testClassName);
+ if (!clazz.equals(testClassName)) {
+ clazz = testClassName;
+ }
+ }
classes.add(clazz);
}
}
diff --git a/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/api/TestPackageInfoBuilder.java b/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/api/TestPackageInfoBuilder.java
index 45524fb..0f15b77 100644
--- a/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/api/TestPackageInfoBuilder.java
+++ b/tools/tck-rewrite-ant/src/main/java/tck/jakarta/platform/ant/api/TestPackageInfoBuilder.java
@@ -308,6 +308,7 @@ public class TestPackageInfoBuilder {
private DeploymentMethodInfo parseVehiclePackage(PackageTarget pkgTargetWrapper, Class<?> clazz, VehicleType vehicleType) {
pkgTargetWrapper.execute(vehicleType);
String protocol = getProtocolForVehicle(vehicleType);
+ System.setProperty("testpackage.classname",clazz.getName());
String testClassSimpleName = clazz.getSimpleName();
// Extract the information for the current deployment from the parsed ts.vehicles info
DeploymentInfo deployment = new DeploymentInfo(clazz, pkgTargetWrapper.getDeploymentName(), protocol, vehicleType);
My hack is very specific to the JPA compile failures that I was seeing. Initially, I looked up the call stack in the debugger and didn't see a quick solution so just hacked in the (thread unsafe) system property solution to pass the class name in.
It seems like the code is going to have to look for the EE10 version of the input EE11 client class after mapping, and if it ends in a number and does not exist in the EE10 code, look to map the EE10 non-numbered class to the input numbered class. I'll take a look at this tomorrow as its late.
It did seem like the TestPackageInfoBuilder#parseVehiclePackage did already have the EE 11 test class in variable clazz
which I thought about passing down to the Utils#getClassFilesString(EE11toEE10Mapping mapping, List
Ok, I was looking at the wrong commit then.
See the latest changes I pushed up in #95 that add a mapping from the current test class if it ends with a digit and does not exist in EE10, but the non-digit class does. This is producing jpa code that compiles. If that works for you I can put out a 1.0.0-M3.
Note that the DefaultEEMapping
ctor is now private and the instance needs to be obtained via DefaultEEMapping.getInstance()
. This is because the test class mapping is set for each call to TestPackageInfoBuilder.buildTestClientsEx(...)
. This is definitely not a thread safe class now.
I'm not sure but with this change + https://github.com/scottmarlow/jakartaee-tck-tools/tree/jakartaee-tck-tools-pull-95, I am getting the following compile failure (without my hack change that I mentioned earlier):
[ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client4Stateful3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client3PmservletTest.java:[79,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client2Stateful3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client5Stateless3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client7AppmanagednotxTest.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client1PmservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/jpa22/query/stream/ClientPmservletTest.java:[70,59] package com.sun.ts.tests.jpa.jpa22.query.stream.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client7PmservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/jpa22/query/stream/ClientAppmanagednotxTest.java:[110,63] package com.sun.ts.tests.jpa.jpa22.query.stream.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client1AppmanagednotxTest.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client6PuservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client5AppmanagedTest.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client3AppmanagedTest.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client4AppmanagednotxTest.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client5PmservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client6Stateful3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client6AppmanagedTest.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/jpa22/query/stream/ClientAppmanagedTest.java:[110,63] package com.sun.ts.tests.jpa.jpa22.query.stream.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client5AppmanagednotxTest.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client2PuservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client5PuservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client2AppmanagedTest.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client3PuservletTest.java:[79,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/jpa22/query/stream/ClientPuservletTest.java:[71,59] package com.sun.ts.tests.jpa.jpa22.query.stream.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client4Stateless3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client4PuservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client2AppmanagednotxTest.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client2Stateless3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/jpa22/query/stream/ClientStateful3Test.java:[109,63] package com.sun.ts.tests.jpa.jpa22.query.stream.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client5Stateful3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client2PmservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client4PmservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client3Stateful3Test.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client1AppmanagedTest.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client6PmservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client7Stateful3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client3AppmanagednotxTest.java:[118,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client1Stateful3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client7PuservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client3Stateless3Test.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client1Stateless3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client1PuservletTest.java:[80,71] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/jpa22/query/stream/ClientStateless3Test.java:[109,63] package com.sun.ts.tests.jpa.jpa22.query.stream.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client7AppmanagedTest.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client7Stateless3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client6Stateless3Test.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client6AppmanagednotxTest.java:[119,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist [ERROR] platformtck/jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client4AppmanagedTest.java:[120,75] package com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client does not exist
From platform-tests/src/main/java/ee/jakarta/tck/persistence/core/criteriaapi/CriteriaQuery/Client4AppmanagedTest.java:
// Ejb
// the jar with the correct archive name
JavaArchive jpa_core_criteriaapi_CriteriaQuery_appmanaged_vehicle_ejb = ShrinkWrap.create(JavaArchive.class, "jpa_core_criteriaapi_CriteriaQuery_appmanaged_vehicle_ejb.jar");
// The class files
jpa_core_criteriaapi_CriteriaQuery_appmanaged_vehicle_ejb.addClasses(
com.sun.ts.tests.common.vehicle.ejb3share.EJB3ShareBaseBean.class,
com.sun.ts.tests.common.vehicle.VehicleRunnerFactory.class,
com.sun.ts.tests.common.vehicle.ejb3share.UseEntityManager.class,
com.sun.ts.tests.common.vehicle.ejb3share.EJB3ShareIF.class,
com.sun.ts.lib.harness.EETest.Fault.class,
com.sun.ts.tests.common.vehicle.appmanaged.AppManagedVehicleIF.class,
com.sun.ts.tests.common.vehicle.ejb3share.UseEntityManagerFactory.class,
ee.jakarta.tck.persistence.common.PMClientBase.class,
ee.jakarta.tck.persistence.common.schema30.Util.class,
com.sun.ts.tests.common.vehicle.VehicleRunnable.class,
com.sun.ts.tests.common.vehicle.appmanaged.AppManagedVehicleBean.class,
com.sun.ts.tests.common.vehicle.ejb3share.UserTransactionWrapper.class,
ee.jakarta.tck.persistence.core.criteriaapi.CriteriaQuery.Client4.class,
com.sun.ts.lib.harness.EETest.class,
com.sun.ts.lib.harness.ServiceEETest.class,
com.sun.ts.tests.common.vehicle.ejb3share.EntityTransactionWrapper.class,
com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client.ExpectedResult.class,
com.sun.ts.lib.harness.EETest.SetupException.class,
com.sun.ts.tests.common.vehicle.VehicleClient.class,
com.sun.ts.tests.common.vehicle.ejb3share.NoopTransactionWrapper.class
);
It looks like com.sun.ts.tests.jpa.core.criteriaapi.CriteriaQuery.Client.ExpectedResult.class` was for nested Client.ExpectedResult class in the EE 10 Client.java
Example from jpa/platform-tests/src/main/java/ee/jakarta/tck/persistence/core/entityManager/Client2AppmanagedTest.java: