diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
new file mode 100644
index 0000000..70710ff
--- /dev/null
+++ b/.github/workflows/maven.yml
@@ -0,0 +1,44 @@
+# 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.
+
+name: Java CI
+
+on: [push, pull_request]
+
+jobs:
+  build:
+    runs-on: ${{ matrix.os }}
+    continue-on-error: ${{ matrix.experimental }}
+    strategy:
+      matrix:
+        os: [ubuntu-latest]
+        java: [ 11 ]
+        experimental: [false]
+
+    steps:
+    - uses: actions/checkout@v2.4.0
+    - uses: actions/cache@v2.1.7
+      with:
+        path: ~/.m2/repository
+        key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+        restore-keys: |
+          ${{ runner.os }}-maven-
+    - name: Set up JDK ${{ matrix.java }}
+      uses: actions/setup-java@v2
+      with:
+        distribution: adopt
+        java-version: ${{ matrix.java }}
+    - name: Build with Maven
+      run: mvn -V clean test install --no-transfer-progress
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
index 1bff2e3..71d27b1 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,5 +1,5 @@
 Apache Geronimo 
-Copyright 2003-2010 The Apache Software Foundation
+Copyright 2003-2023 The Apache Software Foundation
 
 This product includes software developed by
 The Apache Software Foundation (http://www.apache.org/).
diff --git a/geronimo-connector/pom.xml b/geronimo-connector/pom.xml
index db9d976..16ad24c 100644
--- a/geronimo-connector/pom.xml
+++ b/geronimo-connector/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.geronimo.components</groupId>
         <artifactId>geronimo-txmanager-parent</artifactId>
-        <version>3.1.6-SNAPSHOT</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>geronimo-connector</artifactId>
@@ -43,30 +43,18 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-      
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.geronimo.components</groupId>
             <artifactId>geronimo-transaction</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
+            <groupId>jakarta.resource</groupId>
+            <artifactId>jakarta.resource-api</artifactId>
         </dependency>
-            
+
         <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-validation_1.0_spec</artifactId>
+            <groupId>jakarta.validation</groupId>
+            <artifactId>jakarta.validation-api</artifactId>
         </dependency>
 
         <dependency>
@@ -111,10 +99,6 @@
                 </configuration>
             </plugin>
 
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecNamedXAResourceFactory.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecNamedXAResourceFactory.java
index 0818ba5..e69aedf 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecNamedXAResourceFactory.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecNamedXAResourceFactory.java
@@ -20,10 +20,10 @@
 
 package org.apache.geronimo.connector;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.ResourceAdapter;
-import javax.transaction.SystemException;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAResource;
 import org.apache.geronimo.transaction.manager.NamedXAResource;
 import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecWrapper.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecWrapper.java
index 7b34c29..f1d3980 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecWrapper.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ActivationSpecWrapper.java
@@ -19,15 +19,15 @@
 
 import java.util.Set; 
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.InvalidPropertyException; 
-import javax.resource.spi.endpoint.MessageEndpointFactory;
-import javax.validation.ConstraintViolation; 
-import javax.validation.ConstraintViolationException; 
-import javax.validation.Validator; 
-import javax.validation.ValidatorFactory; 
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.InvalidPropertyException; 
+import jakarta.resource.spi.endpoint.MessageEndpointFactory;
+import jakarta.validation.ConstraintViolation; 
+import jakarta.validation.ConstraintViolationException; 
+import jakarta.validation.Validator; 
+import jakarta.validation.ValidatorFactory; 
 
 /**
  * Wrapper for ActivationSpec instances.
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/AdminObjectWrapper.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/AdminObjectWrapper.java
index 4b2eefe..504a892 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/AdminObjectWrapper.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/AdminObjectWrapper.java
@@ -19,11 +19,11 @@
 
 import java.util.Set; 
 
-import javax.resource.spi.ResourceAdapterAssociation;
-import javax.validation.ConstraintViolation; 
-import javax.validation.ConstraintViolationException; 
-import javax.validation.Validator; 
-import javax.validation.ValidatorFactory; 
+import jakarta.resource.spi.ResourceAdapterAssociation;
+import jakarta.validation.ConstraintViolation; 
+import jakarta.validation.ConstraintViolationException; 
+import jakarta.validation.Validator; 
+import jakarta.validation.ValidatorFactory; 
 
 
 /**
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ConnectorTransactionContext.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ConnectorTransactionContext.java
index ca519a0..eb18cbb 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ConnectorTransactionContext.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ConnectorTransactionContext.java
@@ -20,10 +20,10 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
 
 import org.apache.geronimo.connector.outbound.TransactionCachingInterceptor;
 import org.apache.geronimo.transaction.manager.TransactionImpl;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java
index 41cf403..8d1e0d1 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/GeronimoBootstrapContext.java
@@ -18,11 +18,11 @@
 
 import java.util.Timer;
 
-import javax.resource.spi.UnavailableException;
-import javax.resource.spi.XATerminator;
-import javax.resource.spi.work.WorkManager;
-import javax.resource.spi.work.WorkContext;
-import javax.transaction.TransactionSynchronizationRegistry;
+import jakarta.resource.spi.UnavailableException;
+import jakarta.resource.spi.XATerminator;
+import jakarta.resource.spi.work.WorkManager;
+import jakarta.resource.spi.work.WorkContext;
+import jakarta.transaction.TransactionSynchronizationRegistry;
 import org.apache.geronimo.connector.work.GeronimoWorkManager;
 
 /**
@@ -31,7 +31,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class GeronimoBootstrapContext implements javax.resource.spi.BootstrapContext {
+public class GeronimoBootstrapContext implements jakarta.resource.spi.BootstrapContext {
     private final GeronimoWorkManager workManager;
     private final XATerminator xATerminator;
     private final TransactionSynchronizationRegistry transactionSynchronizationRegistry;
@@ -59,21 +59,21 @@
 
 
     /**
-     * @see javax.resource.spi.BootstrapContext#getWorkManager()
+     * @see jakarta.resource.spi.BootstrapContext#getWorkManager()
      */
     public WorkManager getWorkManager() {
         return workManager;
     }
 
     /**
-     * @see javax.resource.spi.BootstrapContext#getXATerminator()
+     * @see jakarta.resource.spi.BootstrapContext#getXATerminator()
      */
     public XATerminator getXATerminator() {
         return xATerminator;
     }
 
     /**
-     * @see javax.resource.spi.BootstrapContext#createTimer()
+     * @see jakarta.resource.spi.BootstrapContext#createTimer()
      */
     public Timer createTimer() throws UnavailableException {
         return new Timer("BootStrapTimer", true);
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ResourceAdapterWrapper.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ResourceAdapterWrapper.java
index f41a32c..6f3e223 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/ResourceAdapterWrapper.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/ResourceAdapterWrapper.java
@@ -20,19 +20,19 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.ResourceAdapterAssociation;
-import javax.resource.spi.ResourceAdapterInternalException;
-import javax.resource.spi.endpoint.MessageEndpointFactory;
-import javax.transaction.SystemException;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.BootstrapContext;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.ResourceAdapterAssociation;
+import jakarta.resource.spi.ResourceAdapterInternalException;
+import jakarta.resource.spi.endpoint.MessageEndpointFactory;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAResource;
-import javax.validation.ConstraintViolation; 
-import javax.validation.ConstraintViolationException; 
-import javax.validation.Validator; 
-import javax.validation.ValidatorFactory; 
+import jakarta.validation.ConstraintViolation; 
+import jakarta.validation.ConstraintViolationException; 
+import jakarta.validation.Validator; 
+import jakarta.validation.ValidatorFactory; 
 
 import org.apache.geronimo.transaction.manager.NamedXAResource;
 import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java
index 5ec67e1..923a514 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractConnectionManager.java
@@ -17,11 +17,11 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.LazyAssociatableConnectionManager;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ConnectionManager;
+import jakarta.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.spi.LazyAssociatableConnectionManager;
+import jakarta.resource.spi.ManagedConnectionFactory;
 
 import org.apache.geronimo.connector.outbound.connectionmanagerconfig.PoolingSupport;
 import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java
index 7ca3ac1..e1967c2 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolConnectionInterceptor.java
@@ -24,21 +24,20 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.spi.ManagedConnection;
+import jakarta.resource.spi.ManagedConnectionFactory;
 import javax.security.auth.Subject;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * @version $Rev$ $Date$
  */
 public abstract class AbstractSinglePoolConnectionInterceptor implements ConnectionInterceptor, PoolingAttributes {
-    protected static Logger log = LoggerFactory.getLogger(AbstractSinglePoolConnectionInterceptor.class);
+    protected static Logger log = Logger.getLogger(AbstractSinglePoolConnectionInterceptor.class.getName());
     protected final ConnectionInterceptor next;
     private final ReadWriteLock resizeLock = new ReentrantReadWriteLock();
     protected Semaphore permits;
@@ -67,8 +66,8 @@
 
     public void getConnection(ConnectionInfo connectionInfo) throws ResourceException {
         if (connectionInfo.getManagedConnectionInfo().getManagedConnection() != null) {
-            if (log.isTraceEnabled()) {
-                log.trace("supplying already assigned connection from pool " + this + " " + connectionInfo);
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"supplying already assigned connection from pool " + this + " " + connectionInfo);
             }
             return;
         }
@@ -102,8 +101,8 @@
 
     public void returnConnection(ConnectionInfo connectionInfo,
                                  ConnectionReturnAction connectionReturnAction) {
-        if (log.isTraceEnabled()) {
-            log.trace("returning connection " + connectionInfo.getConnectionHandle() + " for MCI " + connectionInfo.getManagedConnectionInfo() + " and MC " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " to pool " + this);
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"returning connection " + connectionInfo.getConnectionHandle() + " for MCI " + connectionInfo.getManagedConnectionInfo() + " and MC " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " to pool " + this);
         }
 
         // not strictly synchronized with destroy(), but pooled operations in internalReturn() are...
@@ -120,8 +119,8 @@
         try {
             ManagedConnectionInfo mci = connectionInfo.getManagedConnectionInfo();
             if (connectionReturnAction == ConnectionReturnAction.RETURN_HANDLE && mci.hasConnectionHandles()) {
-                if (log.isTraceEnabled()) {
-                    log.trace("Return request at pool with connection handles! " + connectionInfo.getConnectionHandle() + " for MCI " + connectionInfo.getManagedConnectionInfo() + " and MC " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " to pool " + this, new Exception("Stack trace"));
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"Return request at pool with connection handles! " + connectionInfo.getConnectionHandle() + " for MCI " + connectionInfo.getManagedConnectionInfo() + " and MC " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " to pool " + this, new Exception("Stack trace"));
                 }
                 return;
             }
@@ -179,8 +178,8 @@
             }
         }
         //we must destroy connection.
-        if (log.isTraceEnabled()) {
-            log.trace("Discarding connection in pool " + this + " " + connectionInfo);
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"Discarding connection in pool " + this + " " + connectionInfo);
         }
         next.returnConnection(connectionInfo, connectionReturnAction);
         connectionCount--;
@@ -378,7 +377,7 @@
                     parent.next.returnConnection(killInfo, ConnectionReturnAction.DESTROY);
                 }
             } catch (Throwable t) {
-                log.error("Error occurred during execution of ExpirationMonitor TimerTask", t);
+                log.log(Level.SEVERE, "Error occurred during execution of ExpirationMonitor TimerTask", t);
             } finally {
                 interceptor.resizeLock.readLock().unlock();
             }
