Merge pull request #23821 from arjantijms/jakartaupdate

Jakarta API updates
diff --git a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java
index fb2300a..951303f 100644
--- a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java
+++ b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java
@@ -1,4 +1,5 @@
 /*
+ * Copyright (c) 2021 Contributors to the Eclipse Foundation.
  * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -16,7 +17,6 @@
 
 package org.glassfish.appclient.client.acc;
 
-import com.sun.appserv.connectors.internal.api.ConnectorRuntime;
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.instrument.IllegalClassFormatException;
 import java.lang.instrument.Instrumentation;
@@ -26,14 +26,18 @@
 import java.security.ProtectionDomain;
 import java.util.Collection;
 import java.util.HashSet;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.spi.ClassTransformer;
-import jakarta.validation.ValidatorFactory;
 
 import org.glassfish.api.deployment.DeploymentContext;
 import org.glassfish.deployment.common.RootDeploymentDescriptor;
 import org.glassfish.persistence.jpa.ProviderContainerContractInfoBase;
 
+import com.sun.appserv.connectors.internal.api.ConnectorRuntime;
+
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.ClassTransformer;
+import jakarta.persistence.spi.TransformerException;
+import jakarta.validation.ValidatorFactory;
+
 /**
  * Implements the internal GlassFish interface which all persistence provider
  * containers must.
@@ -67,10 +71,12 @@
         this.applicationLocation = applicationLocation;
     }
 
+    @Override
     public ClassLoader getClassLoader() {
         return classLoader;
     }
 
+    @Override
     public ClassLoader getTempClassloader() {
         return AccessController.doPrivileged(new PrivilegedAction<URLClassLoader>() {
 
@@ -82,6 +88,7 @@
             });
     }
 
+    @Override
     public void addTransformer(ClassTransformer transformer) {
         final TransformerWrapper tw = new TransformerWrapper(transformer, classLoader);
         if (inst != null) {
@@ -91,29 +98,35 @@
         }
     }
 
+    @Override
     public String getApplicationLocation() {
         return applicationLocation;
     }
 
+    @Override
     public ValidatorFactory getValidatorFactory() {
         // TODO: Need to implement this correctly.
         return null;
     }
 
     // TODO: remove after persistence is refactored.
+    @Override
     public DeploymentContext getDeploymentContext() {
         return null;
     }
 
+    @Override
     public boolean isJava2DBRequired() {
         // Returns whether Java2DB is required or not. For an AppClient it is always false
         return false;
     }
 
+    @Override
     public void registerEMF(String unitName, String persistenceRootUri, RootDeploymentDescriptor containingBundle, EntityManagerFactory emf) {
         emfs.add(emf);
     }
 
+    @Override
     public String getJTADataSourceOverride() {
         // Returns whether JTA datasource is overridden. For an appclient it is never the case.
         return null;
@@ -133,21 +146,24 @@
         private final ClassTransformer persistenceTransformer;
         private final ClassLoader classLoader;
 
-        TransformerWrapper(final ClassTransformer persistenceTransformer,
-                final ClassLoader classLoader) {
+        TransformerWrapper(final ClassTransformer persistenceTransformer, final ClassLoader classLoader) {
             this.persistenceTransformer = persistenceTransformer;
             this.classLoader = classLoader;
         }
 
+        @Override
         public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
             /*
              * Do not even bother running the transformer unless the loader
              * loading the class is the ACC's class loader.
              */
-            return (loader.equals(classLoader) ?
-                persistenceTransformer.transform(loader, className,
-                    classBeingRedefined, protectionDomain, classfileBuffer)
-                : null);
+            try {
+                return loader.equals(classLoader) ?
+                    persistenceTransformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer) :
+                    null;
+            } catch (TransformerException e) {
+                throw (IllegalClassFormatException) (new IllegalClassFormatException().initCause(e));
+            }
         }
     }
 
diff --git a/appserver/persistence/jpa-container/src/main/java/org/glassfish/persistence/jpa/ServerProviderContainerContractInfo.java b/appserver/persistence/jpa-container/src/main/java/org/glassfish/persistence/jpa/ServerProviderContainerContractInfo.java
index 20efec8..2fdd5af 100644
--- a/appserver/persistence/jpa-container/src/main/java/org/glassfish/persistence/jpa/ServerProviderContainerContractInfo.java
+++ b/appserver/persistence/jpa-container/src/main/java/org/glassfish/persistence/jpa/ServerProviderContainerContractInfo.java
@@ -1,4 +1,5 @@
 /*
+ * Copyright (c) 2021 Contributors to the Eclipse Foundation.
  * Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -34,6 +35,7 @@
 
 import jakarta.persistence.EntityManagerFactory;
 import jakarta.persistence.spi.ClassTransformer;
+import jakarta.persistence.spi.TransformerException;
 import jakarta.validation.Validation;
 import jakarta.validation.ValidatorFactory;
 
@@ -78,7 +80,11 @@
             public byte[] transform(
                     ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
                     byte[] classfileBuffer) throws IllegalClassFormatException {
-                return transformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
+                try {
+                    return transformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
+                } catch (TransformerException e) {
+                    throw (IllegalClassFormatException) (new IllegalClassFormatException().initCause(e));
+                }
             }
         });
     }
diff --git a/appserver/pom.xml b/appserver/pom.xml
index ca4e185..aa57884 100644
--- a/appserver/pom.xml
+++ b/appserver/pom.xml
@@ -92,7 +92,7 @@
         <concurrent.version>2.0.0</concurrent.version>
 
         <!-- Jakarta Interceptors -->
-        <jakarta.interceptor-api.version>2.0.1-RC1</jakarta.interceptor-api.version>
+        <jakarta.interceptor-api.version>2.1.0</jakarta.interceptor-api.version>
 
         <!-- Jakarta Security + Authentication/Authorization -->
         <jakarta.security-api.version>2.0.0</jakarta.security-api.version>
@@ -106,18 +106,18 @@
         <openmq.version>6.3.0-M1</openmq.version>
 
         <!-- Jakarta Persistence -->
-        <jakarta.persistence-api.version>3.1.0-RC1</jakarta.persistence-api.version>
+        <jakarta.persistence-api.version>3.1.0-RC2</jakarta.persistence-api.version>
         <eclipselink.version>4.0.0-M1</eclipselink.version>
         <eclipselink.asm.version>9.2.0</eclipselink.asm.version>
 
         <!-- Jakarta Transactions -->
-        <jakarta.transaction-api.version>2.0.0</jakarta.transaction-api.version>
+        <jakarta.transaction-api.version>2.0.1-RC1</jakarta.transaction-api.version>
 
         <!-- Jakarta Connectors -->
         <jakarta.resource-api.version>2.1.0-RC1</jakarta.resource-api.version>
 
         <!-- Jakarta Batch -->
-        <jakarta.batch-api.version>2.1.0-M1</jakarta.batch-api.version>
+        <jakarta.batch-api.version>2.1.0</jakarta.batch-api.version>
         <jbatch.version>2.1.0-M2-SNAPSHOT</jbatch.version>
 
         <!-- Jakarta Enterprise beans -->