You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ma...@apache.org on 2021/11/03 19:33:58 UTC

[activemq] 01/02: [AMQ-7309] Update to jakarta.jms/jakarta.jms-api:2.0.3

This is an automated email from the ASF dual-hosted git repository.

mattrpav pushed a commit to branch AMQ-7309
in repository https://gitbox.apache.org/repos/asf/activemq.git

commit 006336b3c39d2f5f17cd658bc924c68d91e667ed
Author: Matt Pavlovich <ma...@hyte.io>
AuthorDate: Thu Jul 15 11:35:53 2021 -0500

    [AMQ-7309] Update to jakarta.jms/jakarta.jms-api:2.0.3
    
     - API update only
     - Throw UnsupportedOperationException
     - Disable activemq-camel from build
     - Formatting fixes
     - Use geronimo-jms for osgi-related artifacts
     - Fix features.xml invalid xml header
     - Add a unit test to confirm JMS 2.0 methods for phase 1 (throw UnsupportedOperationException)
     - Add deliveryTime field to Message
---
 activemq-all/pom.xml                               |   8 +-
 .../java/org/apache/activemq/ActiveMQJms2Test.java | 169 +++++++++++++++++++++
 activemq-client/pom.xml                            |   7 +-
 .../org/apache/activemq/ActiveMQConnection.java    |  64 +++++++-
 .../apache/activemq/ActiveMQConnectionFactory.java |  33 ++++
 .../apache/activemq/ActiveMQMessageProducer.java   |  44 +++++-
 .../activemq/ActiveMQMessageProducerSupport.java   |  27 +++-
 .../org/apache/activemq/ActiveMQQueueSession.java  |  36 ++++-
 .../java/org/apache/activemq/ActiveMQSession.java  |  37 ++++-
 .../org/apache/activemq/ActiveMQTopicSession.java  |  36 ++++-
 .../activemq/ActiveMQXAConnectionFactory.java      |  13 +-
 .../activemq/ActiveMQXASslConnectionFactory.java   |  11 ++
 .../apache/activemq/command/ActiveMQMessage.java   |  21 +++
 .../java/org/apache/activemq/command/Message.java  |   2 +
 activemq-console/pom.xml                           |   4 +-
 activemq-jms-pool/pom.xml                          |   4 +-
 .../apache/activemq/jms/pool/PooledConnection.java |  60 ++++++++
 .../activemq/jms/pool/PooledConnectionFactory.java |  33 ++++
 .../apache/activemq/jms/pool/PooledProducer.java   |  63 ++++++++
 .../apache/activemq/jms/pool/PooledSession.java    |  30 ++++
 .../activemq/jms/pool/XAConnectionPoolTest.java    |  11 ++
 activemq-karaf-itest/pom.xml                       |   6 +
 .../itest/ActiveMQBrokerNdCamelFeatureTest.java    |   2 +-
 .../ActiveMQBrokerNdExternalCamelFeatureTest.java  |   2 +-
 activemq-karaf/pom.xml                             |  24 ++-
 .../src/main/resources/features-core.xml           |   2 -
 activemq-osgi/pom.xml                              |   6 +-
 .../activemq/ra/ActiveMQConnectionFactory.java     |  33 ++++
 .../apache/activemq/ra/InboundConnectionProxy.java |  58 +++++++
 .../activemq/ra/InboundConnectionProxyFactory.java |  33 ++++
 .../activemq/ra/InboundMessageProducerProxy.java   |  61 ++++++++
 .../apache/activemq/ra/InboundSessionProxy.java    |  30 ++++
 .../apache/activemq/ra/ManagedConnectionProxy.java |  58 +++++++
 .../apache/activemq/ra/ManagedSessionProxy.java    |  30 ++++
 activemq-rar/pom.xml                               |   8 +-
 activemq-tooling/activemq-maven-plugin/pom.xml     |   4 +-
 .../activemq-memtest-maven-plugin/pom.xml          |   4 +-
 .../activemq-perf-maven-plugin/pom.xml             |   4 +-
 activemq-unit-tests/pom.xml                        |   4 +-
 activemq-web-console/pom.xml                       |   4 +-
 activemq-web-demo/pom.xml                          |   4 +-
 assembly/pom.xml                                   |   4 +-
 assembly/src/main/descriptors/common-bin.xml       |   2 +-
 assembly/src/release/examples/amqp/java/pom.xml    |   6 +-
 .../examples/openwire/advanced-scenarios/pom.xml   |   7 +-
 .../src/release/examples/openwire/java/pom.xml     |   6 +-
 assembly/src/release/examples/stomp/java/pom.xml   |   6 +-
 pom.xml                                            |   6 +-
 48 files changed, 1062 insertions(+), 65 deletions(-)

diff --git a/activemq-all/pom.xml b/activemq-all/pom.xml
index 963b7b6..01630fa 100644
--- a/activemq-all/pom.xml
+++ b/activemq-all/pom.xml
@@ -104,7 +104,7 @@
                   <include>org.apache.activemq.protobuf:activemq-protobuf</include>
                   <include>org.fusesource.hawtbuf:hawtbuf</include>
                   <include>org.jasypt:jasypt</include>
-                  <include>org.apache.geronimo.specs:geronimo-jms_1.1_spec</include>
+                  <include>jakarta.jms:jakarta.jms-api</include>
                   <include>org.apache.geronimo.specs:geronimo-jta_1.1_spec</include>
                   <include>org.apache.geronimo.specs:geronimo-j2ee-management_1.1_spec</include>
                   <include>org.apache.geronimo.specs:geronimo-annotation_1.0_spec</include>
@@ -319,9 +319,9 @@
           <optional>true</optional>
         </dependency>
         <dependency>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-jms_1.1_spec</artifactId>
-          <version>1.1.1</version>
+          <groupId>jakarta.jms</groupId>
+          <artifactId>jakarta.jms-api</artifactId>
+          <version>2.0.3</version>
           <classifier>sources</classifier>
           <optional>true</optional>
         </dependency>