@@ -418,7 +417,7 @@
                     }
                 }
             } catch (Throwable t) {
-                log.error("FillTask encountered error in run method", t);
+                log.log(Level.SEVERE, "FillTask encountered error in run method", t);
             } finally {
                 resizeLock.readLock().unlock();
             }
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionHandleInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionHandleInterceptor.java
index 232efce..9587a2b 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionHandleInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionHandleInterceptor.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 /**
  * ConnectionHandleInterceptor.java
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionInterceptor.java
index 66f791a..eff9495 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionInterceptor.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 /**
  * ConnectionInterceptor is the interface implemented by
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionManagerContainer.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionManagerContainer.java
index f7b4f2f..2e516c2 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionManagerContainer.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionManagerContainer.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnectionFactory;
 
 /**
  * ConnectionManagerContainer
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptor.java
index 607855f..16ee6fa 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptor.java
@@ -20,9 +20,9 @@
 import java.util.Collection;
 import java.util.Iterator;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.DissociatableManagedConnection;
-import javax.resource.spi.ManagedConnection;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.DissociatableManagedConnection;
+import jakarta.resource.spi.ManagedConnection;
 
 import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTracker;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java
index 6c8bc63..092311c 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GenericConnectionManager.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.spi.ManagedConnectionFactory;
-import javax.transaction.TransactionManager;
+import jakarta.resource.spi.ManagedConnectionFactory;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.connector.outbound.connectionmanagerconfig.LocalTransactions;
 import org.apache.geronimo.connector.outbound.connectionmanagerconfig.NoTransactions;
@@ -28,8 +28,9 @@
 import org.apache.geronimo.connector.outbound.connectionmanagerconfig.XATransactions;
 import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTracker;
 import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * GenericConnectionManager sets up a connection manager stack according to the
@@ -38,7 +39,7 @@
  * @version $Rev$ $Date$
  */
 public class GenericConnectionManager extends AbstractConnectionManager {
-    protected static final Logger log = LoggerFactory.getLogger(GenericConnectionManager.class);
+    protected static final Logger log = Logger.getLogger(GenericConnectionManager.class.getName());
 
     //default constructor to support externalizable subclasses
     public GenericConnectionManager() {
@@ -101,14 +102,14 @@
             if (mcf == null) {
                 throw new NullPointerException("No ManagedConnectionFactory supplied for " + name);
             }
-            if (mcf instanceof javax.resource.spi.TransactionSupport) {
-                javax.resource.spi.TransactionSupport txSupport = (javax.resource.spi.TransactionSupport)mcf;
-                javax.resource.spi.TransactionSupport.TransactionSupportLevel txSupportLevel = txSupport.getTransactionSupport();
+            if (mcf instanceof jakarta.resource.spi.TransactionSupport) {
+                jakarta.resource.spi.TransactionSupport txSupport = (jakarta.resource.spi.TransactionSupport)mcf;
+                jakarta.resource.spi.TransactionSupport.TransactionSupportLevel txSupportLevel = txSupport.getTransactionSupport();
                 log.info("Runtime TransactionSupport level: " + txSupportLevel);
                 if (txSupportLevel != null) {
-                    if (txSupportLevel == javax.resource.spi.TransactionSupport.TransactionSupportLevel.NoTransaction) {
+                    if (txSupportLevel == jakarta.resource.spi.TransactionSupport.TransactionSupportLevel.NoTransaction) {
                         transactionSupport = NoTransactions.INSTANCE;
-                    } else if (txSupportLevel == javax.resource.spi.TransactionSupport.TransactionSupportLevel.LocalTransaction) {
+                    } else if (txSupportLevel == jakarta.resource.spi.TransactionSupport.TransactionSupportLevel.LocalTransaction) {
                         if (transactionSupport != NoTransactions.INSTANCE) {
                             transactionSupport = LocalTransactions.INSTANCE;
                         }
@@ -128,8 +129,8 @@
 
             stack = transactionSupport.addXAResourceInsertionInterceptor(stack, name);
             stack = pooling.addPoolingInterceptors(stack);
-            if (log.isTraceEnabled()) {
-                log.trace("Connection Manager " + name + " installed pool " + stack);
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"Connection Manager " + name + " installed pool " + stack);
             }
 
             this.poolingSupport = pooling;
@@ -155,10 +156,10 @@
             }
             tail.setStack(stack);
             this.stack = stack;
-            if (log.isDebugEnabled()) {
+            if (log.isLoggable(Level.FINE)) {
                 StringBuilder s = new StringBuilder("ConnectionManager Interceptor stack;\n");
                 stack.info(s);
-                log.debug(s.toString());
+                log.log(Level.FINE, s.toString());
             }
         }
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GeronimoConnectionEventListener.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GeronimoConnectionEventListener.java
index 435aa6f..876f91f 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GeronimoConnectionEventListener.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/GeronimoConnectionEventListener.java
@@ -21,13 +21,11 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.resource.spi.ConnectionEvent;
-import javax.resource.spi.ConnectionEventListener;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import jakarta.resource.spi.ConnectionEvent;
+import jakarta.resource.spi.ConnectionEventListener;
 
 /**
  * ConnectionEventListener.java
@@ -39,7 +37,7 @@
  */
 public class GeronimoConnectionEventListener implements ConnectionEventListener {
 
-    private static Logger log = LoggerFactory.getLogger(GeronimoConnectionEventListener.class.getName());
+    private static Logger log = Logger.getLogger(GeronimoConnectionEventListener.class.getName());
 
     private final ManagedConnectionInfo managedConnectionInfo;
     private final ConnectionInterceptor stack;
@@ -61,16 +59,16 @@
                     + ", actual "
                     + connectionEvent.getSource());
         }
-        if (log.isTraceEnabled()) {
-            log.trace("connectionClosed called with " + connectionEvent.getConnectionHandle() + " for MCI: " + managedConnectionInfo + " and MC: " + managedConnectionInfo.getManagedConnection());
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"connectionClosed called with " + connectionEvent.getConnectionHandle() + " for MCI: " + managedConnectionInfo + " and MC: " + managedConnectionInfo.getManagedConnection());
         }
         ConnectionInfo ci = new ConnectionInfo(managedConnectionInfo);
         ci.setConnectionHandle(connectionEvent.getConnectionHandle());
         try {
             stack.returnConnection(ci, ConnectionReturnAction.RETURN_HANDLE);
         } catch (Throwable e) {
-            if (log.isTraceEnabled()) {
-                log.trace("connectionClosed failed with " + connectionEvent.getConnectionHandle() + " for MCI: " + managedConnectionInfo + " and MC: " + managedConnectionInfo.getManagedConnection(), e);
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"connectionClosed failed with " + connectionEvent.getConnectionHandle() + " for MCI: " + managedConnectionInfo + " and MC: " + managedConnectionInfo.getManagedConnection(), e);
             }
             if (e instanceof Error) {
                 throw (Error)e;
@@ -86,7 +84,7 @@
                     + ", actual "
                     + connectionEvent.getSource());
         }
-        log.warn("connectionErrorOccurred called with " + connectionEvent.getConnectionHandle(), connectionEvent.getException());
+        log.log(Level.WARNING,"connectionErrorOccurred called with " + connectionEvent.getConnectionHandle(), connectionEvent.getException());
         boolean errorOccurred = this.errorOccurred;
         this.errorOccurred = true;
         if (!errorOccurred) {
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResource.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResource.java
index a8f7d4b..20885fd 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResource.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResource.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.LocalTransaction;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.LocalTransaction;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptor.java
index b6b8184..7ea5c9a 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptor.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 /**
  * LocalXAResourceInsertionInterceptor.java
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MCFConnectionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MCFConnectionInterceptor.java
index a7dec72..b5c0c7f 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MCFConnectionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MCFConnectionInterceptor.java
@@ -17,12 +17,11 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnection;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnection;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * MCFConnectionInterceptor.java
@@ -31,7 +30,7 @@
  */
 public class MCFConnectionInterceptor implements ConnectionInterceptor {
 
-    protected static final Logger log = LoggerFactory.getLogger(MCFConnectionInterceptor.class.getName());
+    protected static final Logger log = Logger.getLogger(MCFConnectionInterceptor.class.getName());
 
     private ConnectionInterceptor stack;
 
@@ -53,7 +52,7 @@
             mci.setConnectionEventListener(listener);
             mc.addConnectionEventListener(listener);
         } catch (ResourceException re) {
-            log.error("Error occurred creating ManagedConnection for " + connectionInfo, re);
+            log.log(Level.SEVERE, "Error occurred creating ManagedConnection for " + connectionInfo, re);
             throw re;
         }
     }
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ManagedConnectionInfo.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ManagedConnectionInfo.java
index 5fdf5fe..c24a64f 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ManagedConnectionInfo.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ManagedConnectionInfo.java
@@ -19,9 +19,9 @@
 
 import java.util.Collection;
 
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.spi.ManagedConnection;
+import jakarta.resource.spi.ManagedConnectionFactory;
 import javax.security.auth.Subject;
 import javax.transaction.xa.XAResource;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MultiPoolConnectionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MultiPoolConnectionInterceptor.java
index 8ac2fc2..3388a0b 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MultiPoolConnectionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/MultiPoolConnectionInterceptor.java
@@ -20,8 +20,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ConnectionRequestInfo;
 import javax.security.auth.Subject;
 
 import org.apache.geronimo.connector.outbound.connectionmanagerconfig.PoolingSupport;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/OutboundNamedXAResourceFactory.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/OutboundNamedXAResourceFactory.java
index 3ff4f8e..ee9a546 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/OutboundNamedXAResourceFactory.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/OutboundNamedXAResourceFactory.java
@@ -20,9 +20,9 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnectionFactory;
-import javax.transaction.SystemException;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnectionFactory;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java
index 7a04b45..62e179d 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolConnectionInterceptor.java
@@ -21,13 +21,11 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnection;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnection;
 
 /**
  * SinglePoolConnectionInterceptor chooses a single connection from the pool.  If selectOneAssumeMatch
@@ -41,7 +39,7 @@
  * @version $Rev$ $Date$
  */
 public class SinglePoolConnectionInterceptor extends AbstractSinglePoolConnectionInterceptor {
-    private static final Logger log = LoggerFactory.getLogger(SinglePoolConnectionInterceptor.class.getName());
+    private static final Logger log = Logger.getLogger(SinglePoolConnectionInterceptor.class.getName());
 
     private boolean selectOneAssumeMatch;
 
@@ -69,8 +67,8 @@
             if (pool.isEmpty()) {
                 next.getConnection(connectionInfo);
                 connectionCount++;
-                if (log.isTraceEnabled()) {
-                    log.trace("Supplying new connection MCI: " + connectionInfo.getManagedConnectionInfo() + " MC: " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " from pool: " + this);
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"Supplying new connection MCI: " + connectionInfo.getManagedConnectionInfo() + " MC: " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " from pool: " + this);
                 }
                 return;
             } else {
@@ -81,8 +79,8 @@
             }
             if (selectOneAssumeMatch) {
                 connectionInfo.setManagedConnectionInfo(newMCI);
-                if (log.isTraceEnabled()) {
-                    log.trace("Supplying pooled connection without checking matching MCI: " + connectionInfo.getManagedConnectionInfo() + " MC: " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " from pool: " + this);
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"Supplying pooled connection without checking matching MCI: " + connectionInfo.getManagedConnectionInfo() + " MC: " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " from pool: " + this);
                 }
                 return;
             }
@@ -101,8 +99,8 @@
             }
             if (matchedMC != null) {
                 connectionInfo.setManagedConnectionInfo(newMCI);
-                if (log.isTraceEnabled()) {
-                    log.trace("Supplying pooled connection  MCI: " + connectionInfo.getManagedConnectionInfo() + " from pool: " + this);
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"Supplying pooled connection  MCI: " + connectionInfo.getManagedConnectionInfo() + " from pool: " + this);
                 }
             } else {
                 //matching failed.
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolMatchAllConnectionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolMatchAllConnectionInterceptor.java
index 539f7af..3703d13 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolMatchAllConnectionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SinglePoolMatchAllConnectionInterceptor.java
@@ -22,10 +22,11 @@
 import java.util.List;
 import java.util.Map;
 import java.util.ArrayList;
+import java.util.logging.Level;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnection;
+import jakarta.resource.spi.ManagedConnectionFactory;
 
 /**
  * This pool is the most spec-compliant pool.  It can be used by itself with no partitioning.
@@ -66,8 +67,8 @@
                 if (matchedMC != null) {
                     connectionInfo.setManagedConnectionInfo(pool.get(matchedMC));
                     pool.remove(matchedMC);
-                    if (log.isTraceEnabled()) {
-                        log.trace("Supplying existing connection from pool " + this + " " + connectionInfo);
+                    if (log.isLoggable(Level.FINEST)) {
+                        log.log(Level.FINEST,"Supplying existing connection from pool " + this + " " + connectionInfo);
                     }
                     if (connectionCount < minSize) {
                         timer.schedule(new FillTask(connectionInfo), 10);
@@ -78,7 +79,7 @@
             //matching failed or pool is empty
             //if pool is at maximum size, pick a cx to kill
             if (connectionCount == maxSize) {
-                log.trace("Pool is at max size but no connections match, picking one to destroy");
+                log.log(Level.FINEST,"Pool is at max size but no connections match, picking one to destroy");
                 Iterator iterator = pool.entrySet().iterator();
                 ManagedConnectionInfo kill = (ManagedConnectionInfo) ((Map.Entry) iterator.next()).getValue();
                 iterator.remove();
@@ -87,8 +88,8 @@
             }
             next.getConnection(connectionInfo);
             connectionCount++;
-            if (log.isTraceEnabled()) {
-                log.trace("Supplying new connection from pool " + this + " " + connectionInfo);
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"Supplying new connection from pool " + this + " " + connectionInfo);
             }
             if (connectionCount < minSize) {
                 timer.schedule(new FillTask(connectionInfo), 10);
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SubjectInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SubjectInterceptor.java
index cbb62aa..542a252 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SubjectInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/SubjectInterceptor.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ApplicationServerInternalException;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ApplicationServerInternalException;
 import javax.security.auth.Subject;
 
 /**
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TCCLInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TCCLInterceptor.java
index 44d908b..07640a5 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TCCLInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TCCLInterceptor.java
@@ -16,7 +16,7 @@
  */
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ThreadLocalCachingConnectionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ThreadLocalCachingConnectionInterceptor.java
index bfa0b74..ffca34a 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ThreadLocalCachingConnectionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/ThreadLocalCachingConnectionInterceptor.java
@@ -19,7 +19,7 @@
 
 import java.util.Collections;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 /**
  *
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptor.java
index 14c6ce6..8c92cd1 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptor.java
@@ -19,16 +19,16 @@
 
 import java.util.HashSet;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.resource.ResourceException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
+import jakarta.resource.ResourceException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.connector.ConnectionReleaser;
 import org.apache.geronimo.connector.ConnectorTransactionContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * TransactionCachingInterceptor.java
@@ -51,7 +51,7 @@
  * @version 1.0
  */
 public class TransactionCachingInterceptor implements ConnectionInterceptor, ConnectionReleaser {
-    protected static Logger log = LoggerFactory.getLogger(TransactionCachingInterceptor.class.getName());
+    protected static Logger log = Logger.getLogger(TransactionCachingInterceptor.class.getName());
 
     private final ConnectionInterceptor next;
     private final TransactionManager transactionManager;
@@ -73,8 +73,8 @@
                 if (!managedConnectionInfos.containsUnshared(connectionInfo.getManagedConnectionInfo())) {
                     next.getConnection(connectionInfo);
                     managedConnectionInfos.addUnshared(connectionInfo.getManagedConnectionInfo());
-                    if (log.isTraceEnabled()) {
-                        log.trace("Enlisting connection already associated with handle " + infoString(connectionInfo));
+                    if (log.isLoggable(Level.FINEST)) {
+                        log.log(Level.FINEST,"Enlisting connection already associated with handle " + infoString(connectionInfo));
                     }
                 }
             } else {
@@ -86,22 +86,22 @@
                         //enlists connection
                         next.getConnection(connectionInfo);
                         managedConnectionInfos.addUnshared(previousMci);
-                        if (log.isTraceEnabled()) {
-                            log.trace("Enlisting existing connection associated with connection handle with current tx  " + infoString(connectionInfo));
+                        if (log.isLoggable(Level.FINEST)) {
+                            log.log(Level.FINEST,"Enlisting existing connection associated with connection handle with current tx  " + infoString(connectionInfo));
                         }
                     } else {
                         connectionInfo.setManagedConnectionInfo(managedConnectionInfo);
 
                         //return;
-                        if (log.isTraceEnabled()) {
-                            log.trace("supplying connection from tx cache  " + infoString(connectionInfo));
+                        if (log.isLoggable(Level.FINEST)) {
+                            log.log(Level.FINEST,"supplying connection from tx cache  " + infoString(connectionInfo));
                         }
                     }
                 } else {
                     next.getConnection(connectionInfo);
                     managedConnectionInfos.setShared(connectionInfo.getManagedConnectionInfo());
-                    if (log.isTraceEnabled()) {
-                        log.trace("supplying connection from pool " + connectionInfo.getConnectionHandle() + " for managed connection " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " to tx caching interceptor " + this);
+                    if (log.isLoggable(Level.FINEST)) {
+                        log.log(Level.FINEST,"supplying connection from pool " + connectionInfo.getConnectionHandle() + " for managed connection " + connectionInfo.getManagedConnectionInfo().getManagedConnection() + " to tx caching interceptor " + this);
                     }
                 }
             }
@@ -113,8 +113,8 @@
     public void returnConnection(ConnectionInfo connectionInfo, ConnectionReturnAction connectionReturnAction) {
 
         if (connectionReturnAction == ConnectionReturnAction.DESTROY) {
-            if (log.isTraceEnabled()) {
-                log.trace("destroying connection " + infoString(connectionInfo));
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"destroying connection " + infoString(connectionInfo));
             }
             next.returnConnection(connectionInfo, connectionReturnAction);
             return;
@@ -124,8 +124,8 @@
             transaction = transactionManager.getTransaction();
             if (transaction != null) {
                 if (TxUtil.isActive(transaction)) {
-                    if (log.isTraceEnabled()) {
-                        log.trace("tx active, not returning connection  " + infoString(connectionInfo));
+                    if (log.isLoggable(Level.FINEST)) {
+                        log.log(Level.FINEST,"tx active, not returning connection  " + infoString(connectionInfo));
                     }
                     return;
                 }
@@ -133,30 +133,30 @@
                 //so we don't close it twice
                 ManagedConnectionInfos managedConnectionInfos = ConnectorTransactionContext.get(transaction, this);
                 managedConnectionInfos.remove(connectionInfo.getManagedConnectionInfo());
-                if (log.isTraceEnabled()) {
-                    log.trace("tx ended, return during synchronization afterCompletion " + infoString(connectionInfo));
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"tx ended, return during synchronization afterCompletion " + infoString(connectionInfo));
                 }
             }
         } catch (SystemException e) {
             //ignore
         }
-        if (log.isTraceEnabled()) {
-            log.trace("tx ended, returning connection " + infoString(connectionInfo));
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"tx ended, returning connection " + infoString(connectionInfo));
         }
         internalReturn(connectionInfo, connectionReturnAction);
     }
 
     private void internalReturn(ConnectionInfo connectionInfo, ConnectionReturnAction connectionReturnAction) {
         if (connectionInfo.getManagedConnectionInfo().hasConnectionHandles()) {
-            if (log.isTraceEnabled()) {
-                log.trace("not returning connection from tx cache (has handles) " + infoString(connectionInfo));
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"not returning connection from tx cache (has handles) " + infoString(connectionInfo));
             }
             return;
         }
         //No transaction, no handles, we return it.
         next.returnConnection(connectionInfo, connectionReturnAction);
-        if (log.isTraceEnabled()) {
-            log.trace("completed return of connection through tx cache " + infoString(connectionInfo));
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"completed return of connection through tx cache " + infoString(connectionInfo));
         }
     }
 
@@ -168,14 +168,14 @@
         ManagedConnectionInfos managedConnectionInfos = (ManagedConnectionInfos) stuff;
         ManagedConnectionInfo sharedMCI = managedConnectionInfos.getShared();
         if (sharedMCI != null) {
-            if (log.isTraceEnabled()) {
-                log.trace("Transaction completed, attempting to return shared connection MCI: " + infoString(sharedMCI));
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"Transaction completed, attempting to return shared connection MCI: " + infoString(sharedMCI));
             }
             returnHandle(sharedMCI);
         }
         for (ManagedConnectionInfo managedConnectionInfo : managedConnectionInfos.getUnshared()) {
-            if (log.isTraceEnabled()) {
-                log.trace("Transaction completed, attempting to return unshared connection MCI: " + infoString(managedConnectionInfo));
+            if (log.isLoggable(Level.FINEST)) {
+                log.log(Level.FINEST,"Transaction completed, attempting to return unshared connection MCI: " + infoString(managedConnectionInfo));
             }
             returnHandle(managedConnectionInfo);
         }
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptor.java
index 345df16..bc5cd15 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptor.java
@@ -17,14 +17,14 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
+import jakarta.resource.ResourceException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 import javax.transaction.xa.XAResource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * TransactionEnlistingInterceptor.java
@@ -35,7 +35,7 @@
  * @version 1.0
  */
 public class TransactionEnlistingInterceptor implements ConnectionInterceptor {
-    protected static Logger log = LoggerFactory.getLogger(TransactionEnlistingInterceptor.class);
+    protected static Logger log = Logger.getLogger(TransactionEnlistingInterceptor.class.getName());
 
     private final ConnectionInterceptor next;
     private final TransactionManager transactionManager;
@@ -54,13 +54,13 @@
             Transaction transaction = TxUtil.getTransactionIfActive(transactionManager);
             if (transaction != null) {
                 XAResource xares = mci.getXAResource();
-                if (log.isTraceEnabled()) {
-                    log.trace("Enlisting connection " + connectionInfo + " with XAResource " + xares + " in transaction: " + transaction);
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"Enlisting connection " + connectionInfo + " with XAResource " + xares + " in transaction: " + transaction);
                 }
                 transaction.enlistResource(xares);
             } else {
-                if (log.isTraceEnabled()) {
-                    log.trace("not enlisting connection " + connectionInfo + " with XAResource " + mci.getXAResource() + " no transaction");
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"not enlisting connection " + connectionInfo + " with XAResource " + mci.getXAResource() + " no transaction");
                 }
             }
         } catch (SystemException e) {
@@ -92,19 +92,19 @@
             Transaction transaction = TxUtil.getTransactionIfActive(transactionManager);
             if (transaction != null) {
                 XAResource xares = mci.getXAResource();
-                if (log.isTraceEnabled()) {
-                    log.trace("Delisting connection " + connectionInfo + " with XAResource " + xares + " in transaction: " + transaction, new Exception("stack trace"));
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"Delisting connection " + connectionInfo + " with XAResource " + xares + " in transaction: " + transaction, new Exception("stack trace"));
                 }
                 transaction.delistResource(xares, XAResource.TMSUSPEND);
             } else {
-                if (log.isTraceEnabled()) {
-                    log.trace("not delisting connection " + connectionInfo + " with XAResource " + mci.getXAResource() + " no transaction");
+                if (log.isLoggable(Level.FINEST)) {
+                    log.log(Level.FINEST,"not delisting connection " + connectionInfo + " with XAResource " + mci.getXAResource() + " no transaction");
                 }
             }
 
         } catch (SystemException e) {
             //maybe we should warn???
-            log.info("Could not delist resource: " + connectionInfo  + " with XAResource: " + connectionInfo.getManagedConnectionInfo().getXAResource(), e);
+            log.log(Level.INFO,"Could not delist resource: " + connectionInfo  + " with XAResource: " + connectionInfo.getManagedConnectionInfo().getXAResource(), e);
             connectionReturnAction = ConnectionReturnAction.DESTROY;
         } catch (IllegalStateException e) {
             connectionReturnAction = ConnectionReturnAction.DESTROY;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TxUtil.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TxUtil.java
index ea6e602..a1ef3ea 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TxUtil.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/TxUtil.java
@@ -16,10 +16,10 @@
  */
 package org.apache.geronimo.connector.outbound;
 
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptor.java
index e0e3a64..d850971 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptor.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 import org.apache.geronimo.transaction.manager.WrapperNamedXAResource;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/LocalTransactions.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/LocalTransactions.java
index 4d3022c..da1159d 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/LocalTransactions.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/LocalTransactions.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound.connectionmanagerconfig;
 
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.connector.outbound.ConnectionInterceptor;
 import org.apache.geronimo.connector.outbound.LocalXAResourceInsertionInterceptor;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/NoTransactions.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/NoTransactions.java
index 536aea1..a002094 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/NoTransactions.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/NoTransactions.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound.connectionmanagerconfig;
 
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.connector.outbound.ConnectionInterceptor;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionLog.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionLog.java
index b11d24a..0a4fcd1 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionLog.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionLog.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound.connectionmanagerconfig;
 
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.connector.outbound.ConnectionInterceptor;
 import org.apache.geronimo.connector.outbound.TransactionCachingInterceptor;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionSupport.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionSupport.java
index f960b3f..d95a408 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionSupport.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/TransactionSupport.java
@@ -19,7 +19,7 @@
 
 import java.io.Serializable;
 
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.connector.outbound.ConnectionInterceptor;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/XATransactions.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/XATransactions.java
index e1ff6c9..5100987 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/XATransactions.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectionmanagerconfig/XATransactions.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound.connectionmanagerconfig;
 
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.connector.outbound.ConnectionInterceptor;
 import org.apache.geronimo.connector.outbound.ThreadLocalCachingConnectionInterceptor;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTracker.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTracker.java
index 26a94b4..5efe2f4 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTracker.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTracker.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound.connectiontracking;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 import org.apache.geronimo.connector.outbound.ConnectionInfo;
 import org.apache.geronimo.connector.outbound.ConnectionReturnAction;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinator.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinator.java
index 4b8ff0e..bebd22f 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinator.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinator.java
@@ -28,16 +28,16 @@
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.DissociatableManagedConnection;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.DissociatableManagedConnection;
 
 import org.apache.geronimo.connector.outbound.ConnectionInfo;
 import org.apache.geronimo.connector.outbound.ConnectionReturnAction;
 import org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor;
 import org.apache.geronimo.connector.outbound.ManagedConnectionInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * ConnectionTrackingCoordinator tracks connections that are in use by
@@ -56,7 +56,7 @@
  * @version $Rev$ $Date$
  */
 public class ConnectionTrackingCoordinator implements TrackedConnectionAssociator, ConnectionTracker {
-    private static final Logger log = LoggerFactory.getLogger(ConnectionTrackingCoordinator.class.getName());
+    private static final Logger log = Logger.getLogger(ConnectionTrackingCoordinator.class.getName());
 
     private final boolean lazyConnect;
     private final ThreadLocal<ConnectorInstanceContext> currentInstanceContexts = new ThreadLocal<ConnectorInstanceContext>();
@@ -191,8 +191,8 @@
                 infos.remove(connectionInfo);
             }
         } else {
-            if ( log.isTraceEnabled()) {
-                 log.trace("No infos found for handle " + connectionInfo.getConnectionHandle() +
+            if ( log.isLoggable(Level.FINEST)) {
+                 log.log(Level.FINEST,"No infos found for handle " + connectionInfo.getConnectionHandle() +
                          " for MCI: " + connectionInfo.getManagedConnectionInfo() +
                          " for MC: " + connectionInfo.getManagedConnectionInfo().getManagedConnection() +
                          " for CTI: " + connectionTrackingInterceptor, new Exception("Stack Trace"));
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/GeronimoTransactionListener.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/GeronimoTransactionListener.java
index c4837b4..569ed61 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/GeronimoTransactionListener.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/GeronimoTransactionListener.java
@@ -16,18 +16,19 @@
  */
 package org.apache.geronimo.connector.outbound.connectiontracking;
 
-import javax.resource.ResourceException;
-import javax.transaction.Transaction;
+import jakarta.resource.ResourceException;
+import jakarta.transaction.Transaction;
 
 import org.apache.geronimo.transaction.manager.TransactionManagerMonitor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * @version $Rev$ $Date$
  */
 public class GeronimoTransactionListener implements TransactionManagerMonitor {
-    private static final Logger log = LoggerFactory.getLogger(GeronimoTransactionListener.class);
+    private static final Logger log = Logger.getLogger(GeronimoTransactionListener.class.getName());
     private final TrackedConnectionAssociator trackedConnectionAssociator;
 
     public GeronimoTransactionListener(TrackedConnectionAssociator trackedConnectionAssociator) {
@@ -38,7 +39,7 @@
         try {
             trackedConnectionAssociator.newTransaction();
         } catch (ResourceException e) {
-            log.warn("Error notifying connection tranker of transaction association", e);
+            log.log(Level.WARNING, "Error notifying connection tranker of transaction association", e);
         }
     }
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/TrackedConnectionAssociator.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/TrackedConnectionAssociator.java
index 970d4ec..a9dc13f 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/TrackedConnectionAssociator.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/TrackedConnectionAssociator.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound.connectiontracking;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 /**
  *
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResource.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResource.java
index 4557483..235aa95 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResource.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResource.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.outbound.transactionlog;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.LocalTransaction;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.LocalTransaction;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResourceInsertionInterceptor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResourceInsertionInterceptor.java
index 6152712..cb17a48 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResourceInsertionInterceptor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/LogXAResourceInsertionInterceptor.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound.transactionlog;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 import org.apache.geronimo.connector.outbound.ConnectionInfo;
 import org.apache.geronimo.connector.outbound.ConnectionInterceptor;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
index 22f8449..8e6a393 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
@@ -21,13 +21,13 @@
 import java.util.Collections;
 import java.util.concurrent.Executor;
 
-import javax.resource.spi.work.ExecutionContext;
-import javax.resource.spi.work.Work;
-import javax.resource.spi.work.WorkCompletedException;
-import javax.resource.spi.work.WorkContext;
-import javax.resource.spi.work.WorkException;
-import javax.resource.spi.work.WorkListener;
-import javax.resource.spi.work.WorkManager;
+import jakarta.resource.spi.work.ExecutionContext;
+import jakarta.resource.spi.work.Work;
+import jakarta.resource.spi.work.WorkCompletedException;
+import jakarta.resource.spi.work.WorkContext;
+import jakarta.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkListener;
+import jakarta.resource.spi.work.WorkManager;
 
 import org.apache.geronimo.connector.work.pool.ScheduleWorkExecutor;
 import org.apache.geronimo.connector.work.pool.StartWorkExecutor;
@@ -114,14 +114,14 @@
     }
 
     /* (non-Javadoc)
-    * @see javax.resource.spi.work.WorkManager#doWork(javax.resource.spi.work.Work)
+    * @see jakarta.resource.spi.work.WorkManager#doWork(jakarta.resource.spi.work.Work)
     */
     public void doWork(Work work) throws WorkException {
         executeWork(new WorkerContext(work, workContextHandlers), syncWorkExecutor, syncWorkExecutorPool);
     }
 
     /* (non-Javadoc)
-     * @see javax.resource.spi.work.WorkManager#doWork(javax.resource.spi.work.Work, long, javax.resource.spi.work.ExecutionContext, javax.resource.spi.work.WorkListener)
+     * @see jakarta.resource.spi.work.WorkManager#doWork(jakarta.resource.spi.work.Work, long, jakarta.resource.spi.work.ExecutionContext, jakarta.resource.spi.work.WorkListener)
      */
     public void doWork(
             Work work,
@@ -136,7 +136,7 @@
     }
 
     /* (non-Javadoc)
-     * @see javax.resource.spi.work.WorkManager#startWork(javax.resource.spi.work.Work)
+     * @see jakarta.resource.spi.work.WorkManager#startWork(jakarta.resource.spi.work.Work)
      */
     public long startWork(Work work) throws WorkException {
         WorkerContext workWrapper = new WorkerContext(work, workContextHandlers);
@@ -146,7 +146,7 @@
     }
 
     /* (non-Javadoc)
-     * @see javax.resource.spi.work.WorkManager#startWork(javax.resource.spi.work.Work, long, javax.resource.spi.work.ExecutionContext, javax.resource.spi.work.WorkListener)
+     * @see jakarta.resource.spi.work.WorkManager#startWork(jakarta.resource.spi.work.Work, long, jakarta.resource.spi.work.ExecutionContext, jakarta.resource.spi.work.WorkListener)
      */
     public long startWork(
             Work work,
@@ -162,7 +162,7 @@
     }
 
     /* (non-Javadoc)
-     * @see javax.resource.spi.work.WorkManager#scheduleWork(javax.resource.spi.work.Work)
+     * @see jakarta.resource.spi.work.WorkManager#scheduleWork(jakarta.resource.spi.work.Work)
      */
     public void scheduleWork(Work work) throws WorkException {
         WorkerContext workWrapper = new WorkerContext(work, workContextHandlers);
@@ -171,7 +171,7 @@
     }
 
     /* (non-Javadoc)
-     * @see javax.resource.spi.work.WorkManager#scheduleWork(javax.resource.spi.work.Work, long, javax.resource.spi.work.ExecutionContext, javax.resource.spi.work.WorkListener)
+     * @see jakarta.resource.spi.work.WorkManager#scheduleWork(jakarta.resource.spi.work.Work, long, jakarta.resource.spi.work.ExecutionContext, jakarta.resource.spi.work.WorkListener)
      */
     public void scheduleWork(
             Work work,
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java
index 0a314f1..f31229c 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/HintsContextHandler.java
@@ -20,9 +20,9 @@
 
 package org.apache.geronimo.connector.work;
 
-import javax.resource.spi.work.HintsContext;
-import javax.resource.spi.work.WorkCompletedException;
-import javax.resource.spi.work.WorkContext;
+import jakarta.resource.spi.work.HintsContext;
+import jakarta.resource.spi.work.WorkCompletedException;
+import jakarta.resource.spi.work.WorkContext;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java
index d7433d6..dc8ff41 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/TransactionContextHandler.java
@@ -20,12 +20,12 @@
 
 package org.apache.geronimo.connector.work;
 
-import javax.resource.spi.work.TransactionContext;
-import javax.resource.spi.work.WorkCompletedException;
-import javax.resource.spi.work.WorkContext;
+import jakarta.resource.spi.work.TransactionContext;
+import jakarta.resource.spi.work.WorkCompletedException;
+import jakarta.resource.spi.work.WorkContext;
 import javax.transaction.xa.XAException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.SystemException;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.SystemException;
 
 import org.apache.geronimo.transaction.manager.XAWork;
 import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkContextHandler.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkContextHandler.java
index 5ea8d18..025d9e1 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkContextHandler.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkContextHandler.java
@@ -20,8 +20,8 @@
 
 package org.apache.geronimo.connector.work;
 
-import javax.resource.spi.work.WorkContext;
-import javax.resource.spi.work.WorkCompletedException;
+import jakarta.resource.spi.work.WorkContext;
+import jakarta.resource.spi.work.WorkCompletedException;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
index 39f2026..7d8e179 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/WorkerContext.java
@@ -23,24 +23,23 @@
 import java.util.List;
 import java.util.Collection;
 import java.util.concurrent.CountDownLatch;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.resource.NotSupportedException;
-import javax.resource.spi.work.ExecutionContext;
-import javax.resource.spi.work.WorkContext;
-import javax.resource.spi.work.WorkContextErrorCodes;
-import javax.resource.spi.work.WorkContextProvider;
-import javax.resource.spi.work.TransactionContext;
-import javax.resource.spi.work.Work;
-import javax.resource.spi.work.WorkAdapter;
-import javax.resource.spi.work.WorkCompletedException;
-import javax.resource.spi.work.WorkEvent;
-import javax.resource.spi.work.WorkException;
-import javax.resource.spi.work.WorkListener;
-import javax.resource.spi.work.WorkManager;
-import javax.resource.spi.work.WorkRejectedException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import jakarta.resource.NotSupportedException;
+import jakarta.resource.spi.work.ExecutionContext;
+import jakarta.resource.spi.work.WorkContext;
+import jakarta.resource.spi.work.WorkContextErrorCodes;
+import jakarta.resource.spi.work.WorkContextProvider;
+import jakarta.resource.spi.work.TransactionContext;
+import jakarta.resource.spi.work.Work;
+import jakarta.resource.spi.work.WorkAdapter;
+import jakarta.resource.spi.work.WorkCompletedException;
+import jakarta.resource.spi.work.WorkEvent;
+import jakarta.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkListener;
+import jakarta.resource.spi.work.WorkManager;
+import jakarta.resource.spi.work.WorkRejectedException;
 
 /**
  * Work wrapper providing an execution context to a Work instance.
@@ -49,7 +48,7 @@
  */
 public class WorkerContext implements Work {
 
-    private static final Logger log = LoggerFactory.getLogger(WorkerContext.class);
+    private static final Logger log = Logger.getLogger(WorkerContext.class.getName());
 
     private static final List<WorkContext> NO_INFLOW_CONTEXT = Collections.emptyList();
 
@@ -60,9 +59,9 @@
         public void workRejected(WorkEvent event) {
             if (event.getException() != null) {
                 if (event.getException() instanceof WorkCompletedException && event.getException().getCause() != null) {
-                    log.error(event.getWork().toString(), event.getException().getCause());
+                    log.log(Level.SEVERE, event.getWork().toString(), event.getException().getCause());
                 } else {
-                    log.error(event.getWork().toString(), event.getException());
+                    log.log(Level.SEVERE, event.getWork().toString(), event.getException());
                 }
             }
         }
@@ -151,7 +150,7 @@
 *                      the submitted Work instance must be executed.
      * @param workListener  an object which would be notified when the various
      * @param workContextHandlers WorkContextHandlers supported by this work manager
-     * @throws javax.resource.spi.work.WorkRejectedException if executionContext supplied yet Work implements WorkContextProvider
+     * @throws jakarta.resource.spi.work.WorkRejectedException if executionContext supplied yet Work implements WorkContextProvider
      */
     public WorkerContext(Work aWork,
                          long aStartTimeout,
@@ -176,7 +175,7 @@
     }
 
     /* (non-Javadoc)
-     * @see javax.resource.spi.work.Work#release()
+     * @see jakarta.resource.spi.work.Work#release()
      */
     public void release() {
         adaptee.release();
@@ -256,8 +255,8 @@
         }
         boolean isTimeout = acceptedTime + startTimeOut > 0 &&
                 System.currentTimeMillis() > acceptedTime + startTimeOut;
-        if (log.isDebugEnabled()) {
-            log.debug(this
+        if (log.isLoggable(Level.FINE)) {
+            log.log(Level.FINE, this
                     + " accepted at "
                     + acceptedTime
                     + (isTimeout ? " has timed out." : " has not timed out. ")
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java
index 603acb7..5a6b077 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java
@@ -19,7 +19,7 @@
 
 import java.util.concurrent.Executor;
 
-import javax.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkException;
 
 import org.apache.geronimo.connector.work.WorkerContext;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java
index d3df8e9..29f8c2b 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java
@@ -20,7 +20,7 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 
-import javax.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkException;
 
 import org.apache.geronimo.connector.work.WorkerContext;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java
index 2933eec..574ff64 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java
@@ -20,7 +20,7 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 
-import javax.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkException;
 
 import org.apache.geronimo.connector.work.WorkerContext;
 
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java
index 3efbe88..f0342d3 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java
@@ -18,7 +18,7 @@
 
 import java.util.concurrent.Executor;
 
-import javax.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkException;
 
 import org.apache.geronimo.connector.work.WorkerContext;
 
@@ -37,7 +37,7 @@
      *
      * @param work Work to be executed.
      *
-     * @throws javax.resource.spi.work.WorkException Indicates that the work has failed.
+     * @throws jakarta.resource.spi.work.WorkException Indicates that the work has failed.
      * @throws InterruptedException Indicates that the thread in charge of the
      * execution of the specified work has been interrupted.
      */
diff --git a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutorPoolImpl.java b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutorPoolImpl.java
index c55f5b0..f174f4f 100644
--- a/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutorPoolImpl.java
+++ b/geronimo-connector/src/main/java/org/apache/geronimo/connector/work/pool/WorkExecutorPoolImpl.java
@@ -20,10 +20,8 @@
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Based class for WorkExecutorPool. Sub-classes define the synchronization
@@ -38,7 +36,7 @@
      * A timed out pooled executor.
      */
     private ThreadPoolExecutor pooledExecutor;
-    private static Logger log = LoggerFactory.getLogger(WorkExecutorPoolImpl.class);
+    private static Logger log = Logger.getLogger(WorkExecutorPoolImpl.class.getName());
 
     /**
      * Creates a pool with the specified minimum and maximum sizes. The Channel
@@ -62,7 +60,7 @@
      */
     public void execute(Runnable work) {
         if(pooledExecutor.getPoolSize() == pooledExecutor.getMaximumPoolSize()) {
-            log.warn("Maximum Pool size has been exceeded.  Current Pool Size = "+pooledExecutor.getMaximumPoolSize());
+            log.log(Level.WARNING, "Maximum Pool size has been exceeded.  Current Pool Size = "+pooledExecutor.getMaximumPoolSize());
         }
 
         pooledExecutor.execute(work);
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java
index e7bd1a2..2300715 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/BootstrapContextTest.java
@@ -26,8 +26,8 @@
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
-import javax.resource.spi.XATerminator;
-import javax.resource.spi.work.WorkManager;
+import jakarta.resource.spi.XATerminator;
+import jakarta.resource.spi.work.WorkManager;
 
 import junit.framework.TestCase;
 import org.apache.geronimo.connector.work.GeronimoWorkManager;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockTransaction.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockTransaction.java
index 517a257..bca9e9e 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockTransaction.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockTransaction.java
@@ -17,12 +17,12 @@
 
 package org.apache.geronimo.connector;
 
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.RollbackException;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
 import javax.transaction.xa.XAResource;
 
 /**
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockWorkManager.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockWorkManager.java
index fc46d94..d88ea45 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockWorkManager.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/MockWorkManager.java
@@ -17,11 +17,11 @@
 
 package org.apache.geronimo.connector;
 
-import javax.resource.spi.work.ExecutionContext;
-import javax.resource.spi.work.Work;
-import javax.resource.spi.work.WorkException;
-import javax.resource.spi.work.WorkListener;
-import javax.resource.spi.work.WorkManager;
+import jakarta.resource.spi.work.ExecutionContext;
+import jakarta.resource.spi.work.Work;
+import jakarta.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkListener;
+import jakarta.resource.spi.work.WorkManager;
 
 /**
  * Dummy implementation of WorkManager interface for use in
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionExtension.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionExtension.java
index 44ada99..5e6e43e 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionExtension.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionExtension.java
@@ -16,7 +16,7 @@
  */
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.cci.Connection;
+import jakarta.resource.cci.Connection;
 import javax.security.auth.Subject;
 
 /**
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionFactoryExtension.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionFactoryExtension.java
index d1965ea..4be8d66 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionFactoryExtension.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/ConnectionFactoryExtension.java
@@ -16,7 +16,7 @@
  */
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.cci.ConnectionFactory;
+import jakarta.resource.cci.ConnectionFactory;
 
 /**
  *
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockActivationSpec.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockActivationSpec.java
index bed67f2..a8be63a 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockActivationSpec.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockActivationSpec.java
@@ -17,10 +17,10 @@
 
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.InvalidPropertyException;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.InvalidPropertyException;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.resource.ResourceException;
 
 /**
  *
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockCCILocalTransaction.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockCCILocalTransaction.java
index 6359f9e..cefde85 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockCCILocalTransaction.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockCCILocalTransaction.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.ResourceException;
-import javax.resource.cci.LocalTransaction;
+import jakarta.resource.ResourceException;
+import jakarta.resource.cci.LocalTransaction;
 
 /**
  *
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnection.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnection.java
index 3153996..581afa4 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnection.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnection.java
@@ -17,11 +17,11 @@
 
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.ResourceException;
-import javax.resource.cci.ConnectionMetaData;
-import javax.resource.cci.Interaction;
-import javax.resource.cci.LocalTransaction;
-import javax.resource.cci.ResultSetInfo;
+import jakarta.resource.ResourceException;
+import jakarta.resource.cci.ConnectionMetaData;
+import jakarta.resource.cci.Interaction;
+import jakarta.resource.cci.LocalTransaction;
+import jakarta.resource.cci.ResultSetInfo;
 import javax.security.auth.Subject;
 
 /**
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionFactory.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionFactory.java
index a63af59..e2a563b 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionFactory.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionFactory.java
@@ -19,12 +19,12 @@
 
 import javax.naming.NamingException;
 import javax.naming.Reference;
-import javax.resource.ResourceException;
-import javax.resource.cci.Connection;
-import javax.resource.cci.ConnectionSpec;
-import javax.resource.cci.RecordFactory;
-import javax.resource.cci.ResourceAdapterMetaData;
-import javax.resource.spi.ConnectionManager;
+import jakarta.resource.ResourceException;
+import jakarta.resource.cci.Connection;
+import jakarta.resource.cci.ConnectionSpec;
+import jakarta.resource.cci.RecordFactory;
+import jakarta.resource.cci.ResourceAdapterMetaData;
+import jakarta.resource.spi.ConnectionManager;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionRequestInfo.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionRequestInfo.java
index 8f3e9b7..01f76a4 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionRequestInfo.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockConnectionRequestInfo.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.cci.ConnectionSpec;
-import javax.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.cci.ConnectionSpec;
+import jakarta.resource.spi.ConnectionRequestInfo;
 
 /**
  *
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnection.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnection.java
index e743d66..2900f4a 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnection.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnection.java
@@ -24,13 +24,13 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionEvent;
-import javax.resource.spi.ConnectionEventListener;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.LocalTransaction;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionMetaData;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ConnectionEvent;
+import jakarta.resource.spi.ConnectionEventListener;
+import jakarta.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.spi.LocalTransaction;
+import jakarta.resource.spi.ManagedConnection;
+import jakarta.resource.spi.ManagedConnectionMetaData;
 import javax.security.auth.Subject;
 import javax.transaction.xa.XAResource;
 
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnectionFactory.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnectionFactory.java
index b32a008..10c9803 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnectionFactory.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockManagedConnectionFactory.java
@@ -23,12 +23,12 @@
 import java.util.Set;
 import java.util.Collections;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionFactory;
-import javax.resource.spi.ResourceAdapter;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ConnectionManager;
+import jakarta.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.spi.ManagedConnection;
+import jakarta.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.spi.ResourceAdapter;
 import javax.security.auth.Subject;
 
 /**
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockResourceAdapter.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockResourceAdapter.java
index c826690..e9b696a 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockResourceAdapter.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockResourceAdapter.java
@@ -17,12 +17,12 @@
 
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ActivationSpec;
-import javax.resource.spi.BootstrapContext;
-import javax.resource.spi.ResourceAdapter;
-import javax.resource.spi.ResourceAdapterInternalException;
-import javax.resource.spi.endpoint.MessageEndpointFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ActivationSpec;
+import jakarta.resource.spi.BootstrapContext;
+import jakarta.resource.spi.ResourceAdapter;
+import jakarta.resource.spi.ResourceAdapterInternalException;
+import jakarta.resource.spi.endpoint.MessageEndpointFactory;
 import javax.transaction.xa.XAResource;
 
 /**
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockSPILocalTransaction.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockSPILocalTransaction.java
index e4c84d4..23c6049 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockSPILocalTransaction.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/mock/MockSPILocalTransaction.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.mock;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.LocalTransaction;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.LocalTransaction;
 
 /**
  *
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolTest.java
index 5512b98..c227c18 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/AbstractSinglePoolTest.java
@@ -23,8 +23,8 @@
 import java.util.List;
 import java.util.ArrayList;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnectionFactory;
 
 import junit.framework.TestCase;
 import org.apache.geronimo.connector.mock.MockManagedConnectionFactory;
@@ -32,7 +32,7 @@
 /**
  * @version $Rev$ $Date$
  */
-public class AbstractSinglePoolTest extends TestCase {
+public abstract class AbstractSinglePoolTest extends TestCase {
 
     private ManagedConnectionFactory mcf = new MockManagedConnectionFactory();
     protected SwitchableInterceptor switchableInterceptor;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionInterceptorTestUtils.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionInterceptorTestUtils.java
index 2bed128..04a65f4 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionInterceptorTestUtils.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionInterceptorTestUtils.java
@@ -20,13 +20,13 @@
 import java.io.PrintWriter;
 import java.security.Principal;
 import java.util.Set;
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionEventListener;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.DissociatableManagedConnection;
-import javax.resource.spi.LocalTransaction;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionMetaData;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ConnectionEventListener;
+import jakarta.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.spi.DissociatableManagedConnection;
+import jakarta.resource.spi.LocalTransaction;
+import jakarta.resource.spi.ManagedConnection;
+import jakarta.resource.spi.ManagedConnectionMetaData;
 import javax.security.auth.Subject;
 import javax.transaction.xa.XAResource;
 
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerStressTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerStressTest.java
index 04f812b..c5a1c2f 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerStressTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerStressTest.java
@@ -18,6 +18,7 @@
 package org.apache.geronimo.connector.outbound;
 
 import java.util.HashSet;
+import java.util.logging.Level;
 
 import org.apache.geronimo.connector.outbound.connectiontracking.ConnectorInstanceContextImpl;
 
@@ -70,14 +71,14 @@
                                 long duration = System.currentTimeMillis() - start;
                                 if (duration > 100) {
                                     localSlowCount++;
-                                    log.debug("got a cx: " + i + ", time: " + (duration));
+                                    log.log(Level.FINE, "got a cx: " + i + ", time: " + (duration));
                                 }
                             } catch (Throwable throwable) {
-                                log.debug(throwable.getMessage(), throwable);
+                                log.log(Level.FINE, throwable.getMessage(), throwable);
                             }
                         }
                     } catch (Exception e) {
-                        log.info(e.getMessage(), e);
+                        log.log(Level.INFO, e.getMessage(), e);
                         ConnectionManagerStressTest.this.e = e;
                     } finally {
                         synchronized (stopBarrier) {
@@ -107,7 +108,7 @@
             while (stoppedThreads < threadCount) stopBarrier.wait();
         }
         long duration = System.currentTimeMillis() - startTime;
-        log.debug("no tx run, thread count: " + threadCount + ", connection count: " + repeatCount + ", duration: " + duration + ", total duration: " + totalDuration + ", ms per cx request: " + (totalDuration / (threadCount * repeatCount)) + ", slow cx request count: " + slowCount);
+        log.log(Level.FINE, "no tx run, thread count: " + threadCount + ", connection count: " + repeatCount + ", duration: " + duration + ", total duration: " + totalDuration + ", ms per cx request: " + (totalDuration / (threadCount * repeatCount)) + ", slow cx request count: " + slowCount);
         //return startTime;
         if (e != null) {
             throw e;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerTestUtils.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerTestUtils.java
index cff5c6f..83e03fe 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerTestUtils.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionManagerTestUtils.java
@@ -19,9 +19,10 @@
 
 import java.util.HashSet;
 import java.util.Set;
+import java.util.logging.Logger;
 
 import javax.security.auth.Subject;
-import javax.transaction.UserTransaction;
+import jakarta.transaction.UserTransaction;
 
 import org.apache.geronimo.connector.mock.ConnectionExtension;
 import org.apache.geronimo.connector.mock.MockConnectionFactory;
@@ -39,8 +40,6 @@
 import org.apache.geronimo.connector.outbound.connectiontracking.GeronimoTransactionListener;
 import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
 import org.apache.geronimo.transaction.manager.TransactionManagerImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import junit.framework.TestCase;
 
 /**
@@ -49,7 +48,7 @@
  * @version $Rev$ $Date$
  */
 public class ConnectionManagerTestUtils extends TestCase implements DefaultInterceptor {
-    protected static final Logger log = LoggerFactory.getLogger(ConnectionManagerTestUtils.class);
+    protected static final Logger log = Logger.getLogger(ConnectionManagerTestUtils.class.getName());
     
     protected boolean useTransactionCaching = true;
     protected boolean useLocalTransactions = false;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptorTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptorTest.java
index da255c0..7529a74 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptorTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptorTest.java
@@ -20,7 +20,7 @@
 import java.util.Collection;
 import java.util.HashSet;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTracker;
 
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptorTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptorTest.java
index e8ee30a..88b26fd 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptorTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/LocalXAResourceInsertionInterceptorTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.LocalTransaction;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.LocalTransaction;
 
 /**
  *
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/MultiPoolMinSizeTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/MultiPoolMinSizeTest.java
index 283b823..70b8cc5 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/MultiPoolMinSizeTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/MultiPoolMinSizeTest.java
@@ -20,8 +20,8 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnectionFactory;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnectionFactory;
 
 import junit.framework.TestCase;
 
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/SubjectInterceptorTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/SubjectInterceptorTest.java
index 3fd5291..335963c 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/SubjectInterceptorTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/SubjectInterceptorTest.java
@@ -18,7 +18,7 @@
 package org.apache.geronimo.connector.outbound;
 
 import javax.security.auth.Subject;
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 
 /**
  *
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptorTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptorTest.java
index 1782091..c21fc67 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptorTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionCachingInterceptorTest.java
@@ -17,10 +17,10 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.Status;
+import jakarta.resource.ResourceException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.Status;
 
 import org.apache.geronimo.connector.ConnectorTransactionContext;
 import org.apache.geronimo.transaction.manager.TransactionManagerImpl;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptorTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptorTest.java
index 8da1a07..8ebd576 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptorTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/TransactionEnlistingInterceptorTest.java
@@ -17,11 +17,11 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 
 import org.apache.geronimo.transaction.manager.NamedXAResource;
 import org.apache.geronimo.transaction.manager.TransactionManagerImpl;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptorTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptorTest.java
index 8e795ed..10705b9 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptorTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/XAResourceInsertionInterceptorTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.connector.outbound;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorProxyTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorProxyTest.java
index ec431b7..e9fd358 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorProxyTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorProxyTest.java
@@ -25,12 +25,12 @@
 import org.apache.geronimo.connector.outbound.GeronimoConnectionEventListener;
 
 import javax.security.auth.Subject;
-import javax.resource.ResourceException;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.ConnectionEventListener;
-import javax.resource.spi.LocalTransaction;
-import javax.resource.spi.ManagedConnectionMetaData;
+import jakarta.resource.ResourceException;
+import jakarta.resource.spi.ManagedConnection;
+import jakarta.resource.spi.ConnectionRequestInfo;
+import jakarta.resource.spi.ConnectionEventListener;
+import jakarta.resource.spi.LocalTransaction;
+import jakarta.resource.spi.ManagedConnectionMetaData;
 import javax.transaction.xa.XAResource;
 import java.util.Set;
 import java.util.HashSet;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorTest.java
index 76aa906..a39c396 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorTest.java
@@ -21,7 +21,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import javax.resource.ResourceException;
+import jakarta.resource.ResourceException;
 import javax.security.auth.Subject;
 
 import junit.framework.TestCase;
diff --git a/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java b/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java
index e7e63cd..1a0c952 100644
--- a/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java
+++ b/geronimo-connector/src/test/java/org/apache/geronimo/connector/work/PooledWorkManagerTest.java
@@ -25,18 +25,18 @@
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.Collections;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.resource.spi.work.ExecutionContext;
-import javax.resource.spi.work.Work;
-import javax.resource.spi.work.WorkEvent;
-import javax.resource.spi.work.WorkException;
-import javax.resource.spi.work.WorkListener;
+import jakarta.resource.spi.work.ExecutionContext;
+import jakarta.resource.spi.work.Work;
+import jakarta.resource.spi.work.WorkEvent;
+import jakarta.resource.spi.work.WorkException;
+import jakarta.resource.spi.work.WorkListener;
 
 import junit.framework.TestCase;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 import org.apache.geronimo.transaction.manager.XAWork;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Timing is crucial for this test case, which focuses on the synchronization
@@ -253,7 +253,7 @@
     }
 
     public static class DummyWork implements Work {
-        private Logger log = LoggerFactory.getLogger(getClass());
+        private Logger log = Logger.getLogger(getClass().getName());
 
         private final String name;
         private final int tempo;
@@ -270,7 +270,7 @@
             try {
                 Thread.sleep(tempo);
             } catch (InterruptedException e) {
-                log.debug(e.getMessage(), e);
+                log.log(Level.FINE, e.getMessage(), e);
             }
         }
 
@@ -280,7 +280,7 @@
     }
 
     public static class DummyWorkListener implements WorkListener {
-        private Logger log = LoggerFactory.getLogger(getClass());
+        private Logger log = Logger.getLogger(getClass().getName());
 
         public WorkEvent acceptedEvent;
         public WorkEvent rejectedEvent;
@@ -289,22 +289,22 @@
 
         public void workAccepted(WorkEvent e) {
             acceptedEvent = e;
-            log.debug("accepted: " + e);
+            log.log(Level.FINE, "accepted: " + e);
         }
 
         public void workRejected(WorkEvent e) {
             rejectedEvent = e;
-            log.debug("rejected: " + e);
+            log.log(Level.FINE,"rejected: " + e);
         }
 
         public void workStarted(WorkEvent e) {
             startedEvent = e;
-            log.debug("started: " + e);
+            log.log(Level.FINE,"started: " + e);
         }
 
         public void workCompleted(WorkEvent e) {
             completedEvent = e;
-            log.debug("completed: " + e);
+            log.log(Level.FINE,"completed: " + e);
         }
     }
 }
diff --git a/geronimo-transaction/pom.xml b/geronimo-transaction/pom.xml
index 8a0303f..a2a5c95 100644
--- a/geronimo-transaction/pom.xml
+++ b/geronimo-transaction/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.geronimo.components</groupId>
         <artifactId>geronimo-txmanager-parent</artifactId>
-        <version>3.1.6-SNAPSHOT</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>geronimo-transaction</artifactId>
@@ -33,7 +33,7 @@
     <packaging>bundle</packaging>
     <description>Apache Geronimo Transaction Manager</description>
 
-    <url>http://geronimo.apache.org/maven/${siteId}/${project.version}</url>
+    <url>https://geronimo.apache.org/maven/${siteId}/${project.version}</url>
     <properties>
         <siteId>components/${project.artifactId}</siteId>
 
@@ -43,25 +43,13 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <scope>provided</scope>
+            <groupId>jakarta.transaction</groupId>
+            <artifactId>jakarta.transaction-api</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-jta_1.1_spec</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
+            <groupId>jakarta.resource</groupId>
+            <artifactId>jakarta.resource-api</artifactId>
         </dependency>
 
         <dependency>
@@ -86,16 +74,12 @@
                         <Export-Package>org.apache.geronimo.transaction*;version=3.0</Export-Package>
                         <Import-Package>
                             org.objectweb.howl*;resolution:=optional,
-                            javax.resource.spi;version="1.5",
+                            jakarta.resource.spi;version="2.1.0",
                             *
                         </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-            </plugin>
         </plugins>
     </build>
 
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/GeronimoUserTransaction.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/GeronimoUserTransaction.java
index e2c180e..6071656 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/GeronimoUserTransaction.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/GeronimoUserTransaction.java
@@ -18,13 +18,13 @@
 package org.apache.geronimo.transaction;
 
 import java.io.Serializable;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-import javax.transaction.UserTransaction;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.UserTransaction;
 
 public final class GeronimoUserTransaction implements UserTransaction, Serializable {
     private static final long serialVersionUID = -7524804683512228998L;
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/log/HOWLLog.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/log/HOWLLog.java
index aea5ca6..4a39122 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/log/HOWLLog.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/log/HOWLLog.java
@@ -23,6 +23,8 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.transaction.xa.Xid;
 
 import org.apache.geronimo.transaction.manager.LogException;
@@ -42,8 +44,6 @@
 import org.objectweb.howl.log.xa.XACommittingTx;
 import org.objectweb.howl.log.xa.XALogRecord;
 import org.objectweb.howl.log.xa.XALogger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @version $Rev$ $Date$
@@ -56,7 +56,7 @@
 
     static final String[] TYPE_NAMES = {null, "PREPARE", "COMMIT", "ROLLBACK"};
 
-    private static final Logger log = LoggerFactory.getLogger(HOWLLog.class);
+    private static final Logger log = Logger.getLogger(HOWLLog.class.getName());
 
     private File serverBaseDir;
     private String logFileDir;
@@ -252,7 +252,7 @@
     public void doStart() throws Exception {
         started = true;
         setLogFileDir(logFileDir);
-        log.debug("Initiating transaction manager recovery");
+        log.log(Level.FINE, "Initiating transaction manager recovery");
         recovered = new HashMap<Xid, Recovery.XidBranchesPair>();
 
         logger.open(null);
@@ -260,7 +260,7 @@
         ReplayListener replayListener = new GeronimoReplayListener(xidFactory, recovered);
         logger.replayActiveTx(replayListener);
 
-        log.debug("In doubt transactions recovered from log");
+        log.log(Level.FINE, "In doubt transactions recovered from log");
     }
 
     public void doStop() throws Exception {
@@ -349,11 +349,11 @@
     }
 
     public Collection<Recovery.XidBranchesPair> recover(XidFactory xidFactory) throws LogException {
-        log.debug("Initiating transaction manager recovery");
+        log.log(Level.FINE, "Initiating transaction manager recovery");
         Map<Xid, Recovery.XidBranchesPair> recovered = new HashMap<Xid, Recovery.XidBranchesPair>();
         ReplayListener replayListener = new GeronimoReplayListener(xidFactory, recovered);
         logger.replayActiveTx(replayListener);
-        log.debug("In doubt transactions recovered from log");
+        log.log(Level.FINE, "In doubt transactions recovered from log");
         return recovered.values();
     }
 
@@ -408,7 +408,7 @@
 
                 Recovery.XidBranchesPair xidBranchesPair = new Recovery.XidBranchesPair(masterXid, tx);
                 recoveredTx.put(masterXid, xidBranchesPair);
-                log.debug("recovered prepare record for master xid: " + masterXid);
+                log.log(Level.FINE, "recovered prepare record for master xid: " + masterXid);
                 for (int i = 3; i < data.length; i += 2) {
                     byte[] branchBranchId = data[i];
                     String name = new String(data[i + 1]);
@@ -416,17 +416,17 @@
                     Xid branchXid = xidFactory.recover(formatId, globalId, branchBranchId);
                     TransactionBranchInfoImpl branchInfo = new TransactionBranchInfoImpl(branchXid, name);
                     xidBranchesPair.addBranch(branchInfo);
-                    log.debug("recovered branch for resource manager, branchId " + name + ", " + branchXid);
+                    log.log(Level.FINE, "recovered branch for resource manager, branchId " + name + ", " + branchXid);
                 }
             } else {
                 if(recordType != LogRecordType.END_OF_LOG) { // This value crops up every time the server is started
-                    log.warn("Received unexpected log record: " + lr +" ("+recordType+")");
+                    log.log(Level.WARNING, "Received unexpected log record: " + lr +" ("+recordType+")");
                 }
             }
         }
 
         public void onError(org.objectweb.howl.log.LogException exception) {
-            log.error("Error during recovery: ", exception);
+            log.log(Level.SEVERE, "Error during recovery: ", exception);
         }
 
         public LogRecord getLogRecord() {
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java
index 7c78190..7741797 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/CommitTask.java
@@ -21,21 +21,21 @@
 package org.apache.geronimo.transaction.manager;
 
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.transaction.Status;
-import javax.transaction.SystemException;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.Xid;
 import org.apache.geronimo.transaction.manager.TransactionImpl.ReturnableTransactionBranch;
 import org.apache.geronimo.transaction.manager.TransactionImpl.TransactionBranch;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @version $Rev$ $Date$
  */
 public class CommitTask implements Runnable {
-    private static final Logger log = LoggerFactory.getLogger(CommitTask.class);
+    private static final Logger log = Logger.getLogger(CommitTask.class.getName());
     private final Xid xid;
     private final List<TransactionBranch> rms;
     private final Object logMark;
@@ -65,7 +65,7 @@
                     remove(index);
                     evercommit = true;
                 } catch (XAException e) {
-                    log.error("Unexpected exception committing " + manager.getCommitter() + "; continuing to commit other RMs", e);
+                    log.log(Level.SEVERE, "Unexpected exception committing " + manager.getCommitter() + "; continuing to commit other RMs", e);
 
                     if (e.errorCode == XAException.XA_HEURRB) {
                         remove(index);
@@ -135,7 +135,7 @@
                     status = Status.STATUS_COMMITTED;
                 }
             } catch (LogException e) {
-                log.error("Unexpected exception logging commit completion for xid " + xid, e);
+                log.log(Level.SEVERE, "Unexpected exception logging commit completion for xid " + xid, e);
                 cause = (XAException) new XAException("Unexpected error logging commit completion for xid " + xid).initCause(e);
             }
         } else {
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
index 902a8e5..7c9eab7 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/GeronimoTransactionManager.java
@@ -20,11 +20,12 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-import javax.resource.spi.XATerminator;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
+
+import jakarta.resource.spi.XATerminator;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
@@ -54,7 +55,7 @@
     }
 
     /**
-     * @see javax.resource.spi.XATerminator#commit(javax.transaction.xa.Xid, boolean)
+     * @see jakarta.resource.spi.XATerminator#commit(javax.transaction.xa.Xid, boolean)
      */
     public void commit(Xid xid, boolean onePhase) throws XAException {
         Transaction importedTransaction;
@@ -75,7 +76,7 @@
     }
 
     /**
-     * @see javax.resource.spi.XATerminator#forget(javax.transaction.xa.Xid)
+     * @see jakarta.resource.spi.XATerminator#forget(javax.transaction.xa.Xid)
      */
     public void forget(Xid xid) throws XAException {
         Transaction importedTransaction;
@@ -96,7 +97,7 @@
     }
 
     /**
-     * @see javax.resource.spi.XATerminator#prepare(javax.transaction.xa.Xid)
+     * @see jakarta.resource.spi.XATerminator#prepare(javax.transaction.xa.Xid)
      */
     public int prepare(Xid xid) throws XAException {
         Transaction importedTransaction;
@@ -116,7 +117,7 @@
     }
 
     /**
-     * @see javax.resource.spi.XATerminator#recover(int)
+     * @see jakarta.resource.spi.XATerminator#recover(int)
      */
     public Xid[] recover(int flag) throws XAException {
         if (!isInRecovery) {
@@ -150,7 +151,7 @@
     }
 
     /**
-     * @see javax.resource.spi.XATerminator#rollback(javax.transaction.xa.Xid)
+     * @see jakarta.resource.spi.XATerminator#rollback(javax.transaction.xa.Xid)
      */
     public void rollback(Xid xid) throws XAException {
         Transaction importedTransaction;
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/NamedXAResourceFactory.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/NamedXAResourceFactory.java
index 7dbb1c5..c1dcb90 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/NamedXAResourceFactory.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/NamedXAResourceFactory.java
@@ -20,7 +20,7 @@
 
 package org.apache.geronimo.transaction.manager;
 
-import javax.transaction.SystemException;
+import jakarta.transaction.SystemException;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverTask.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverTask.java
index 65126b7..9032759 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverTask.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverTask.java
@@ -22,7 +22,7 @@
 
 import java.util.TimerTask;
 
-import javax.transaction.SystemException;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAException;
 
 /**
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverableTransactionManager.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverableTransactionManager.java
index 7e8d497..5e1625c 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverableTransactionManager.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoverableTransactionManager.java
@@ -20,7 +20,7 @@
 
 package org.apache.geronimo.transaction.manager;
 
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoveryImpl.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoveryImpl.java
index 0f5da05..a048ef2 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoveryImpl.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RecoveryImpl.java
@@ -27,18 +27,16 @@
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Collection;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.SystemException;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
 /**
  *
  *
@@ -46,7 +44,7 @@
  *
  * */
 public class RecoveryImpl implements Recovery {
-    private static final Logger log = LoggerFactory.getLogger("Recovery");
+    private static final Logger log = Logger.getLogger("Recovery");
 
 
     private final TransactionManagerImpl txManager;
@@ -71,11 +69,11 @@
         }
         for (XidBranchesPair xidBranchesPair : preparedXids) {
             Xid xid = xidBranchesPair.getXid();
-            log.trace("read prepared global xid from log: " + toString(xid));
+            log.log(Level.FINEST,"read prepared global xid from log: " + toString(xid));
             if (txManager.getXidFactory().matchesGlobalId(xid.getGlobalTransactionId())) {
                 ourXids.put(new ByteArrayWrapper(xid.getGlobalTransactionId()), xidBranchesPair);
                 for (TransactionBranchInfo transactionBranchInfo : xidBranchesPair.getBranches()) {
-                    log.trace("read branch from log: " + transactionBranchInfo.toString());
+                    log.log(Level.FINEST,"read branch from log: " + transactionBranchInfo.toString());
                     String name = transactionBranchInfo.getResourceName();
                     Set<XidBranchesPair> transactionsForName = nameToOurTxMap.get(name);
                     if (transactionsForName == null) {
@@ -85,7 +83,7 @@
                     transactionsForName.add(xidBranchesPair);
                 }
             } else {
-                log.trace("read external prepared xid from log: " + toString(xid));
+                log.log(Level.FINEST,"read external prepared xid from log: " + toString(xid));
                 TransactionImpl externalTx = new ExternalTransaction(xid, txManager, xidBranchesPair.getBranches());
                 externalXids.put(xid, externalTx);
                 externalGlobalIdMap.put(xid.getGlobalTransactionId(), externalTx);
@@ -100,10 +98,10 @@
         for (int i = 0; prepared != null && i < prepared.length; i++) {
             Xid xid = prepared[i];
             if (xid.getGlobalTransactionId() == null || xid.getBranchQualifier() == null) {
-                log.warn("Ignoring bad xid from\n name: " + xaResource.getName() + "\n " + toString(xid));
+                log.log(Level.WARNING, "Ignoring bad xid from\n name: " + xaResource.getName() + "\n " + toString(xid));
                 continue;
             }
-            log.trace("Considering recovered xid from\n name: " + xaResource.getName() + "\n " + toString(xid));
+            log.log(Level.FINEST,"Considering recovered xid from\n name: " + xaResource.getName() + "\n " + toString(xid));
             ByteArrayWrapper globalIdWrapper = new ByteArrayWrapper(xid.getGlobalTransactionId());
             XidBranchesPair xidNamesPair = ourXids.get(globalIdWrapper);
             
@@ -113,25 +111,25 @@
                 // Otherwise, wait for recoverResourceManager to be called for the actual XAResource 
                 // This is a bit wasteful, but given our management of XAResources by "name", is about the best we can do.
                 if (isNameInTransaction(xidNamesPair, name, xid)) {
-                    log.trace("This xid was prepared from this XAResource: committing");
+                    log.log(Level.FINEST,"This xid was prepared from this XAResource: committing");
                     commit(xaResource, xid);
                     removeNameFromTransaction(xidNamesPair, name, true);
                 } else {
-                    log.trace("This xid was prepared from another XAResource, ignoring");
+                    log.log(Level.FINEST,"This xid was prepared from another XAResource, ignoring");
                 }
             } else if (txManager.getXidFactory().matchesGlobalId(xid.getGlobalTransactionId())) {
                 //ours, but prepare not logged
-                log.trace("this xid was initiated from this tm but not prepared: rolling back");
+                log.log(Level.FINEST,"this xid was initiated from this tm but not prepared: rolling back");
                 rollback(xaResource, xid);
             } else if (txManager.getXidFactory().matchesBranchId(xid.getBranchQualifier())) {
                 //our branch, but we did not start this tx.
                 TransactionImpl externalTx = externalGlobalIdMap.get(xid.getGlobalTransactionId());
                 if (externalTx == null) {
                     //we did not prepare this branch, rollback.
-                    log.trace("this xid is from an external transaction and was not prepared: rolling back");
+                    log.log(Level.FINEST,"this xid is from an external transaction and was not prepared: rolling back");
                     rollback(xaResource, xid);
                 } else {
-                    log.trace("this xid is from an external transaction and was prepared in this tm.  Waiting for instructions from transaction originator");
+                    log.log(Level.FINEST,"this xid is from an external transaction and was prepared in this tm.  Waiting for instructions from transaction originator");
                     //we prepared this branch, must wait for commit/rollback command.
                     externalTx.addBranchXid(xaResource, xid);
                 }
@@ -174,7 +172,7 @@
                     xaResource.forget(xid);
                 } else {
                     recoveryErrors.add(e);
-                    log.error("Could not roll back", e);
+                    log.log(Level.SEVERE, "Could not roll back", e);
                 }
             } catch (XAException e2) {
                 if (e2.errorCode == XAException.XAER_NOTA) {
@@ -182,7 +180,7 @@
                     // ignore
                 } else {
                     recoveryErrors.add(e);
-                    log.error("Could not roll back", e);
+                    log.log(Level.SEVERE, "Could not roll back", e);
                 }
             }
         }
@@ -213,7 +211,7 @@
             }
         }
         if (warn && removed == 0) {
-            log.error("XAResource named: " + name + " returned branch xid for xid: " + xidBranchesPair.getXid() + " but was not registered with that transaction!");
+            log.log(Level.SEVERE, "XAResource named: " + name + " returned branch xid for xid: " + xidBranchesPair.getXid() + " but was not registered with that transaction!");
         }
         if (xidBranchesPair.getBranches().isEmpty() && 0 != removed ) {
             try {
@@ -221,7 +219,7 @@
                 txManager.getTransactionLog().commit(xidBranchesPair.getXid(), xidBranchesPair.getMark());
             } catch (LogException e) {
                 recoveryErrors.add(e);
-                log.error("Could not commit", e);
+                log.log(Level.SEVERE, "Could not commit", e);
             }
         }
     }
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RollbackTask.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RollbackTask.java
index 78f83bf..1176f1b 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RollbackTask.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/RollbackTask.java
@@ -21,21 +21,21 @@
 package org.apache.geronimo.transaction.manager;
 
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.transaction.Status;
-import javax.transaction.SystemException;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.Xid;
 import org.apache.geronimo.transaction.manager.TransactionImpl.ReturnableTransactionBranch;
 import org.apache.geronimo.transaction.manager.TransactionImpl.TransactionBranch;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @version $Rev$ $Date$
  */
 public class RollbackTask implements Runnable {
-    private static final Logger log = LoggerFactory.getLogger(RollbackTask.class);
+    private static final Logger log = Logger.getLogger(RollbackTask.class.getName());
     private final Xid xid;
     private final List<TransactionBranch> rms;
     private final Object logMark;
@@ -65,7 +65,7 @@
                     remove(index);
                     everRolledBack = true;
                 } catch (XAException e) {
-                    log.error("Unexpected exception committing " + manager.getCommitter() + "; continuing to commit other RMs", e);
+                    log.log(Level.SEVERE, "Unexpected exception committing " + manager.getCommitter() + "; continuing to commit other RMs", e);
 
                     if (e.errorCode >= XAException.XA_RBBASE && e.errorCode <= XAException.XA_RBEND || e.errorCode == XAException.XAER_NOTA) {
                         remove(index);
@@ -138,7 +138,7 @@
                     status = Status.STATUS_ROLLEDBACK;
                 }
             } catch (LogException e) {
-                log.error("Unexpected exception logging commit completion for xid " + xid, e);
+                log.log(Level.SEVERE, "Unexpected exception logging commit completion for xid " + xid, e);
                 cause = (XAException) new XAException("Unexpected error logging commit completion for xid " + xid).initCause(e);
             }
         } else {
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java
index f06deb6..0b8ad6b 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionImpl.java
@@ -25,19 +25,19 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 
 /**
@@ -46,7 +46,7 @@
  * @version $Rev$ $Date$
  */
 public class TransactionImpl implements Transaction {
-    private static final Logger log = LoggerFactory.getLogger("Transaction");
+    private static final Logger log = Logger.getLogger("Transaction");
 
     private final TransactionManagerImpl txManager;
     private final Xid xid;
@@ -195,7 +195,7 @@
                 try {
                     sameRM = xaRes.isSameRM(manager.getCommitter());
                 } catch (XAException e) {
-                    log.warn("Unexpected error checking for same RM", e);
+                    log.log(Level.WARNING, "Unexpected error checking for same RM", e);
                     continue;
                 }
                 if (sameRM) {
@@ -212,7 +212,7 @@
             activeXaResources.put(xaRes, addBranchXid(xaRes, branchId));
             return true;
         } catch (XAException e) {
-            log.warn("Unable to enlist XAResource " + xaRes + ", errorCode: " + e.errorCode, e);
+            log.log(Level.WARNING, "Unable to enlist XAResource " + xaRes + ", errorCode: " + e.errorCode, e);
             // mark status as rollback only because enlist resource failed
             setRollbackOnly(e);
             return false;
@@ -252,7 +252,7 @@
             }
             return true;
         } catch (XAException e) {
-            log.warn("Unable to delist XAResource " + xaRes + ", error code: " + e.errorCode, e);
+            log.log(Level.WARNING, "Unable to delist XAResource " + xaRes + ", error code: " + e.errorCode, e);
             return false;
         }
     }
@@ -469,7 +469,7 @@
                 try {
                     rollbackResources(resourceManagers, false);
                 } catch (Exception se) {
-                    log.error("Unable to rollback after failure to log prepare", se.getCause());
+                    log.log(Level.SEVERE, "Unable to rollback after failure to log prepare", se.getCause());
                 }
                 throw (SystemException) new SystemException("Error logging prepare; transaction was rolled back)").initCause(e);
             }
@@ -526,7 +526,7 @@
             try {
                 synch.beforeCompletion();
             } catch (Exception e) {
-                log.warn("Unexpected exception from beforeCompletion; transaction will roll back", e);
+                log.log(Level.WARNING,"Unexpected exception from beforeCompletion; transaction will roll back", e);
                 synchronized (this) {
                     markRollbackCause(e);
                     status = Status.STATUS_MARKED_ROLLBACK;
@@ -558,7 +558,7 @@
             try {
                 synch.afterCompletion(status);
             } catch (Exception e) {
-                log.warn("Unexpected exception from afterCompletion; continuing", e);
+                log.log(Level.WARNING,"Unexpected exception from afterCompletion; continuing", e);
             }
         }
     }
@@ -587,7 +587,7 @@
             try {
                 xaRes.end(manager.getBranchId(), flags);
             } catch (XAException e) {
-                log.warn("Error ending association for XAResource " + xaRes + "; transaction will roll back. XA error code: " + e.errorCode, e);
+                log.log(Level.WARNING,"Error ending association for XAResource " + xaRes + "; transaction will roll back. XA error code: " + e.errorCode, e);
                 synchronized (this) {
                     markRollbackCause(e);
                     status = Status.STATUS_MARKED_ROLLBACK;
@@ -778,7 +778,7 @@
             } else {
                 // if it isn't a named resource should we really stop all processing here!
                 // Maybe this would be better to handle else where and do we really want to prevent all processing of transactions?
-                log.error("Please correct the integration and supply a NamedXAResource", new IllegalStateException("Cannot log transactions as " + committer + " is not a NamedXAResource."));
+                log.log(Level.SEVERE, "Please correct the integration and supply a NamedXAResource", new IllegalStateException("Cannot log transactions as " + committer + " is not a NamedXAResource."));
                 return committer.toString();
             }
         }
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java
index 1cb3f58..1db17f0 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java
@@ -22,27 +22,28 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
-import javax.transaction.UserTransaction;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.TransactionSynchronizationRegistry;
+import jakarta.transaction.UserTransaction;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.Xid;
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
 import org.apache.geronimo.transaction.log.UnrecoverableLog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Simple implementation of a transaction manager.
@@ -50,8 +51,8 @@
  * @version $Rev$ $Date$
  */
 public class TransactionManagerImpl implements TransactionManager, UserTransaction, TransactionSynchronizationRegistry, XidImporter, MonitorableTransactionManager, RecoverableTransactionManager {
-    private static final Logger log = LoggerFactory.getLogger(TransactionManagerImpl.class);
-    private static final Logger recoveryLog = LoggerFactory.getLogger("RecoveryController");
+    private static final Logger log = Logger.getLogger(TransactionManagerImpl.class.getName());
+    private static final Logger recoveryLog = Logger.getLogger("RecoveryController");
 
     protected static final int DEFAULT_TIMEOUT = 600;
     protected static final byte[] DEFAULT_TM_ID = new byte[] {71,84,77,73,68};
@@ -355,7 +356,7 @@
 
     //Recovery
     public void recoveryError(Exception e) {
-        recoveryLog.error("Recovery error: {}", e.getMessage());
+        recoveryLog.log(Level.SEVERE, "Recovery error: {}", e.getMessage());
         recoveryErrors.add(e);
     }
 
@@ -401,7 +402,7 @@
             try {
                 listener.threadAssociated(tx);
             } catch (Exception e) {
-                log.warn("Error calling transaction association listener", e);
+                log.log(Level.WARNING, "Error calling transaction association listener", e);
             }
         }
     }
@@ -411,7 +412,7 @@
             try {
                 listener.threadUnassociated(tx);
             } catch (Exception e) {
-                log.warn("Error calling transaction association listener", e);
+                log.log(Level.WARNING, "Error calling transaction association listener", e);
             }
         }
     }
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerMonitor.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerMonitor.java
index 260a344..e8b223d 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerMonitor.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerMonitor.java
@@ -17,7 +17,7 @@
 package org.apache.geronimo.transaction.manager;
 
 import java.util.EventListener;
-import javax.transaction.Transaction;
+import jakarta.transaction.Transaction;
 
 /**
  * @version $Rev$ $Date$
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/WrapperNamedXAResource.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/WrapperNamedXAResource.java
index a0ab682..239cefd 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/WrapperNamedXAResource.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/WrapperNamedXAResource.java
@@ -20,9 +20,8 @@
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 import javax.transaction.xa.XAException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  *
@@ -31,7 +30,7 @@
  *
  * */
 public class WrapperNamedXAResource implements NamedXAResource {
-    protected static Logger log = LoggerFactory.getLogger(WrapperNamedXAResource.class.getName());
+    protected static Logger log = Logger.getLogger(WrapperNamedXAResource.class.getName());
 
     private final XAResource xaResource;
     private final String name;
@@ -48,22 +47,22 @@
     }
 
     public void commit(Xid xid, boolean onePhase) throws XAException {
-        if (log.isTraceEnabled()) {
-            log.trace("Commit called on XAResource " + getName() + "\n Xid: " + xid + "\n onePhase:" + onePhase);
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"Commit called on XAResource " + getName() + "\n Xid: " + xid + "\n onePhase:" + onePhase);
         }
         xaResource.commit(xid, onePhase);
     }                                                                                                                   
 
     public void end(Xid xid, int flags) throws XAException {
-        if (log.isTraceEnabled()) {
-            log.trace("End called on XAResource " + getName() + "\n Xid: " + xid + "\n flags:" + decodeFlags(flags));
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"End called on XAResource " + getName() + "\n Xid: " + xid + "\n flags:" + decodeFlags(flags));
         }
         xaResource.end(xid, flags);
     }
 
     public void forget(Xid xid) throws XAException {
-        if (log.isTraceEnabled()) {
-            log.trace("Forget called on XAResource " + getName() + "\n Xid: " + xid);
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"Forget called on XAResource " + getName() + "\n Xid: " + xid);
         }
         xaResource.forget(xid);
     }
@@ -80,22 +79,22 @@
     }
 
     public int prepare(Xid xid) throws XAException {
-        if (log.isTraceEnabled()) {
-            log.trace("Prepare called on XAResource " + getName() + "\n Xid: " + xid);
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"Prepare called on XAResource " + getName() + "\n Xid: " + xid);
         }
         return xaResource.prepare(xid);
     }
 
     public Xid[] recover(int flag) throws XAException {
-        if (log.isTraceEnabled()) {
-            log.trace("Recover called on XAResource " + getName() + "\n flags: " + decodeFlags(flag));
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"Recover called on XAResource " + getName() + "\n flags: " + decodeFlags(flag));
         }
         return xaResource.recover(flag);
     }
 
     public void rollback(Xid xid) throws XAException {
-        if (log.isTraceEnabled()) {
-            log.trace("Rollback called on XAResource " + getName() + "\n Xid: " + xid);
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"Rollback called on XAResource " + getName() + "\n Xid: " + xid);
         }
         xaResource.rollback(xid);
     }
@@ -105,8 +104,8 @@
     }
 
     public void start(Xid xid, int flags) throws XAException {
-        if (log.isTraceEnabled()) {
-            log.trace("Start called on XAResource " + getName() + "\n Xid: " + xid + "\n flags:" + decodeFlags(flags));
+        if (log.isLoggable(Level.FINEST)) {
+            log.log(Level.FINEST,"Start called on XAResource " + getName() + "\n Xid: " + xid + "\n flags:" + decodeFlags(flags));
         }
         xaResource.start(xid, flags);
     }
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XAWork.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XAWork.java
index e0f5e21..834d488 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XAWork.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XAWork.java
@@ -19,8 +19,8 @@
 
 import javax.transaction.xa.Xid;
 import javax.transaction.xa.XAException;
-import javax.transaction.SystemException;
-import javax.transaction.InvalidTransactionException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.InvalidTransactionException;
 
 import org.apache.geronimo.transaction.manager.ImportedTransactionActiveException;
 
diff --git a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XidImporter.java b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XidImporter.java
index b12744e..886a12d 100644
--- a/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XidImporter.java
+++ b/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/XidImporter.java
@@ -21,8 +21,8 @@
 
 import javax.transaction.xa.Xid;
 import javax.transaction.xa.XAException;
-import javax.transaction.Transaction;
-import javax.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.SystemException;
 
 /**
  *
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java
index b0e2683..1c44518 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/HeuristicTest.java
@@ -20,8 +20,8 @@
 
 package org.apache.geronimo.transaction.manager;
 
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
 import javax.transaction.xa.XAException;
 import junit.framework.TestCase;
 
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java
index 0152d57..6a69409 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/MockResource.java
@@ -20,7 +20,7 @@
 import java.util.Set;
 import java.util.HashSet;
 
-import javax.transaction.SystemException;
+import jakarta.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java
index 7624ca7..c110d4e 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/ProtocolTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.geronimo.transaction.manager;
 
-import javax.transaction.Transaction;
+import jakarta.transaction.Transaction;
 import javax.transaction.xa.XAResource;
 
 import junit.framework.TestCase;
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java
index 4f65c4e..c4e26a4 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerImplTest.java
@@ -19,10 +19,10 @@
 
 import java.util.Map;
 
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.Transaction;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Status;
+import jakarta.transaction.Transaction;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java
index ae6b03c..b174f6c 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionManagerTest.java
@@ -17,9 +17,9 @@
 
 package org.apache.geronimo.transaction.manager;
 
-import javax.transaction.Status;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.Status;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
 import javax.transaction.xa.XAResource;
 
 import junit.framework.TestCase;
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionSynchronizationRegistryTest.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionSynchronizationRegistryTest.java
index d1e6345..cd13fe9 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionSynchronizationRegistryTest.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/TransactionSynchronizationRegistryTest.java
@@ -17,12 +17,12 @@
 
 package org.apache.geronimo.transaction.manager;
 
-import javax.transaction.Synchronization;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.NotSupportedException;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.NotSupportedException;
 
 import junit.framework.TestCase;
 
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XATransactionTester.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XATransactionTester.java
index aa22f92..542f6c7 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XATransactionTester.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XATransactionTester.java
@@ -24,7 +24,7 @@
 import java.util.List;
 import javax.sql.XAConnection;
 import javax.sql.XADataSource;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.TransactionManager;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
 
diff --git a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java
index 72c51c0..9fa9d9c 100644
--- a/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java
+++ b/geronimo-transaction/src/test/java/org/apache/geronimo/transaction/manager/XidImporterTest.java
@@ -20,8 +20,8 @@
 import javax.transaction.xa.Xid;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.XAException;
-import javax.transaction.Transaction;
-import javax.transaction.Status;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.Status;
 
 import junit.framework.TestCase;
 
diff --git a/pom.xml b/pom.xml
index 7984c51..a98c580 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,15 +23,15 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache.geronimo.genesis</groupId>
-        <artifactId>genesis-java8-flava</artifactId>
-        <version>2.4</version>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>29</version>
         <relativePath />
     </parent>
 
     <groupId>org.apache.geronimo.components</groupId>
     <artifactId>geronimo-txmanager-parent</artifactId>
-    <version>3.1.6-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
     <name>Apache Geronimo TxManager</name>
 
@@ -44,11 +44,10 @@
         <tag>HEAD</tag>
     </scm>
 
-    <url>http://geronimo.apache.org/maven/${siteId}/${project.version}</url>
+    <url>https://geronimo.apache.org/maven/${siteId}/${project.version}</url>
     <properties>
         <siteId>components/${project.artifactId}</siteId>
 
-        <maven-shade-plugin.version>3.2.4</maven-shade-plugin.version>
         <build-helper-maven-plugin.version>3.3.0</build-helper-maven-plugin.version>
 
         <!-- Package attribute of the JAR artifact. -->
@@ -57,50 +56,33 @@
 
     <dependencyManagement>
         <dependencies>
-            <!-- internal -->
-
             <dependency>
                 <groupId>org.apache.geronimo.components</groupId>
                 <artifactId>geronimo-transaction</artifactId>
-                <version>3.1.6-SNAPSHOT</version>
+                <version>4.0.0-SNAPSHOT</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.geronimo.components</groupId>
                 <artifactId>geronimo-connector</artifactId>
-                <version>3.1.6-SNAPSHOT</version>
-            </dependency>
-
-            <!-- external -->
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-api</artifactId>
-                <version>1.5.5</version>
-                <scope>provided</scope>
+                <version>4.0.0-SNAPSHOT</version>
             </dependency>
 
             <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-simple</artifactId>
-                <version>1.5.5</version>
-                <scope>test</scope>
+                <groupId>jakarta.transaction</groupId>
+                <artifactId>jakarta.transaction-api</artifactId>
+                <version>2.0.1</version>
             </dependency>
 
             <dependency>
-                <groupId>org.apache.geronimo.specs</groupId>
-                <artifactId>geronimo-jta_1.1_spec</artifactId>
-                <version>1.1.1</version>
+                <groupId>jakarta.resource</groupId>
+                <artifactId>jakarta.resource-api</artifactId>
+                <version>2.1.0</version>
             </dependency>
 
             <dependency>
-                <groupId>org.apache.geronimo.specs</groupId>
-                <artifactId>geronimo-j2ee-connector_1.6_spec</artifactId>
-                <version>1.0</version>
-            </dependency>
-                
-            <dependency>
-                <groupId>org.apache.geronimo.specs</groupId>
-                <artifactId>geronimo-validation_1.0_spec</artifactId>
-                <version>1.1</version>
+                <groupId>jakarta.validation</groupId>
+                <artifactId>jakarta.validation-api</artifactId>
+                <version>3.0.2</version>
             </dependency>
 
             <dependency>
@@ -113,33 +95,26 @@
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
-                <version>3.8.2</version>
+                <version>4.13.2</version>
                 <scope>test</scope>
             </dependency>
 
         </dependencies>
     </dependencyManagement>
 
-    <profiles>
-        <profile>
-            <id>java8-doclint-disabled</id>
-            <activation>
-                <jdk>[1.8,)</jdk>
-            </activation>
-
-            <properties>
-                <additionalparam>-Xdoclint:none</additionalparam>
-                <javadoc.opts>-Xdoclint:none</javadoc.opts>
-            </properties>
-        </profile>
-    </profiles>
     <build>
         <pluginManagement>
             <plugins>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <configuration>
+                        <release>11</release>
+                    </configuration>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>2.9</version>
                     <executions>
                         <execution>
                             <id>attach-javadocs</id>
@@ -147,68 +122,42 @@
                                 <goal>jar</goal>
                             </goals>
                             <configuration>
-                                <additionalparam>${javadoc.opts}</additionalparam>
+                                <quiet>true</quiet>
+                                <release>11</release>
+                                <doclint>none</doclint>
                             </configuration>
                         </execution>
                     </executions>
                 </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <configuration>
+                        <archive>
+                            <manifestEntries>
+                                <Automatic-Module-Name>${jpms.module.name}</Automatic-Module-Name>
+                            </manifestEntries>
+                        </archive>
+                    </configuration>
+                </plugin>
+
                 <plugin>
                     <groupId>org.apache.felix</groupId>
                     <artifactId>maven-bundle-plugin</artifactId>
-                    <version>2.0.1</version>
+                    <version>5.1.8</version>
+                    <extensions>true</extensions>
                     <configuration>
                         <instructions>
+                            <Implementation-Title>${project.name}</Implementation-Title>
+                            <Implementation-Version>${project.version}</Implementation-Version>
+                            <Bundle-DocURL>${project.url}</Bundle-DocURL>
                             <_versionpolicy-impl>[$(version;==;$(@)),$(version;=+;$(@)))</_versionpolicy-impl>
                             <_versionpolicy-uses>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy-uses>
                             <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
                         </instructions>
                     </configuration>
                 </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-shade-plugin</artifactId>
-                    <version>${maven-shade-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <phase>package</phase>
-                            <goals>
-                                <goal>shade</goal>
-                            </goals>
-                            <configuration>
-                                <shadedArtifactAttached>true</shadedArtifactAttached>
-                                <shadedClassifierName>jakarta</shadedClassifierName>
-                                <createDependencyReducedPom>false</createDependencyReducedPom>
-                                <transformers>
-                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-                                </transformers>
-                                <artifactSet> <!-- don't include transitive deps -->
-                                    <includes>
-                                        <include>${project.groupId}:${project.artifactId}</include>
-                                    </includes>
-                                </artifactSet>
-                                <relocations>
-                                    <relocation>
-                                        <pattern>javax.resource</pattern>
-                                        <shadedPattern>jakarta.resource</shadedPattern>
-                                    </relocation>
-                                    <relocation>
-                                        <pattern>javax.transaction</pattern>
-                                        <shadedPattern>jakarta.transaction</shadedPattern>
-                                        <excludes>
-                                            <exclude>javax.transaction.xa.**</exclude>
-                                        </excludes>
-                                    </relocation>
-
-                                    <relocation>
-                                        <pattern>javax.validation</pattern>
-                                        <shadedPattern>jakarta.validation</shadedPattern>
-                                    </relocation>
-                                </relocations>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-
                 <!--
                 Build Helper Maven plugin -
                 https://www.mojohaus.org/build-helper-maven-plugin/