diff --git a/activemq-broker/src/test/java/org/apache/activemq/ActiveMQJms2Test.java b/activemq-broker/src/test/java/org/apache/activemq/ActiveMQJms2Test.java
new file mode 100644
index 0000000..51e2614
--- /dev/null
+++ b/activemq-broker/src/test/java/org/apache/activemq/ActiveMQJms2Test.java
@@ -0,0 +1,169 @@
+/**
+ * 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.
+ */
+
+package org.apache.activemq;
+
+import javax.jms.Connection;
+import javax.jms.JMSException;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ActiveMQJms2Test {
+
+    protected static ActiveMQConnectionFactory activemqConnectionFactory = null;
+
+    protected Connection connection = null;
+    protected Session session = null;
+    protected MessageProducer messageProducer = null;
+
+    @BeforeClass
+    public static void setUpClass() {
+        activemqConnectionFactory = new ActiveMQConnectionFactory("vm://localhost?marshal=false&broker.persistent=false"); 	
+    }
+
+    @AfterClass
+    public static void tearDownClass() {
+        activemqConnectionFactory = null;
+    }
+
+    @Before
+    public void setUp() throws JMSException {
+        connection = activemqConnectionFactory.createConnection();
+        connection.start();
+
+        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+        messageProducer = session.createProducer(session.createQueue("AMQ.JMS2.TEST"));
+    }
+
+    @After
+    public void tearDown() {
+        if(messageProducer != null) {
+            try { messageProducer.close(); } catch (Exception e) { } finally { messageProducer = null; }
+        }
+
+        if(session != null) {
+            try { session.close(); } catch (Exception e) { } finally { session = null; }
+        }
+
+        if(connection != null) {
+            try { connection.close(); } catch (Exception e) { } finally { connection = null; }
+        }
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testConnectionFactoryCreateContext() {
+        activemqConnectionFactory.createContext();
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testConnectionFactoryCreateContextSession() {
+        activemqConnectionFactory.createContext(Session.AUTO_ACKNOWLEDGE);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testConnectionFactoryCreateContextUserPass() {
+        activemqConnectionFactory.createContext("admin", "admin");
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testConnectionFactoryCreateContextUserPassSession() {
+        activemqConnectionFactory.createContext("admin", "admin", Session.AUTO_ACKNOWLEDGE);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testConnectionSharedConnectionConsumer() throws JMSException {
+        connection.createSharedConnectionConsumer(null, null, null, null, 10);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testConnectionSharedDurableConnectionConsumer() throws JMSException {
+        connection.createSharedDurableConnectionConsumer(null, null, null, null, 10);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testSessionAckMode() throws JMSException {
+        connection.createSession(Session.AUTO_ACKNOWLEDGE);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testSessionDurableConsumer() throws JMSException {
+        session.createDurableConsumer(null, null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testSessionDurableConsumerSelectorNoLocal() throws JMSException {
+        session.createDurableConsumer(null, null, null, true);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testSessionSharedConsumer() throws JMSException {
+        session.createSharedConsumer(null, null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testSessionSharedConsumerSelector() throws JMSException {
+        session.createSharedConsumer(null, null, null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testSessionSharedDurableConsumer() throws JMSException {
+        session.createSharedDurableConsumer(null, null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testSessionSharedDurableConsumerSelector() throws JMSException {
+        session.createSharedDurableConsumer(null, null, null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testProducerDeliveryDelayGet() throws JMSException {
+        messageProducer.getDeliveryDelay();
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testProducerDeliveryDelaySet() throws JMSException {
+        messageProducer.setDeliveryDelay(1000l);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testProducerSendMessageCompletionListener() throws JMSException {
+         messageProducer.send(session.createQueue("AMQ.TEST"), null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testProducerSendMessageQoSParamsCompletionListener() throws JMSException {
+         messageProducer.send(null, 1, 4, 0l, null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testProducerSendDestinationMessageCompletionListener() throws JMSException {
+         messageProducer.send(session.createQueue("AMQ.TEST"), null, null);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testProducerSendDestinationMessageQosParamsCompletionListener() throws JMSException {
+         messageProducer.send(session.createQueue("AMQ.TEST"), null, 1, 4, 0l, null);
+    }
+
+}
diff --git a/activemq-client/pom.xml b/activemq-client/pom.xml
index 800f7a3..2432a0a 100644
--- a/activemq-client/pom.xml
+++ b/activemq-client/pom.xml
@@ -43,8 +43,8 @@
       <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.fusesource.hawtbuf</groupId>
@@ -58,12 +58,13 @@
       <artifactId>geronimo-j2ee-management_1.1_spec</artifactId>
     </dependency>
 
-    <!-- for ftp blob upload/download -->
+    <!-- for ftp blob upload/download --> 
     <dependency>
       <groupId>commons-net</groupId>
       <artifactId>commons-net</artifactId>
       <optional>true</optional>
     </dependency>
+
     <!-- for zerconf discovery -->
     <dependency>
       <groupId>javax.jmdns</groupId>
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnection.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnection.java
index 5d11fb6..0a49f99 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnection.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnection.java
@@ -307,6 +307,44 @@ public class ActiveMQConnection implements Connection, TopicConnection, QueueCon
     /**
      * Creates a <CODE>Session</CODE> object.
      *
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @since 2.0
+     */
+	@Override
+	public Session createSession() throws JMSException {
+    	throw new UnsupportedOperationException("createSession() is unsupported"); 
+	}
+	
+	/**
+     * Creates a <CODE>Session</CODE> object.
+     *
+     * @param acknowledgeMode indicates whether the consumer or the client will
+     *                acknowledge any messages it receives; ignored if the
+     *                session is transacted. Legal values are
+     *                <code>Session.AUTO_ACKNOWLEDGE</code>,
+     *                <code>Session.CLIENT_ACKNOWLEDGE</code>, and
+     *                <code>Session.DUPS_OK_ACKNOWLEDGE</code>.
+     * @return a newly created session
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @see Session#AUTO_ACKNOWLEDGE
+     * @see Session#CLIENT_ACKNOWLEDGE
+     * @see Session#DUPS_OK_ACKNOWLEDGE
+     * @since 2.0
+     */
+    @Override
+	public Session createSession(int sessionMode) throws JMSException {
+    	throw new UnsupportedOperationException("createSession(int sessionMode) is unsupported"); 
+	}
+
+	/**
+     * Creates a <CODE>Session</CODE> object.
+     *
      * @param transacted indicates whether the session is transacted
      * @param acknowledgeMode indicates whether the consumer or the client will
      *                acknowledge any messages it receives; ignored if the
@@ -826,10 +864,32 @@ public class ActiveMQConnection implements Connection, TopicConnection, QueueCon
         return new ActiveMQConnectionConsumer(this, sessionPool, info);
     }
 
-    // Properties
-    // -------------------------------------------------------------------------
+    /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+    @Override
+  	public ConnectionConsumer createSharedConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, 
+  			                                                 int maxMessages) throws JMSException {
+    	throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+    }
 
     /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+  	@Override
+  	public ConnectionConsumer createSharedDurableConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool,
+  			                                                        int maxMessages) throws JMSException {
+  		throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+  	}
+    
+    // Properties
+    // -------------------------------------------------------------------------
+  
+	/**
      * Returns true if this connection has been started
      *
      * @return true if this Connection is started
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
index 2a868ee..915f103 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
@@ -27,6 +27,7 @@ import java.util.concurrent.RejectedExecutionHandler;
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
 import javax.jms.ExceptionListener;
+import javax.jms.JMSContext;
 import javax.jms.JMSException;
 import javax.jms.QueueConnection;
 import javax.jms.QueueConnectionFactory;
@@ -285,8 +286,40 @@ public class ActiveMQConnectionFactory extends JNDIBaseStorable implements Conne
     public TopicConnection createTopicConnection(String userName, String password) throws JMSException {
         return createActiveMQConnection(userName, password);
     }
+    
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+	public JMSContext createContext() {
+    	throw new UnsupportedOperationException("createContext() is not supported");
+	}
 
     /**
+     * @return Returns the JMSContext.
+     */
+	@Override
+	public JMSContext createContext(String userName, String password) {
+		throw new UnsupportedOperationException("createContext() is not supported");
+	}
+
+	/**
+     * @return Returns the JMSContext.
+     */
+	@Override
+	public JMSContext createContext(String userName, String password, int sessionMode) {
+		throw new UnsupportedOperationException("createContext() is not supported");
+	}
+
+	/**
+     * @return Returns the JMSContext.
+     */
+	@Override
+	public JMSContext createContext(int sessionMode) {
+		throw new UnsupportedOperationException("createContext() is not supported");
+	}
+
+	/**
      * @return the StatsImpl associated with this ConnectionFactory.
      */
     @Override
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducer.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducer.java
index 2fec295..c63ac2c 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducer.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducer.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicLong;
 
+import javax.jms.CompletionListener;
 import javax.jms.Destination;
 import javax.jms.IllegalStateException;
 import javax.jms.InvalidDestinationException;
@@ -220,10 +221,47 @@ public class ActiveMQMessageProducer extends ActiveMQMessageProducerSupport impl
      */
     @Override
     public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive) throws JMSException {
-        this.send(destination, message, deliveryMode, priority, timeToLive, null);
+        this.send(destination, message, deliveryMode, priority, timeToLive, (AsyncCallback)null);
     }
-
-    public void send(Message message, AsyncCallback onComplete) throws JMSException {
+    
+    /**
+     *
+     * @param message the message to send
+     * @param CompletionListener to callback
+     * @throws JMSException if the JMS provider fails to send the message due to
+     *                 some internal error.
+     * @throws UnsupportedOperationException if an invalid destination is
+     *                 specified.
+     * @throws InvalidDestinationException if a client uses this method with an
+     *                 invalid destination.
+     * @see javax.jms.Session#createProducer
+     * @since 2.0
+     */
+    @Override
+	public void send(Message message, CompletionListener completionListener) throws JMSException {
+        throw new UnsupportedOperationException("send(Message, CompletionListener) is not supported");
+		
+	}
+
+	@Override
+	public void send(Message message, int deliveryMode, int priority, long timeToLive,
+			CompletionListener completionListener) throws JMSException {
+		throw new UnsupportedOperationException("send(Message, deliveryMode, priority, timetoLive, CompletionListener) is not supported");
+	}
+
+	@Override
+	public void send(Destination destination, Message message, CompletionListener completionListener)
+			throws JMSException {
+		throw new UnsupportedOperationException("send(Destination, Message, CompletionListener) is not supported");
+	}
+
+	@Override
+	public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive,
+			CompletionListener completionListener) throws JMSException {
+		throw new UnsupportedOperationException("send(Destination, Message, deliveryMode, priority, timetoLive, CompletionListener) is not supported");
+	}
+
+	public void send(Message message, AsyncCallback onComplete) throws JMSException {
         this.send(this.getDestination(),
                   message,
                   this.defaultDeliveryMode,
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducerSupport.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducerSupport.java
index 1f8ce41..4ab73c3 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducerSupport.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQMessageProducerSupport.java
@@ -42,6 +42,31 @@ public abstract class ActiveMQMessageProducerSupport implements MessageProducer,
         disableMessageTimestamp = session.connection.isDisableTimeStampsByDefault();
     }
 
+	/**
+     * Gets the delivery delay associated with this <CODE>MessageProducer</CODE>.
+     *
+     * @return this producer's <CODE>DeliveryDely/ <CODE>
+     * @throws JMSException if the JMS provider fails to close the producer due to
+     *                      some internal error.
+     * @since 2.0
+     */
+    @Override
+	public void setDeliveryDelay(long deliveryDelay) throws JMSException {
+    	throw new UnsupportedOperationException("setDeliveryDelay() is not supported");
+	}
+
+	/**
+     * Gets the delivery delay value for this <CODE>MessageProducer</CODE>.
+     *
+     * @return the delivery delay for this messageProducer
+     * @throws javax.jms.JMSException if the JMS provider fails to determine if deliver delay is
+     *                      disabled due to some internal error.
+     */
+	@Override
+	public long getDeliveryDelay() throws JMSException {
+    	throw new UnsupportedOperationException("getDeliveryDelay() is not supported");
+	}
+    
     /**
      * Sets whether message IDs are disabled.
      * <P>
@@ -66,7 +91,7 @@ public abstract class ActiveMQMessageProducerSupport implements MessageProducer,
         this.disableMessageID = value;
     }
 
-    /**
+	/**
      * Gets an indication of whether message IDs are disabled.
      *
      * @return an indication of whether message IDs are disabled
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQQueueSession.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQQueueSession.java
index 66170e5..f29b12a 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQQueueSession.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQQueueSession.java
@@ -104,8 +104,42 @@ public class ActiveMQQueueSession implements QueueSession {
         }
         return next.createConsumer(destination, messageSelector, noLocal);
     }
-
+    
     @Override
+	public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName) throws JMSException {
+        throw new IllegalStateException("Operation not supported by a QueueSession");
+    }
+
+	@Override
+	public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)
+			throws JMSException {
+        throw new IllegalStateException("Operation not supported by a QueueSession");
+	}
+
+	@Override
+	public MessageConsumer createDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new IllegalStateException("Operation not supported by a QueueSession");
+
+	}
+
+	@Override
+	public MessageConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)
+			throws JMSException {
+        throw new IllegalStateException("Operation not supported by a QueueSession");
+	}
+
+	@Override
+	public MessageConsumer createSharedDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new IllegalStateException("Operation not supported by a QueueSession");
+	}
+
+	@Override
+	public MessageConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector)
+			throws JMSException {
+        throw new IllegalStateException("Operation not supported by a QueueSession");
+	}
+
+	@Override
     public TopicSubscriber createDurableSubscriber(Topic topic, String name) throws JMSException {
         throw new IllegalStateException("Operation not supported by a QueueSession");
     }
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQSession.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQSession.java
index 35bddf2..cca57c7 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQSession.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQSession.java
@@ -1381,8 +1381,41 @@ public class ActiveMQSession implements Session, QueueSession, TopicSession, Sta
         }
         return new ActiveMQTopic(topicName);
     }
-
-    /**
+   
+    @Override
+	public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName) throws JMSException {
+		throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName) is not supported");
+	}
+
+	@Override
+	public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)
+			throws JMSException {
+		throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName, messageSelector) is not supported");
+	}
+
+	@Override
+	public MessageConsumer createDurableConsumer(Topic topic, String name) throws JMSException {
+		throw new UnsupportedOperationException("createDurableConsumer(Topic, name) is not supported");
+	}
+
+	@Override
+	public MessageConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)
+			throws JMSException {
+		throw new UnsupportedOperationException("createDurableConsumer(Topic, name, messageSelector, noLocal) is not supported");
+	}
+
+	@Override
+	public MessageConsumer createSharedDurableConsumer(Topic topic, String name) throws JMSException {
+		throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name) is not supported");
+	}
+
+	@Override
+	public MessageConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector)
+			throws JMSException {
+		throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name, messageSelector) is not supported");
+	}
+
+	/**
      * Creates a durable subscriber to the specified topic.
      * <P>
      * If a client needs to receive all the messages published on a topic,
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQTopicSession.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQTopicSession.java
index ea92a71..2b8497b 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQTopicSession.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQTopicSession.java
@@ -136,8 +136,42 @@ public class ActiveMQTopicSession implements TopicSession {
         }
         return next.createConsumer(destination, messageSelector, noLocal);
     }
+    
+    @Override
+	public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName) throws JMSException {
+        throw new IllegalStateException("Operation not supported by a TopicSession");
+	}
 
-    /**
+	@Override
+	public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector)
+			throws JMSException {
+        throw new IllegalStateException("Operation not supported by a TopicSession");
+	}
+
+	@Override
+	public MessageConsumer createDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new IllegalStateException("Operation not supported by a TopicSession");
+	}
+
+	@Override
+	public MessageConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal)
+			throws JMSException {
+        throw new IllegalStateException("Operation not supported by a TopicSession");
+	}
+
+	@Override
+	public MessageConsumer createSharedDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new IllegalStateException("Operation not supported by a TopicSession");
+
+	}
+
+	@Override
+	public MessageConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector)
+			throws JMSException {
+        throw new IllegalStateException("Operation not supported by a TopicSession");
+	}
+
+	/**
      * @param topic
      * @param name
      * @return
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java
index c383685..5a1adad 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java
@@ -22,6 +22,7 @@ import java.util.Properties;
 import javax.jms.JMSException;
 import javax.jms.XAConnection;
 import javax.jms.XAConnectionFactory;
+import javax.jms.XAJMSContext;
 import javax.jms.XAQueueConnection;
 import javax.jms.XAQueueConnectionFactory;
 import javax.jms.XATopicConnection;
@@ -79,8 +80,18 @@ public class ActiveMQXAConnectionFactory extends ActiveMQConnectionFactory imple
     public XATopicConnection createXATopicConnection(String userName, String password) throws JMSException {
         return (XATopicConnection) createActiveMQConnection(userName, password);
     }
+    
+    @Override
+	public XAJMSContext createXAContext() {
+		throw new UnsupportedOperationException("createXAContext() is not supported");
+	}
+
+	@Override
+	public XAJMSContext createXAContext(String userName, String password) {
+		throw new UnsupportedOperationException("createXAContext(userName, password) is not supported");
+	}
 
-    protected ActiveMQConnection createActiveMQConnection(Transport transport, JMSStatsImpl stats) throws Exception {
+	protected ActiveMQConnection createActiveMQConnection(Transport transport, JMSStatsImpl stats) throws Exception {
         ActiveMQXAConnection connection = new ActiveMQXAConnection(transport, getClientIdGenerator(), getConnectionIdGenerator(), stats);
         configureXAConnection(connection);
         return connection;
diff --git a/activemq-client/src/main/java/org/apache/activemq/ActiveMQXASslConnectionFactory.java b/activemq-client/src/main/java/org/apache/activemq/ActiveMQXASslConnectionFactory.java
index e6e5726..5c42fed 100644
--- a/activemq-client/src/main/java/org/apache/activemq/ActiveMQXASslConnectionFactory.java
+++ b/activemq-client/src/main/java/org/apache/activemq/ActiveMQXASslConnectionFactory.java
@@ -22,6 +22,7 @@ import java.util.Properties;
 import javax.jms.JMSException;
 import javax.jms.XAConnection;
 import javax.jms.XAConnectionFactory;
+import javax.jms.XAJMSContext;
 import javax.jms.XAQueueConnection;
 import javax.jms.XAQueueConnectionFactory;
 import javax.jms.XATopicConnection;
@@ -74,6 +75,16 @@ public class ActiveMQXASslConnectionFactory extends ActiveMQSslConnectionFactory
     }
 
     @Override
+	public XAJMSContext createXAContext() {
+		throw new UnsupportedOperationException("createXAContext() is not supported");
+	}
+
+	@Override
+	public XAJMSContext createXAContext(String userName, String password) {
+		throw new UnsupportedOperationException("createXAContext(userName, password) is not supported");
+	}
+
+	@Override
     protected ActiveMQConnection createActiveMQConnection(Transport transport, JMSStatsImpl stats) throws Exception {
         ActiveMQXAConnection connection = new ActiveMQXAConnection(transport, getClientIdGenerator(), getConnectionIdGenerator(), stats);
         configureXAConnection(connection);
diff --git a/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQMessage.java b/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQMessage.java
index f0dd802..1dd28ee 100644
--- a/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQMessage.java
+++ b/activemq-client/src/main/java/org/apache/activemq/command/ActiveMQMessage.java
@@ -784,4 +784,25 @@ public class ActiveMQMessage extends Message implements org.apache.activemq.Mess
         //which is already marshalled
         return true;
     }
+
+	@Override
+	public long getJMSDeliveryTime() throws JMSException {
+        return deliveryTime;
+	}
+
+	@Override
+	public void setJMSDeliveryTime(long deliveryTime) throws JMSException {
+        this.deliveryTime = deliveryTime;
+	}
+
+	@Override
+	public <T> T getBody(Class<T> c) throws JMSException {
+        throw new UnsupportedOperationException("getBody(Class<T>) is not supported");
+	}
+
+	@Override
+	public boolean isBodyAssignableTo(Class c) throws JMSException {
+        throw new UnsupportedOperationException("isBodyAssignableTo(Class) is not supported");
+	}
+
 }
diff --git a/activemq-client/src/main/java/org/apache/activemq/command/Message.java b/activemq-client/src/main/java/org/apache/activemq/command/Message.java
index 65b560d..44f8094 100644
--- a/activemq-client/src/main/java/org/apache/activemq/command/Message.java
+++ b/activemq-client/src/main/java/org/apache/activemq/command/Message.java
@@ -62,6 +62,7 @@ public abstract class Message extends BaseCommand implements MarshallAware, Mess
     protected ActiveMQDestination destination;
     protected TransactionId transactionId;
 
+    protected long deliveryTime;
     protected long expiration;
     protected long timestamp;
     protected long arrival;
@@ -143,6 +144,7 @@ public abstract class Message extends BaseCommand implements MarshallAware, Mess
         copy.messageId = messageId != null ? messageId.copy() : null;
         copy.originalDestination = originalDestination;
         copy.originalTransactionId = originalTransactionId;
+        copy.deliveryTime = deliveryTime;
         copy.expiration = expiration;
         copy.timestamp = timestamp;
         copy.correlationId = correlationId;
diff --git a/activemq-console/pom.xml b/activemq-console/pom.xml
index b9498b8..55726f8 100644
--- a/activemq-console/pom.xml
+++ b/activemq-console/pom.xml
@@ -56,8 +56,8 @@
 
     <!-- geronimo -->
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
diff --git a/activemq-jms-pool/pom.xml b/activemq-jms-pool/pom.xml
index 924ce8e..1619955 100644
--- a/activemq-jms-pool/pom.xml
+++ b/activemq-jms-pool/pom.xml
@@ -40,8 +40,8 @@
       <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.components</groupId>
diff --git a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java
index 038e13c..530ed22 100644
--- a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java
+++ b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnection.java
@@ -162,6 +162,44 @@ public class PooledConnection implements TopicConnection, QueueConnection, Poole
         return (TopicSession) createSession(transacted, ackMode);
     }
 
+    /**
+     * Creates a <CODE>Session</CODE> object.
+     *
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @since 2.0
+     */
+    @Override
+    public Session createSession() throws JMSException {
+    	throw new UnsupportedOperationException("createSession() is unsupported"); 
+    }
+
+    /**
+     * Creates a <CODE>Session</CODE> object.
+     *
+     * @param acknowledgeMode indicates whether the consumer or the client will
+     *                acknowledge any messages it receives; ignored if the
+     *                session is transacted. Legal values are
+     *                <code>Session.AUTO_ACKNOWLEDGE</code>,
+     *                <code>Session.CLIENT_ACKNOWLEDGE</code>, and
+     *                <code>Session.DUPS_OK_ACKNOWLEDGE</code>.
+     * @return a newly created session
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @see Session#AUTO_ACKNOWLEDGE
+     * @see Session#CLIENT_ACKNOWLEDGE
+     * @see Session#DUPS_OK_ACKNOWLEDGE
+     * @since 2.0
+     */
+    @Override
+	public Session createSession(int sessionMode) throws JMSException {
+    	throw new UnsupportedOperationException("createSession(int sessionMode) is unsupported"); 
+	}
+    
     @Override
     public Session createSession(boolean transacted, int ackMode) throws JMSException {
         PooledSession result = (PooledSession) pool.createSession(transacted, ackMode);
@@ -175,6 +213,28 @@ public class PooledConnection implements TopicConnection, QueueConnection, Poole
         result.addSessionEventListener(this);
         return result;
     }
+    
+    /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+    @Override
+    public ConnectionConsumer createSharedConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, 
+                                                             int maxMessages) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+    }
+
+    /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+    @Override
+    public ConnectionConsumer createSharedDurableConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool,
+                                                                    int maxMessages) throws JMSException {
+       throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+    }
 
     // Implementation methods
     // -------------------------------------------------------------------------
diff --git a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java
index 11fbbbb..2643037 100644
--- a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java
+++ b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java
@@ -23,6 +23,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
+import javax.jms.JMSContext;
 import javax.jms.JMSException;
 import javax.jms.QueueConnection;
 import javax.jms.QueueConnectionFactory;
@@ -271,6 +272,38 @@ public class PooledConnectionFactory implements ConnectionFactory, QueueConnecti
         return newPooledConnection(connection);
     }
 
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext() {
+        throw new UnsupportedOperationException("createContext() is not supported");
+    }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(String userName, String password) {
+        throw new UnsupportedOperationException("createContext(userName, password) is not supported");
+    }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(String userName, String password, int sessionMode) {
+        throw new UnsupportedOperationException("createContext(userName, password, sessionMode) is not supported");
+    }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(int sessionMode) {
+        throw new UnsupportedOperationException("createContext(sessionMode) is not supported");
+    }
+
     protected Connection newPooledConnection(ConnectionPool connection) {
         return new PooledConnection(connection);
     }
diff --git a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledProducer.java b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledProducer.java
index 175f74d..38d9b7f 100644
--- a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledProducer.java
+++ b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledProducer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.activemq.jms.pool;
 
+import javax.jms.CompletionListener;
 import javax.jms.Destination;
 import javax.jms.InvalidDestinationException;
 import javax.jms.JMSException;
@@ -95,6 +96,68 @@ public class PooledProducer implements MessageProducer {
             messageProducer.send(destination, message, deliveryMode, priority, timeToLive);
         }
     }
+    
+    /** 
+     *
+     * @param message the message to send
+     * @param CompletionListener to callback
+     * @throws JMSException if the JMS provider fails to send the message due to
+     *                 some internal error.
+     * @throws UnsupportedOperationException if an invalid destination is
+     *                 specified.
+     * @throws InvalidDestinationException if a client uses this method with an
+     *                 invalid destination.
+     * @see javax.jms.Session#createProducer
+     * @since 2.0
+     */
+    @Override
+    public void send(Message message, CompletionListener completionListener) throws JMSException {
+       throw new UnsupportedOperationException("send(Message, CompletionListener) is not supported");
+
+    }
+
+    @Override
+    public void send(Message message, int deliveryMode, int priority, long timeToLive,
+                     CompletionListener completionListener) throws JMSException {
+        throw new UnsupportedOperationException("send(Message, deliveryMode, priority, timetoLive, CompletionListener) is not supported");
+    }
+
+    @Override
+    public void send(Destination destination, Message message, CompletionListener completionListener)
+                     throws JMSException {
+        throw new UnsupportedOperationException("send(Destination, Message, CompletionListener) is not supported");
+    }
+
+    @Override
+    public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive,
+                     CompletionListener completionListener) throws JMSException {
+        throw new UnsupportedOperationException("send(Destination, Message, deliveryMode, priority, timetoLive, CompletionListener) is not supported");
+    }
+
+    /**
+     * Gets the delivery delay associated with this <CODE>MessageProducer</CODE>.
+     *
+     * @return this producer's <CODE>DeliveryDely/ <CODE>
+     * @throws JMSException if the JMS provider fails to close the producer due to
+     *                      some internal error.
+     * @since 2.0
+     */
+    @Override
+    public void setDeliveryDelay(long deliveryDelay) throws JMSException {
+        throw new UnsupportedOperationException("setDeliveryDelay() is not supported");
+    }
+
+    /**
+     * Gets the delivery delay value for this <CODE>MessageProducer</CODE>.
+     *
+     * @return the delivery delay for this messageProducer
+     * @throws javax.jms.JMSException if the JMS provider fails to determine if deliver delay is
+     *                      disabled due to some internal error.
+     */
+    @Override
+    public long getDeliveryDelay() throws JMSException {
+        throw new UnsupportedOperationException("getDeliveryDelay() is not supported");
+    }
 
     @Override
     public Destination getDestination() {
diff --git a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java
index 1e8fd23..8e436e6 100644
--- a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java
+++ b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java
@@ -360,6 +360,36 @@ public class PooledSession implements Session, TopicSession, QueueSession, XASes
     public QueueReceiver createReceiver(Queue queue, String selector) throws JMSException {
         return addQueueReceiver(((QueueSession) getInternalSession()).createReceiver(queue, selector));
     }
+    
+    @Override
+    public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName, messageSelector) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new UnsupportedOperationException("createDurableConsumer(Topic, name) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal) throws JMSException {
+        throw new UnsupportedOperationException("createDurableConsumer(Topic, name, messageSelector, noLocal) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector) throws JMSException {
+        throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name, messageSelector) is not supported");
+    }
 
     // Producer related methods
     // -------------------------------------------------------------------------
diff --git a/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/XAConnectionPoolTest.java b/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/XAConnectionPoolTest.java
index a4ea122..f531ff4 100644
--- a/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/XAConnectionPoolTest.java
+++ b/activemq-jms-pool/src/test/java/org/apache/activemq/jms/pool/XAConnectionPoolTest.java
@@ -39,6 +39,7 @@ import javax.jms.TopicPublisher;
 import javax.jms.TopicSession;
 import javax.jms.XAConnection;
 import javax.jms.XAConnectionFactory;
+import javax.jms.XAJMSContext;
 import javax.naming.spi.ObjectFactory;
 import javax.transaction.HeuristicMixedException;
 import javax.transaction.HeuristicRollbackException;
@@ -420,6 +421,16 @@ public class XAConnectionPoolTest extends JmsPoolTestSupport {
         }
 
         @Override
+        public XAJMSContext createXAContext() {
+            throw new UnsupportedOperationException("createXAContext() is not supported");
+        }
+
+        @Override
+        public XAJMSContext createXAContext(String userName, String password) {
+            throw new UnsupportedOperationException("createXAContext(userName, password) is not supported");
+        }
+
+        @Override
         public XAConnection createXAConnection() throws JMSException {
             return connectionFactory.createXAConnection();
         }
diff --git a/activemq-karaf-itest/pom.xml b/activemq-karaf-itest/pom.xml
index a596858..82af8d0 100644
--- a/activemq-karaf-itest/pom.xml
+++ b/activemq-karaf-itest/pom.xml
@@ -34,6 +34,12 @@
       <groupId>org.apache.activemq</groupId>
       <artifactId>activemq-client</artifactId>
       <scope>test</scope>
+      <exclusions>
+      	<exclusion>
+      		<groupId>jakarta.jms</groupId>
+      		<artifactId>jakarta.jms-api</artifactId>
+      	</exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.activemq</groupId>
diff --git a/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java b/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java
index d4f6651..658ab40 100644
--- a/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java
+++ b/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdCamelFeatureTest.java
@@ -37,7 +37,7 @@ public class ActiveMQBrokerNdCamelFeatureTest extends AbstractFeatureTest {
     public static Option[] configure() {
         return new Option[] //
         {
-         composite(configure("activemq", "activemq-camel")),
+         composite(configure("activemq", "camel-jms")),
          editConfigurationFilePut("etc/system.properties", "camel.version", camelVersion()),
          replaceConfigurationFile("etc/activemq.xml", new File(RESOURCE_BASE + "activemq-nd-camel.xml")),
          replaceConfigurationFile("etc/org.apache.activemq.server-default.cfg", new File(RESOURCE_BASE + "org.apache.activemq.server-default.cfg"))
diff --git a/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdExternalCamelFeatureTest.java b/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdExternalCamelFeatureTest.java
index c41e397..afed638 100644
--- a/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdExternalCamelFeatureTest.java
+++ b/activemq-karaf-itest/src/test/java/org/apache/activemq/karaf/itest/ActiveMQBrokerNdExternalCamelFeatureTest.java
@@ -50,7 +50,7 @@ public class ActiveMQBrokerNdExternalCamelFeatureTest extends AbstractFeatureTes
     public void test() throws Throwable {
         assertFeatureInstalled("activemq");
         installAndAssertFeature("camel");
-        installAndAssertFeature("activemq-camel");
+        installAndAssertFeature("camel-jms");
 
         assertBrokerStarted();
         withinReason(new Runnable() {
diff --git a/activemq-karaf/pom.xml b/activemq-karaf/pom.xml
index 19e8171..a8474d0 100644
--- a/activemq-karaf/pom.xml
+++ b/activemq-karaf/pom.xml
@@ -32,7 +32,6 @@
 
   <properties>
     <xpp3-bundle-version>1.1.4c_5</xpp3-bundle-version>
-    <jodatime-bundle-version>2.9</jodatime-bundle-version>
     <dom4j-bundle-version>1.6.1_2</dom4j-bundle-version>
     <xstream-bundle-version>1.4.17_1</xstream-bundle-version>
     <servicemix.specs.version>2.4.0</servicemix.specs.version>
@@ -40,6 +39,11 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jms_2.0_spec</artifactId>
+      <version>1.0-alpha-2</version>
+    </dependency>
+    <dependency>
       <groupId>org.ops4j.pax.logging</groupId>
       <artifactId>pax-logging-api</artifactId>
       <version>1.11.4</version>
@@ -97,14 +101,32 @@
     <dependency>
       <groupId>org.apache.activemq</groupId>
       <artifactId>activemq-log4j-appender</artifactId>
+      <exclusions>
+      	<exclusion>
+      		<groupId>jakarta.jms</groupId>
+      		<artifactId>jakarta.jms-api</artifactId>
+      	</exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.activemq</groupId>
       <artifactId>activemq-console</artifactId>
+      <exclusions>
+      	<exclusion>
+      		<groupId>jakarta.jms</groupId>
+      		<artifactId>jakarta.jms-api</artifactId>
+      	</exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.activemq</groupId>
       <artifactId>activemq-pool</artifactId>
+      <exclusions>
+      	<exclusion>
+      		<groupId>jakarta.jms</groupId>
+      		<artifactId>jakarta.jms-api</artifactId>
+      	</exclusion>
+      </exclusions>
     </dependency>
     <!-- used for testing -->
     <dependency>
diff --git a/activemq-karaf/src/main/resources/features-core.xml b/activemq-karaf/src/main/resources/features-core.xml
index feecb4a..28bd9b0 100644
--- a/activemq-karaf/src/main/resources/features-core.xml
+++ b/activemq-karaf/src/main/resources/features-core.xml
@@ -32,7 +32,6 @@
         <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-impl/${jaxb-bundle-version}</bundle>
         <bundle>mvn:org.apache.commons/commons-pool2/${commons-pool2-version}</bundle>
         <bundle>mvn:commons-net/commons-net/${commons-net-version}</bundle>
-        <bundle dependency="true">mvn:org.apache.zookeeper/zookeeper/${zookeeper-version}</bundle>
         <!-- uber osgi bundle means client is not that lean, todo: introduce client osgi bundle -->
         <bundle>mvn:org.apache.activemq/activemq-osgi/${project.version}</bundle>
     </feature>
@@ -57,7 +56,6 @@
       <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jasypt-spring31/1.9.2_1</bundle>
       <bundle dependency="true">mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.stax-api-1.0/${servicemix.specs.version}</bundle>
       <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xpp3/${xpp3-bundle-version}</bundle>
-      <bundle dependency="true">mvn:joda-time/joda-time/${jodatime-bundle-version}</bundle>
       <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xstream/${xstream-bundle-version}</bundle>
       <bundle dependency="true">mvn:org.apache.aries/org.apache.aries.util/${aries-version}</bundle>
       <bundle dependency="true">mvn:org.apache.activemq/activeio-core/${activeio-version}</bundle>
diff --git a/activemq-osgi/pom.xml b/activemq-osgi/pom.xml
index c3800e7..5e0788d 100644
--- a/activemq-osgi/pom.xml
+++ b/activemq-osgi/pom.xml
@@ -472,9 +472,9 @@
           <optional>true</optional>
         </dependency>
         <dependency>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-jms_1.1_spec</artifactId>
-          <version>1.1.1</version>
+          <groupId>jakarta.jms</groupId>
+          <artifactId>jakarta.jms-api</artifactId>
+          <version>2.0.3</version>
           <classifier>sources</classifier>
           <optional>true</optional>
         </dependency>
diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQConnectionFactory.java b/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQConnectionFactory.java
index 4e30a37..f6490f5 100644
--- a/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQConnectionFactory.java
+++ b/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQConnectionFactory.java
@@ -20,6 +20,7 @@ import java.io.Serializable;
 
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
+import javax.jms.JMSContext;
 import javax.jms.JMSException;
 import javax.jms.QueueConnection;
 import javax.jms.QueueConnectionFactory;
@@ -77,8 +78,40 @@ public class ActiveMQConnectionFactory implements ConnectionFactory, QueueConnec
         i.setPassword(password);
         return createConnection(i);
     }
+    
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext() {
+        throw new UnsupportedOperationException("createContext() is not supported");
+    }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(String userName, String password) {
+        throw new UnsupportedOperationException("createContext(userName, password) is not supported");
+        }
 
     /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(String userName, String password, int sessionMode) {
+        throw new UnsupportedOperationException("createContext(userName, password, sessionMode) is not supported");
+        }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(int sessionMode) {
+        throw new UnsupportedOperationException("createContext(sessionMode) is not supported");
+        }
+
+	/**
      * @param connectionRequestInfo
      * @return
      * @throws JMSException
diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxy.java b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxy.java
index 800e73a..de4b24f 100644
--- a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxy.java
+++ b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxy.java
@@ -108,4 +108,62 @@ public class InboundConnectionProxy implements Connection, QueueConnection, Topi
     protected JMSException createNotSupported(String text) {
         return new JMSException("Operation: " + text + " is not supported for this proxy JCA ResourceAdapter provider");
     }
+    
+    /**
+     * Creates a <CODE>Session</CODE> object.
+     *
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @since 2.0
+     */
+    @Override
+    public Session createSession() throws JMSException {
+        throw new UnsupportedOperationException("createSession() is unsupported"); 
+    }
+
+    /**
+     * Creates a <CODE>Session</CODE> object.
+     *
+     * @param acknowledgeMode indicates whether the consumer or the client will
+     *                acknowledge any messages it receives; ignored if the
+     *                session is transacted. Legal values are
+     *                <code>Session.AUTO_ACKNOWLEDGE</code>,
+     *                <code>Session.CLIENT_ACKNOWLEDGE</code>, and
+     *                <code>Session.DUPS_OK_ACKNOWLEDGE</code>.
+     * @return a newly created session
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @see Session#AUTO_ACKNOWLEDGE
+     * @see Session#CLIENT_ACKNOWLEDGE
+     * @see Session#DUPS_OK_ACKNOWLEDGE
+     * @since 2.0
+     */
+    @Override
+    public Session createSession(int sessionMode) throws JMSException {
+        throw new UnsupportedOperationException("createSession(int sessionMode) is unsupported"); 
+    }
+
+    /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+    @Override
+    public ConnectionConsumer createSharedConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, int maxMessages) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+    }
+
+    /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+    @Override
+    public ConnectionConsumer createSharedDurableConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, int maxMessages) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+    }
 }
diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxyFactory.java b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxyFactory.java
index 57119ae..9472bce 100644
--- a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxyFactory.java
+++ b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundConnectionProxyFactory.java
@@ -18,6 +18,7 @@ package org.apache.activemq.ra;
 
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
+import javax.jms.JMSContext;
 import javax.jms.JMSException;
 import javax.jms.QueueConnection;
 import javax.jms.QueueConnectionFactory;
@@ -56,4 +57,36 @@ public class InboundConnectionProxyFactory implements ConnectionFactory, QueueCo
     public TopicConnection createTopicConnection(String userName, String password) throws JMSException {
         return createTopicConnection();
     }
+    
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext() {
+        throw new UnsupportedOperationException("createContext() is not supported");
+    }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(String userName, String password) {
+        throw new UnsupportedOperationException("createContext(userName, password) is not supported");
+    }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(String userName, String password, int sessionMode) {
+        throw new UnsupportedOperationException("createContext(userName, password, sessionMode) is not supported");
+    }
+
+    /**
+     * @return Returns the JMSContext.
+     */
+    @Override
+    public JMSContext createContext(int sessionMode) {
+        throw new UnsupportedOperationException("createContext(sessionMode) is not supported");
+    }
 }
diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundMessageProducerProxy.java b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundMessageProducerProxy.java
index 3ed5ef8..7c42f82 100644
--- a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundMessageProducerProxy.java
+++ b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundMessageProducerProxy.java
@@ -16,7 +16,9 @@
  */
 package org.apache.activemq.ra;
 
+import javax.jms.CompletionListener;
 import javax.jms.Destination;
+import javax.jms.InvalidDestinationException;
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageProducer;
@@ -159,4 +161,63 @@ public class InboundMessageProducerProxy implements MessageProducer, QueueSender
     public void publish(Topic arg0, Message arg1, int arg2, int arg3, long arg4) throws JMSException {
         messageProducer.send(arg0, arg1, arg2, arg3, arg4);
     }
+    
+    /**
+     *
+     * @param message the message to send
+     * @param CompletionListener to callback
+     * @throws JMSException if the JMS provider fails to send the message due to
+     *                 some internal error.
+     * @throws UnsupportedOperationException if an invalid destination is
+     *                 specified.
+     * @throws InvalidDestinationException if a client uses this method with an
+     *                 invalid destination.
+     * @see javax.jms.Session#createProducer
+     * @since 2.0
+     */
+    @Override
+    public void send(Message message, CompletionListener completionListener) throws JMSException {
+       throw new UnsupportedOperationException("send(Message, CompletionListener) is not supported");
+
+    }
+
+    @Override
+    public void send(Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener) throws JMSException {
+        throw new UnsupportedOperationException("send(Message, deliveryMode, priority, timetoLive, CompletionListener) is not supported");
+    }
+
+    @Override
+    public void send(Destination destination, Message message, CompletionListener completionListener) throws JMSException {
+        throw new UnsupportedOperationException("send(Destination, Message, CompletionListener) is not supported");
+    }
+
+    @Override
+    public void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive, CompletionListener completionListener) throws JMSException {
+        throw new UnsupportedOperationException("send(Destination, Message, deliveryMode, priority, timetoLive, CompletionListener) is not supported");
+    }
+
+    /**
+     * Gets the delivery delay associated with this <CODE>MessageProducer</CODE>.
+     *
+     * @return this producer's <CODE>DeliveryDely/ <CODE>
+     * @throws JMSException if the JMS provider fails to close the producer due to
+     *                      some internal error.
+     * @since 2.0
+     */
+    @Override
+    public void setDeliveryDelay(long deliveryDelay) throws JMSException {
+        throw new UnsupportedOperationException("setDeliveryDelay() is not supported");
+    }
+
+    /**
+     * Gets the delivery delay value for this <CODE>MessageProducer</CODE>.
+     *
+     * @return the delivery delay for this messageProducer
+     * @throws javax.jms.JMSException if the JMS provider fails to determine if deliver delay is
+     *                      disabled due to some internal error.
+     */
+    @Override
+    public long getDeliveryDelay() throws JMSException {
+        throw new UnsupportedOperationException("getDeliveryDelay() is not supported");
+    }
 }
diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundSessionProxy.java b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundSessionProxy.java
index ae9d848..93ea988 100644
--- a/activemq-ra/src/main/java/org/apache/activemq/ra/InboundSessionProxy.java
+++ b/activemq-ra/src/main/java/org/apache/activemq/ra/InboundSessionProxy.java
@@ -237,6 +237,36 @@ public class InboundSessionProxy implements Session, QueueSession, TopicSession
         return getTopicSession().createPublisher(topic);
     }
 
+    @Override
+    public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName, messageSelector) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new UnsupportedOperationException("createDurableConsumer(Topic, name) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal) throws JMSException {
+        throw new UnsupportedOperationException("createDurableConsumer(Topic, name, messageSelector, noLocal) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector) throws JMSException {
+        throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name, messageSelector) is not supported");
+    }
+    
     public String toString() {
         try {
             return "InboundSessionProxy { " + getSession() + " }";
diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedConnectionProxy.java b/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedConnectionProxy.java
index d18260a..c3b3c88 100644
--- a/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedConnectionProxy.java
+++ b/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedConnectionProxy.java
@@ -290,4 +290,62 @@ public class ManagedConnectionProxy implements Connection, QueueConnection, Topi
         }
     }
 
+    /**
+     * Creates a <CODE>Session</CODE> object.
+     *
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @since 2.0
+     */
+    @Override
+    public Session createSession() throws JMSException {
+        throw new UnsupportedOperationException("createSession() is unsupported"); 
+    }
+
+    /**
+     * Creates a <CODE>Session</CODE> object.
+     *
+     * @param acknowledgeMode indicates whether the consumer or the client will
+     *                acknowledge any messages it receives; ignored if the
+     *                session is transacted. Legal values are
+     *                <code>Session.AUTO_ACKNOWLEDGE</code>,
+     *                <code>Session.CLIENT_ACKNOWLEDGE</code>, and
+     *                <code>Session.DUPS_OK_ACKNOWLEDGE</code>.
+     * @return a newly created session
+     * @throws JMSException if the <CODE>Connection</CODE> object fails to
+     *                 create a session due to some internal error or lack of
+     *                 support for the specific transaction and acknowledgement
+     *                 mode.
+     * @see Session#AUTO_ACKNOWLEDGE
+     * @see Session#CLIENT_ACKNOWLEDGE
+     * @see Session#DUPS_OK_ACKNOWLEDGE
+     * @since 2.0
+     */
+    @Override
+    public Session createSession(int sessionMode) throws JMSException {
+        throw new UnsupportedOperationException("createSession(int sessionMode) is unsupported"); 
+    }
+
+    /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+    @Override
+    public ConnectionConsumer createSharedConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, int maxMessages) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+    }
+
+    /**
+     * 
+     * @see javax.jms.ConnectionConsumer
+     * @since 2.0
+     */
+    @Override
+    public ConnectionConsumer createSharedDurableConnectionConsumer(Topic topic, String subscriptionName, String messageSelector, ServerSessionPool sessionPool, int maxMessages) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConnectionConsumer() is not supported");
+    }
+
 }
diff --git a/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedSessionProxy.java b/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedSessionProxy.java
index a71e48a..6d76a47 100644
--- a/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedSessionProxy.java
+++ b/activemq-ra/src/main/java/org/apache/activemq/ra/ManagedSessionProxy.java
@@ -406,6 +406,36 @@ public class ManagedSessionProxy implements Session, QueueSession, TopicSession
         throw new RuntimeException("Operation not supported.");
     }
 
+    @Override
+    public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedConsumer(Topic topic, String sharedSubscriptionName, String messageSelector) throws JMSException {
+        throw new UnsupportedOperationException("createSharedConsumer(Topic, sharedSubscriptionName, messageSelector) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new UnsupportedOperationException("createDurableConsumer(Topic, name) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createDurableConsumer(Topic topic, String name, String messageSelector, boolean noLocal) throws JMSException {
+        throw new UnsupportedOperationException("createDurableConsumer(Topic, name, messageSelector, noLocal) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedDurableConsumer(Topic topic, String name) throws JMSException {
+        throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name) is not supported");
+    }
+
+    @Override
+    public MessageConsumer createSharedDurableConsumer(Topic topic, String name, String messageSelector) throws JMSException {
+        throw new UnsupportedOperationException("createSharedDurableConsumer(Topic, name, messageSelector) is not supported");
+    }
+    
     public String toString() {
         return "ManagedSessionProxy { " + session + " }";
     }
diff --git a/activemq-rar/pom.xml b/activemq-rar/pom.xml
index 8357ad1..98bc70e 100644
--- a/activemq-rar/pom.xml
+++ b/activemq-rar/pom.xml
@@ -38,8 +38,8 @@
       <artifactId>activemq-spring</artifactId>
       <exclusions>
         <exclusion>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-jms_1.1_spec</artifactId>
+          <groupId>jakarta.jms</groupId>
+          <artifactId>jakarta.jms-api</artifactId>
         </exclusion>
         <exclusion>
           <groupId>org.apache.geronimo.specs</groupId>
@@ -164,8 +164,8 @@
       <artifactId>activemq-ra</artifactId>
       <exclusions>
         <exclusion>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-jms_1.1_spec</artifactId>
+          <groupId>jakarta.jms</groupId>
+          <artifactId>jakarta.jms-api</artifactId>
         </exclusion>
         <exclusion>
           <groupId>org.apache.geronimo.specs</groupId>
diff --git a/activemq-tooling/activemq-maven-plugin/pom.xml b/activemq-tooling/activemq-maven-plugin/pom.xml
index 4cf6d30..a17c6b6 100644
--- a/activemq-tooling/activemq-maven-plugin/pom.xml
+++ b/activemq-tooling/activemq-maven-plugin/pom.xml
@@ -55,8 +55,8 @@
       <artifactId>derbynet</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
diff --git a/activemq-tooling/activemq-memtest-maven-plugin/pom.xml b/activemq-tooling/activemq-memtest-maven-plugin/pom.xml
index 06296c9..e52472b 100644
--- a/activemq-tooling/activemq-memtest-maven-plugin/pom.xml
+++ b/activemq-tooling/activemq-memtest-maven-plugin/pom.xml
@@ -56,8 +56,8 @@
       <artifactId>derbynet</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
diff --git a/activemq-tooling/activemq-perf-maven-plugin/pom.xml b/activemq-tooling/activemq-perf-maven-plugin/pom.xml
index 398bf15..ca7197f 100644
--- a/activemq-tooling/activemq-perf-maven-plugin/pom.xml
+++ b/activemq-tooling/activemq-perf-maven-plugin/pom.xml
@@ -59,8 +59,8 @@
       <artifactId>derbynet</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
diff --git a/activemq-unit-tests/pom.xml b/activemq-unit-tests/pom.xml
index f73adfc..2db07af 100644
--- a/activemq-unit-tests/pom.xml
+++ b/activemq-unit-tests/pom.xml
@@ -67,8 +67,8 @@
       <artifactId>activemq-runtime-config</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
diff --git a/activemq-web-console/pom.xml b/activemq-web-console/pom.xml
index 473c1be..1d1c558 100644
--- a/activemq-web-console/pom.xml
+++ b/activemq-web-console/pom.xml
@@ -185,8 +185,8 @@
       
     <!-- j2ee jars -->
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
diff --git a/activemq-web-demo/pom.xml b/activemq-web-demo/pom.xml
index 732e81f..d4e7847 100644
--- a/activemq-web-demo/pom.xml
+++ b/activemq-web-demo/pom.xml
@@ -142,8 +142,8 @@
   <dependencies>
     <!-- j2ee jars -->
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
diff --git a/assembly/pom.xml b/assembly/pom.xml
index 9724e71..9d32850 100644
--- a/assembly/pom.xml
+++ b/assembly/pom.xml
@@ -254,8 +254,8 @@
       <artifactId>log4j</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
diff --git a/assembly/src/main/descriptors/common-bin.xml b/assembly/src/main/descriptors/common-bin.xml
index 57b6d92..ce02af9 100644
--- a/assembly/src/main/descriptors/common-bin.xml
+++ b/assembly/src/main/descriptors/common-bin.xml
@@ -142,7 +142,7 @@
         <include>${pom.groupId}:activemq-jaas</include>
         <include>org.apache.activemq.protobuf:activemq-protobuf</include>
         <include>org.apache.geronimo.specs:geronimo-j2ee-management_1.1_spec</include>
-        <include>org.apache.geronimo.specs:geronimo-jms_1.1_spec</include>
+        <include>jakarta.jms:jakarta.jms-api</include>
         <include>org.apache.geronimo.specs:geronimo-jta_1.1_spec</include>
         <include>${pom.groupId}:activemq-web</include>
         <include>org.fusesource.hawtbuf:hawtbuf</include>
diff --git a/assembly/src/release/examples/amqp/java/pom.xml b/assembly/src/release/examples/amqp/java/pom.xml
index 955f715..d257ab3 100644
--- a/assembly/src/release/examples/amqp/java/pom.xml
+++ b/assembly/src/release/examples/amqp/java/pom.xml
@@ -29,9 +29,9 @@
   <dependencies>
 
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
-      <version>1.1</version>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
+      <version>2.0.3</version>
     </dependency>
     <dependency>
       <groupId>org.apache.qpid</groupId>
diff --git a/assembly/src/release/examples/openwire/advanced-scenarios/pom.xml b/assembly/src/release/examples/openwire/advanced-scenarios/pom.xml
index 5e9c8e2..a53d815 100644
--- a/assembly/src/release/examples/openwire/advanced-scenarios/pom.xml
+++ b/assembly/src/release/examples/openwire/advanced-scenarios/pom.xml
@@ -41,11 +41,10 @@
     <description>ActiveMQ OpenWire Java Examples</description>
 
     <dependencies>
-
         <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-jms_1.1_spec</artifactId>
-            <version>1.1</version>
+            <groupId>jakarta.jms</groupId>
+            <artifactId>jakarta.jms-api</artifactId>
+            <version>2.0.3</version>  
         </dependency>
         <dependency>
             <groupId>org.apache.activemq</groupId>
diff --git a/assembly/src/release/examples/openwire/java/pom.xml b/assembly/src/release/examples/openwire/java/pom.xml
index a624592..58e84d8 100644
--- a/assembly/src/release/examples/openwire/java/pom.xml
+++ b/assembly/src/release/examples/openwire/java/pom.xml
@@ -28,9 +28,9 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
-      <version>1.1</version>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
+      <version>2.0.3</version>
     </dependency>
     <dependency>
       <groupId>org.apache.activemq</groupId>
diff --git a/assembly/src/release/examples/stomp/java/pom.xml b/assembly/src/release/examples/stomp/java/pom.xml
index 50b4511..a52ff14 100644
--- a/assembly/src/release/examples/stomp/java/pom.xml
+++ b/assembly/src/release/examples/stomp/java/pom.xml
@@ -29,9 +29,9 @@
   <dependencies>
     
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jms_1.1_spec</artifactId>
-      <version>1.1</version>
+      <groupId>jakarta.jms</groupId>
+      <artifactId>jakarta.jms-api</artifactId>
+      <version>2.0.3</version>
     </dependency>
     <dependency>
       <groupId>org.fusesource.stompjms</groupId>
diff --git a/pom.xml b/pom.xml
index 6abcb95..0a6430b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -465,9 +465,9 @@
       </dependency>
 
       <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-jms_1.1_spec</artifactId>
-        <version>1.1.1</version>
+        <groupId>jakarta.jms</groupId>
+        <artifactId>jakarta.jms-api</artifactId>
+        <version>2.0.3</version>
       </dependency>
 
       <dependency>