You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2023/03/22 21:02:03 UTC

[flex-blazeds] 01/01: Migrate to Jakarta EE and bump major version to 5

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

joshtynjala pushed a commit to branch jakartaee
in repository https://gitbox.apache.org/repos/asf/flex-blazeds.git

commit cba8c3671222d04a98987caecbd8c9d3b76835f9
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Wed Mar 22 14:01:43 2023 -0700

    Migrate to Jakarta EE and bump major version to 5
---
 README                                             |  12 +-
 RELEASE_NOTES                                      |   6 +
 common/pom.xml                                     |   2 +-
 .../resources/flex/messaging/errors.properties     |   4 +-
 core/pom.xml                                       |  12 +-
 .../src/main/java/flex/management/BaseControl.java |   2 +-
 core/src/main/java/flex/messaging/FlexContext.java |   8 +-
 .../main/java/flex/messaging/HttpFlexSession.java  |  18 +-
 .../flex/messaging/HttpFlexSessionProvider.java    |   4 +-
 .../main/java/flex/messaging/MessageBroker.java    |   2 +-
 .../java/flex/messaging/MessageBrokerServlet.java  |  10 +-
 .../messaging/config/ConfigurationManager.java     |   2 +-
 .../messaging/config/FlexConfigurationManager.java |   2 +-
 .../messaging/config/ServletResourceResolver.java  |   2 +-
 .../java/flex/messaging/config/SystemSettings.java |   2 +-
 .../flex/messaging/endpoints/AbstractEndpoint.java |   4 +-
 .../flex/messaging/endpoints/BaseHTTPEndpoint.java |   4 +-
 .../endpoints/BaseStreamingHTTPEndpoint.java       |   6 +-
 .../java/flex/messaging/endpoints/Endpoint.java    |   4 +-
 .../flex/messaging/endpoints/HTTPEndpoint.java     |   4 +-
 .../messaging/endpoints/StreamingAMFEndpoint.java  |   4 +-
 .../messaging/endpoints/StreamingHTTPEndpoint.java |   4 +-
 .../endpoints/amf/SerializationFilter.java         |   2 +-
 .../messaging/endpoints/amf/SessionFilter.java     |   4 +-
 .../java/flex/messaging/factories/JavaFactory.java |   2 +-
 .../java/flex/messaging/io/StatusInfoProxy.java    |   2 +-
 .../java/flex/messaging/log/HTTPRequestLog.java    |   4 +-
 .../log/LoggingHttpServletRequestWrapper.java      |  23 +-
 .../java/flex/messaging/log/ServletLogTarget.java  |   2 +-
 .../main/java/flex/messaging/messages/Message.java |   2 +-
 .../messaging/security/AppServerLoginCommand.java  |   4 +-
 .../java/flex/messaging/security/LoginCommand.java |   2 +-
 .../messaging/adapters/AsyncMessageReceiver.java   |  12 +-
 .../services/messaging/adapters/JMSAdapter.java    |  26 +-
 .../messaging/adapters/JMSConfigConstants.java     |   6 +-
 .../services/messaging/adapters/JMSConsumer.java   |  26 +-
 .../messaging/adapters/JMSExceptionEvent.java      |   2 +-
 .../messaging/adapters/JMSMessageEvent.java        |   4 +-
 .../services/messaging/adapters/JMSProducer.java   |  38 +--
 .../services/messaging/adapters/JMSProxy.java      |  20 +-
 .../messaging/adapters/JMSQueueConsumer.java       |  10 +-
 .../messaging/adapters/JMSQueueProducer.java       |  18 +-
 .../services/messaging/adapters/JMSSettings.java   |  12 +-
 .../messaging/adapters/JMSTopicConsumer.java       |  12 +-
 .../messaging/adapters/JMSTopicProducer.java       |  18 +-
 .../messaging/adapters/MessageReceiver.java        |   2 +-
 .../messaging/adapters/SyncMessageReceiver.java    |   8 +-
 distribution/pom.xml                               |   2 +-
 opt/blazeds-spring-boot-starter/README.adoc        | 189 --------------
 opt/blazeds-spring-boot-starter/pom.xml            | 143 -----------
 .../blazeds/spring/BlazeDsAutoConfiguration.java   | 113 ---------
 .../src/main/resources/META-INF/spring.factories   |  19 --
 opt/oracle/pom.xml                                 |  48 ----
 .../messaging/security/OracleLoginCommand.java     |  86 -------
 .../java/flex/messaging/security/OracleUser.java   | 101 --------
 opt/pom.xml                                        |   6 +-
 opt/tomcat/pom.xml                                 |   2 +-
 opt/tomcat/tomcat-4/pom.xml                        |  47 ----
 .../flex/messaging/security/TomcatValve4150.java   | 237 ------------------
 opt/tomcat/tomcat-6/pom.xml                        |  51 ----
 .../java/flex/messaging/security/TomcatValve.java  | 246 ------------------
 opt/tomcat/tomcat-7/pom.xml                        |  46 ----
 .../java/flex/messaging/security/Tomcat7Valve.java | 278 ---------------------
 .../flex/messaging/security/tomcat-descriptor.xml  |  67 -----
 opt/tomcat/tomcat-base/pom.xml                     |   2 +-
 .../java/flex/messaging/security/TomcatLogin.java  |   2 +-
 .../messaging/security/TomcatLoginCommand.java     |   4 +-
 opt/weblogic/pom.xml                               |  61 -----
 .../messaging/security/WeblogicLoginCommand.java   | 213 ----------------
 opt/websphere/pom.xml                              |  55 ----
 .../management/WebSphereMBeanServerLocator.java    |  82 ------
 .../messaging/security/WebSphereLoginCommand.java  | 248 ------------------
 .../concurrent/AsynchBeansWorkManagerExecutor.java | 212 ----------------
 pom.xml                                            |  14 +-
 proxy/pom.xml                                      |   6 +-
 remoting/pom.xml                                   |   8 +-
 76 files changed, 224 insertions(+), 2743 deletions(-)

diff --git a/README b/README
index e6e0b69..b6ed022 100644
--- a/README
+++ b/README
@@ -9,7 +9,7 @@ Apache Flex BlazeDS
     data and push data in real-time to Adobe® Flex® and Adobe AIR™ applications
     for more responsive rich Internet application (RIA) experiences.
 
-    Apache Flex BlazeDS 4.8.0 is an update to the initial release of BlazeDS
+    Apache Flex BlazeDS 5.0.0 is an update to earlier releases of BlazeDS
     from the Apache Software Foundation.  Prior to this, releases were provided 
     by Adobe Systems Inc. It is compatible with most code written to target Adobe
     Flex 4.6.
@@ -33,7 +33,7 @@ Getting the latest sources via Git
     For further information visit http://flex.apache.org/download-source.html
 
 
-Building Apache Flex BlazeDS 4.8.0
+Building Apache Flex BlazeDS 5.0.0
 ==================================
 
     Apache Flex BlazeDS is a large project. It requires some build tools which must be
@@ -100,22 +100,22 @@ Using the Binary Distribution
     <dependency>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>flex-messaging-common</artifactId>
-        <version>4.8.0</version>
+        <version>5.0.0</version>
     </dependency>
     <dependency>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>flex-messaging-core</artifactId>
-        <version>4.8.0</version>
+        <version>5.0.0</version>
     </dependency>
     <dependency>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>flex-messaging-proxy</artifactId>
-        <version>4.8.0</version>
+        <version>5.0.0</version>
     </dependency>
     <dependency>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>flex-messaging-remoting</artifactId>
-        <version>4.8.0</version>
+        <version>5.0.0</version>
     </dependency>
 
 
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 51cf1db..3c4d18c 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,3 +1,9 @@
+Apache Flex BlazeDS 5.0.0
+=======================
+
+Apache Flex BlazeDS 5.0.0 is a major update that migrates from Java EE to
+Jakarta EE.
+
 Apache Flex BlazeDS 4.8.0
 =======================
 
diff --git a/common/pom.xml b/common/pom.xml
index 5799988..85b34b7 100755
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -22,7 +22,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>blazeds</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>flex-messaging-common</artifactId>
diff --git a/common/src/main/resources/flex/messaging/errors.properties b/common/src/main/resources/flex/messaging/errors.properties
index 711ef91..03fd1e2 100644
--- a/common/src/main/resources/flex/messaging/errors.properties
+++ b/common/src/main/resources/flex/messaging/errors.properties
@@ -319,7 +319,7 @@ Dynamic URL is not configured in the whitelist.
 10808=Invalid Acknowledge Mode ''{0}''. Valid values are AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE, and CLIENT_ACKNOWLEDGE.
 10809=Invalid Delivery Mode ''{0}''. Valid values are DEFAULT_DELIVERY_MODE, PERSISTENT, and NON_PERSISTENT.
 10810=The body of the Flex message could not be converted to a Serializable Java Object.
-10811=Unsupported JMS Message Type ''{0}''. Valid values are javax.jms.TextMessage, javax.jms.ObjectMessage, and javax.jms.MapMessage.
+10811=Unsupported JMS Message Type ''{0}''. Valid values are jakarta.jms.TextMessage, jakarta.jms.ObjectMessage, and jakarta.jms.MapMessage.
 10812=The body of the Flex message could not be converted to a Java Map object.
 10813=JMS queue proxy for JMS destination ''{0}'' has a destination type of ''{1}'' which is not Queue.
 10814=JMS queue proxy for JMS destination ''{0}'' has a connection factory type of ''{1}'' which is not QueueConnectionFactory.
@@ -327,7 +327,7 @@ Dynamic URL is not configured in the whitelist.
 10816=JMS topic proxy for JMS destination ''{0}'' has a connection factory type of ''{1}'' which is not TopicConnectionFactory.
 10817=Invalid delivery-settings mode ''{0}''. Valid values are async and sync.
 10818=JMS consumer for JMS destination ''{0}'' is configured to use async message receiver but the application server does not allow ''{1}'' call used in async message receiver. Please switch to sync message receiver.
-10819=JMS topic consumer for JMS destination ''{0}'' is configured to use durable subscriptions but the application server does not permit javax.jms.Connection.setClientID method needed to support durable subscribers. Set durable property to false.
+10819=JMS topic consumer for JMS destination ''{0}'' is configured to use durable subscriptions but the application server does not permit jarkarta.jms.Connection.setClientID method needed to support durable subscribers. Set durable property to false.
 10820=Client is unsubscribed because its corresponding JMS consumer for JMS destination ''{0}'' encountered an error during message delivery: {1}
 10821=Client is unsubscribed because its corresponding JMS consumer has been removed from the JMS adapter.
 10822=Client is unsubscribed because its corresponding JMS consumer for JMS destination ''{0}'' has been stopped.
diff --git a/core/pom.xml b/core/pom.xml
index 55c5cfa..c7d257e 100755
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -22,7 +22,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>blazeds</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>flex-messaging-core</artifactId>
@@ -31,7 +31,7 @@ limitations under the License.
         <dependency>
             <groupId>org.apache.flex.blazeds</groupId>
             <artifactId>flex-messaging-common</artifactId>
-            <version>4.9.0-SNAPSHOT</version>
+            <version>5.0.0-SNAPSHOT</version>
         </dependency>
 
         <dependency>
@@ -41,14 +41,14 @@ limitations under the License.
         </dependency>
 
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
             <scope>provided</scope>
         </dependency>
 
         <dependency>
-            <groupId>javax.jms</groupId>
-            <artifactId>javax.jms-api</artifactId>
+            <groupId>jakarta.jms</groupId>
+            <artifactId>jakarta.jms-api</artifactId>
             <scope>provided</scope>
         </dependency>
 
diff --git a/core/src/main/java/flex/management/BaseControl.java b/core/src/main/java/flex/management/BaseControl.java
index 22353ad..8afe35c 100644
--- a/core/src/main/java/flex/management/BaseControl.java
+++ b/core/src/main/java/flex/management/BaseControl.java
@@ -30,7 +30,7 @@ import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
 import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
-import javax.servlet.ServletConfig;
+import jakarta.servlet.ServletConfig;
 
 /**
  * The implementation of the <code>BaseControlMBean</code> interface. This
diff --git a/core/src/main/java/flex/messaging/FlexContext.java b/core/src/main/java/flex/messaging/FlexContext.java
index 9afa73a..d2cd1b6 100644
--- a/core/src/main/java/flex/messaging/FlexContext.java
+++ b/core/src/main/java/flex/messaging/FlexContext.java
@@ -21,10 +21,10 @@ import flex.messaging.endpoints.Endpoint;
 import flex.messaging.io.TypeMarshallingContext;
 import flex.messaging.security.LoginManager;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import java.security.Principal;
 
 /**
diff --git a/core/src/main/java/flex/messaging/HttpFlexSession.java b/core/src/main/java/flex/messaging/HttpFlexSession.java
index 3f90eda..ba7c756 100644
--- a/core/src/main/java/flex/messaging/HttpFlexSession.java
+++ b/core/src/main/java/flex/messaging/HttpFlexSession.java
@@ -19,14 +19,14 @@ package flex.messaging;
 import flex.messaging.log.Log;
 import flex.messaging.log.LogCategories;
 
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionAttributeListener;
-import javax.servlet.http.HttpSessionBindingEvent;
-import javax.servlet.http.HttpSessionBindingListener;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpSessionAttributeListener;
+import jakarta.servlet.http.HttpSessionBindingEvent;
+import jakarta.servlet.http.HttpSessionBindingListener;
+import jakarta.servlet.http.HttpSessionEvent;
+import jakarta.servlet.http.HttpSessionListener;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
@@ -49,7 +49,7 @@ public class HttpFlexSession extends FlexSession
 
     /**
      * Not for public use. This constructor is used to create an instance of this class that
-     * will operate as a javax.servlet.http.HttpSessionListener registered in web.xml.
+     * will operate as a jakarta.servlet.http.HttpSessionListener registered in web.xml.
      */
     public HttpFlexSession() {
     }
diff --git a/core/src/main/java/flex/messaging/HttpFlexSessionProvider.java b/core/src/main/java/flex/messaging/HttpFlexSessionProvider.java
index 4896d54..830d204 100644
--- a/core/src/main/java/flex/messaging/HttpFlexSessionProvider.java
+++ b/core/src/main/java/flex/messaging/HttpFlexSessionProvider.java
@@ -16,8 +16,8 @@
  */
 package flex.messaging;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpSession;
 
 import flex.messaging.log.Log;
 
diff --git a/core/src/main/java/flex/messaging/MessageBroker.java b/core/src/main/java/flex/messaging/MessageBroker.java
index e148f23..367a582 100644
--- a/core/src/main/java/flex/messaging/MessageBroker.java
+++ b/core/src/main/java/flex/messaging/MessageBroker.java
@@ -60,7 +60,7 @@ import flex.messaging.util.UUIDUtils;
 import flex.messaging.validators.ClassDeserializationValidator;
 import flex.messaging.validators.DeserializationValidator;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
diff --git a/core/src/main/java/flex/messaging/MessageBrokerServlet.java b/core/src/main/java/flex/messaging/MessageBrokerServlet.java
index d9064e8..9d8488f 100644
--- a/core/src/main/java/flex/messaging/MessageBrokerServlet.java
+++ b/core/src/main/java/flex/messaging/MessageBrokerServlet.java
@@ -35,11 +35,11 @@ import flex.messaging.util.ClassUtil;
 import flex.messaging.util.ExceptionUtil;
 import flex.messaging.util.Trace;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import java.io.File;
 import java.io.FileInputStream;
diff --git a/core/src/main/java/flex/messaging/config/ConfigurationManager.java b/core/src/main/java/flex/messaging/config/ConfigurationManager.java
index 5dc6b1e..fc57856 100644
--- a/core/src/main/java/flex/messaging/config/ConfigurationManager.java
+++ b/core/src/main/java/flex/messaging/config/ConfigurationManager.java
@@ -16,7 +16,7 @@
  */
 package flex.messaging.config;
 
-import javax.servlet.ServletConfig;
+import jakarta.servlet.ServletConfig;
 
 import flex.messaging.log.LogCategories;
 
diff --git a/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java b/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java
index fc69fbf..af64fbd 100644
--- a/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java
+++ b/core/src/main/java/flex/messaging/config/FlexConfigurationManager.java
@@ -20,7 +20,7 @@ import flex.messaging.LocalizedException;
 import flex.messaging.util.ClassUtil;
 import flex.messaging.util.Trace;
 
-import javax.servlet.ServletConfig;
+import jakarta.servlet.ServletConfig;
 import java.io.File;
 
 /**
diff --git a/core/src/main/java/flex/messaging/config/ServletResourceResolver.java b/core/src/main/java/flex/messaging/config/ServletResourceResolver.java
index 2967700..dfc0344 100644
--- a/core/src/main/java/flex/messaging/config/ServletResourceResolver.java
+++ b/core/src/main/java/flex/messaging/config/ServletResourceResolver.java
@@ -18,7 +18,7 @@ package flex.messaging.config;
 
 import flex.messaging.io.ArrayList;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collections;
diff --git a/core/src/main/java/flex/messaging/config/SystemSettings.java b/core/src/main/java/flex/messaging/config/SystemSettings.java
index b7b14a4..f1065ff 100644
--- a/core/src/main/java/flex/messaging/config/SystemSettings.java
+++ b/core/src/main/java/flex/messaging/config/SystemSettings.java
@@ -28,7 +28,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 
 /**
  *
diff --git a/core/src/main/java/flex/messaging/endpoints/AbstractEndpoint.java b/core/src/main/java/flex/messaging/endpoints/AbstractEndpoint.java
index cfa33e3..94d0630 100644
--- a/core/src/main/java/flex/messaging/endpoints/AbstractEndpoint.java
+++ b/core/src/main/java/flex/messaging/endpoints/AbstractEndpoint.java
@@ -21,8 +21,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import flex.management.ManageableComponent;
 import flex.management.runtime.messaging.MessageBrokerControl;
diff --git a/core/src/main/java/flex/messaging/endpoints/BaseHTTPEndpoint.java b/core/src/main/java/flex/messaging/endpoints/BaseHTTPEndpoint.java
index 5b3eab9..f853ac4 100644
--- a/core/src/main/java/flex/messaging/endpoints/BaseHTTPEndpoint.java
+++ b/core/src/main/java/flex/messaging/endpoints/BaseHTTPEndpoint.java
@@ -32,8 +32,8 @@ import flex.messaging.messages.CommandMessage;
 import flex.messaging.messages.Message;
 import flex.messaging.util.SettingsReplaceUtil;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/core/src/main/java/flex/messaging/endpoints/BaseStreamingHTTPEndpoint.java b/core/src/main/java/flex/messaging/endpoints/BaseStreamingHTTPEndpoint.java
index 1422e26..76050cd 100644
--- a/core/src/main/java/flex/messaging/endpoints/BaseStreamingHTTPEndpoint.java
+++ b/core/src/main/java/flex/messaging/endpoints/BaseStreamingHTTPEndpoint.java
@@ -35,9 +35,9 @@ import flex.messaging.messages.MessagePerformanceUtils;
 import flex.messaging.util.TimeoutManager;
 import flex.messaging.util.UserAgentManager;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
diff --git a/core/src/main/java/flex/messaging/endpoints/Endpoint.java b/core/src/main/java/flex/messaging/endpoints/Endpoint.java
index 0e15c44..c49b853 100644
--- a/core/src/main/java/flex/messaging/endpoints/Endpoint.java
+++ b/core/src/main/java/flex/messaging/endpoints/Endpoint.java
@@ -16,8 +16,8 @@
  */
 package flex.messaging.endpoints;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import flex.management.Manageable;
 import flex.messaging.MessageBroker;
diff --git a/core/src/main/java/flex/messaging/endpoints/HTTPEndpoint.java b/core/src/main/java/flex/messaging/endpoints/HTTPEndpoint.java
index 2c9abe4..86bb95f 100644
--- a/core/src/main/java/flex/messaging/endpoints/HTTPEndpoint.java
+++ b/core/src/main/java/flex/messaging/endpoints/HTTPEndpoint.java
@@ -16,8 +16,8 @@
  */
 package flex.messaging.endpoints;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import flex.management.runtime.messaging.endpoints.HTTPEndpointControl;
 import flex.messaging.MessageBroker;
diff --git a/core/src/main/java/flex/messaging/endpoints/StreamingAMFEndpoint.java b/core/src/main/java/flex/messaging/endpoints/StreamingAMFEndpoint.java
index a162035..34a31b2 100644
--- a/core/src/main/java/flex/messaging/endpoints/StreamingAMFEndpoint.java
+++ b/core/src/main/java/flex/messaging/endpoints/StreamingAMFEndpoint.java
@@ -22,8 +22,8 @@ import java.io.IOException;
 import java.util.Iterator;
 import java.util.List;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletResponse;
 
 import flex.management.runtime.messaging.endpoints.StreamingAMFEndpointControl;
 import flex.messaging.MessageBroker;
diff --git a/core/src/main/java/flex/messaging/endpoints/StreamingHTTPEndpoint.java b/core/src/main/java/flex/messaging/endpoints/StreamingHTTPEndpoint.java
index 6d573ba..a786646 100644
--- a/core/src/main/java/flex/messaging/endpoints/StreamingHTTPEndpoint.java
+++ b/core/src/main/java/flex/messaging/endpoints/StreamingHTTPEndpoint.java
@@ -22,8 +22,8 @@ import java.io.IOException;
 import java.util.Iterator;
 import java.util.List;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.HttpServletResponse;
 
 import flex.management.runtime.messaging.endpoints.StreamingHTTPEndpointControl;
 import flex.messaging.MessageBroker;
diff --git a/core/src/main/java/flex/messaging/endpoints/amf/SerializationFilter.java b/core/src/main/java/flex/messaging/endpoints/amf/SerializationFilter.java
index f188dee..d3b8c9b 100644
--- a/core/src/main/java/flex/messaging/endpoints/amf/SerializationFilter.java
+++ b/core/src/main/java/flex/messaging/endpoints/amf/SerializationFilter.java
@@ -25,7 +25,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.Charset;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 import flex.messaging.FlexContext;
 import flex.messaging.MessageException;
diff --git a/core/src/main/java/flex/messaging/endpoints/amf/SessionFilter.java b/core/src/main/java/flex/messaging/endpoints/amf/SessionFilter.java
index 0c2e995..e8062f8 100644
--- a/core/src/main/java/flex/messaging/endpoints/amf/SessionFilter.java
+++ b/core/src/main/java/flex/messaging/endpoints/amf/SessionFilter.java
@@ -23,8 +23,8 @@ import flex.messaging.io.MessageIOConstants;
 
 import java.io.IOException;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 /**
  * This filter detects whether a request URL is decorated with a ;jessionid token
diff --git a/core/src/main/java/flex/messaging/factories/JavaFactory.java b/core/src/main/java/flex/messaging/factories/JavaFactory.java
index 6286228..a13bc61 100644
--- a/core/src/main/java/flex/messaging/factories/JavaFactory.java
+++ b/core/src/main/java/flex/messaging/factories/JavaFactory.java
@@ -32,7 +32,7 @@ import flex.messaging.log.Log;
 import flex.messaging.util.StringUtils;
 import flex.messaging.util.ExceptionUtil;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 
 /**
  * This class implements the FlexFactory interface to constructs Flex messaging
diff --git a/core/src/main/java/flex/messaging/io/StatusInfoProxy.java b/core/src/main/java/flex/messaging/io/StatusInfoProxy.java
index 7e5ecbf..0459f8a 100644
--- a/core/src/main/java/flex/messaging/io/StatusInfoProxy.java
+++ b/core/src/main/java/flex/messaging/io/StatusInfoProxy.java
@@ -22,7 +22,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 import flex.messaging.MessageException;
 
diff --git a/core/src/main/java/flex/messaging/log/HTTPRequestLog.java b/core/src/main/java/flex/messaging/log/HTTPRequestLog.java
index 8aba6b0..af8847f 100644
--- a/core/src/main/java/flex/messaging/log/HTTPRequestLog.java
+++ b/core/src/main/java/flex/messaging/log/HTTPRequestLog.java
@@ -16,8 +16,8 @@
  */
 package flex.messaging.log;
 
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.HttpServletRequest;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/core/src/main/java/flex/messaging/log/LoggingHttpServletRequestWrapper.java b/core/src/main/java/flex/messaging/log/LoggingHttpServletRequestWrapper.java
index 49168d4..45ea6dd 100644
--- a/core/src/main/java/flex/messaging/log/LoggingHttpServletRequestWrapper.java
+++ b/core/src/main/java/flex/messaging/log/LoggingHttpServletRequestWrapper.java
@@ -17,9 +17,10 @@
 
 package flex.messaging.log;
 
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
+import jakarta.servlet.ReadListener;
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -162,6 +163,22 @@ public class LoggingHttpServletRequestWrapper extends HttpServletRequestWrapper
         public int available() throws IOException {
             return this._inputStream.available();
         }
+
+        public boolean isReady() {
+            return true;
+        }
+
+        public boolean isFinished() {
+            try {
+                return this._inputStream.available() == 0;
+            } catch (IOException e) {
+                return true;
+            }
+        }
+
+        public void setReadListener(ReadListener readListener) {
+            throw new UnsupportedOperationException();
+        }
         // --------------------------------
         // This is the end of the modification.
         // --------------------------------
diff --git a/core/src/main/java/flex/messaging/log/ServletLogTarget.java b/core/src/main/java/flex/messaging/log/ServletLogTarget.java
index 1753664..229e745 100644
--- a/core/src/main/java/flex/messaging/log/ServletLogTarget.java
+++ b/core/src/main/java/flex/messaging/log/ServletLogTarget.java
@@ -16,7 +16,7 @@
  */
 package flex.messaging.log;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 
 /**
  * This is a log target which uses the servlet context in order to log
diff --git a/core/src/main/java/flex/messaging/messages/Message.java b/core/src/main/java/flex/messaging/messages/Message.java
index a399b1f..bff9950 100644
--- a/core/src/main/java/flex/messaging/messages/Message.java
+++ b/core/src/main/java/flex/messaging/messages/Message.java
@@ -26,7 +26,7 @@ import java.util.Map;
  * Endpoints.
  */
 public interface Message
-        extends Serializable, Cloneable, Comparable<Message> //, javax.jms.Message
+        extends Serializable, Cloneable, Comparable<Message> //, jakarta.jms.Message
 {
     // Message header name constants
     /**
diff --git a/core/src/main/java/flex/messaging/security/AppServerLoginCommand.java b/core/src/main/java/flex/messaging/security/AppServerLoginCommand.java
index 05bf587..353671f 100644
--- a/core/src/main/java/flex/messaging/security/AppServerLoginCommand.java
+++ b/core/src/main/java/flex/messaging/security/AppServerLoginCommand.java
@@ -20,8 +20,8 @@ import java.security.Principal;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.http.HttpServletRequest;
 
 import flex.messaging.FlexContext;
 import flex.messaging.io.MessageIOConstants;
diff --git a/core/src/main/java/flex/messaging/security/LoginCommand.java b/core/src/main/java/flex/messaging/security/LoginCommand.java
index 73b2412..abf48a8 100644
--- a/core/src/main/java/flex/messaging/security/LoginCommand.java
+++ b/core/src/main/java/flex/messaging/security/LoginCommand.java
@@ -16,7 +16,7 @@
  */
 package flex.messaging.security;
 
-import javax.servlet.ServletConfig;
+import jakarta.servlet.ServletConfig;
 
 import java.security.Principal;
 import java.util.List;
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/AsyncMessageReceiver.java b/core/src/main/java/flex/messaging/services/messaging/adapters/AsyncMessageReceiver.java
index c0f96f0..a927dfa 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/AsyncMessageReceiver.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/AsyncMessageReceiver.java
@@ -16,10 +16,10 @@
  */
 package flex.messaging.services.messaging.adapters;
 
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageListener;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
 
 /**
  * A <code>MessageReceiver</code> that receives messages asynchronously from JMS.
@@ -51,7 +51,7 @@ class AsyncMessageReceiver implements MessageReceiver, ExceptionListener, Messag
     }
 
     /**
-     * Implements javax.jms.ExceptionListener.onException.
+     * Implements jakarta.jms.ExceptionListener.onException.
      *
      * @param exception JMS exception received from the JMS server.
      */
@@ -60,7 +60,7 @@ class AsyncMessageReceiver implements MessageReceiver, ExceptionListener, Messag
     }
 
     /**
-     * Implements javax.jms.MessageListener.onMessage.
+     * Implements jakarta.jms.MessageListener.onMessage.
      *
      * @param message JMS message received from the JMS server.
      */
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSAdapter.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSAdapter.java
index 83bd335..59098ef 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSAdapter.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSAdapter.java
@@ -27,7 +27,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
-import javax.jms.JMSException;
+import jakarta.jms.JMSException;
 import javax.naming.Context;
 
 import flex.management.runtime.messaging.services.messaging.adapters.JMSAdapterControl;
@@ -149,7 +149,7 @@ public class JMSAdapter extends MessagingAdapter implements JMSConfigConstants,
         }
 
         if (settings.getMessageType() == null) {
-            // Unsupported JMS Message Type ''{0}''. Valid values are javax.jms.TextMessage, javax.jms.ObjectMessage, and javax.jms.MapMessage.
+            // Unsupported JMS Message Type ''{0}''. Valid values are jakarta.jms.TextMessage, jakarta.jms.ObjectMessage, and jakarta.jms.MapMessage.
             ConfigurationException ce = new ConfigurationException();
             ce.setMessage(INVALID_JMS_MESSAGE_TYPE, new Object[]{null});
             throw ce;
@@ -541,7 +541,7 @@ public class JMSAdapter extends MessagingAdapter implements JMSConfigConstants,
      */
     public void messageReceived(JMSMessageEvent evt) {
         JMSConsumer consumer = (JMSConsumer) evt.getSource();
-        javax.jms.Message jmsMessage = evt.getJMSMessage();
+        jakarta.jms.Message jmsMessage = evt.getJMSMessage();
 
         flex.messaging.messages.AsyncMessage flexMessage = convertToFlexMessage(jmsMessage, consumer);
         if (flexMessage != null) {
@@ -681,11 +681,11 @@ public class JMSAdapter extends MessagingAdapter implements JMSConfigConstants,
     }
 
     /**
-     * Convert from a <code>javax.jms.Message</code> type to the <code>flex.messaging.messages.AsyncMessage</code> type.
-     * Supported types are <code>javax.jms.TextMessage</code>, <code>javax.jms.ObjectMessage</code>,
-     * and <code>javax.jms.MapMessage</code>.
+     * Convert from a <code>jakarta.jms.Message</code> type to the <code>flex.messaging.messages.AsyncMessage</code> type.
+     * Supported types are <code>jakarta.jms.TextMessage</code>, <code>jakarta.jms.ObjectMessage</code>,
+     * and <code>jakarta.jms.MapMessage</code>.
      */
-    private flex.messaging.messages.AsyncMessage convertToFlexMessage(javax.jms.Message jmsMessage, JMSConsumer consumer) {
+    private flex.messaging.messages.AsyncMessage convertToFlexMessage(jakarta.jms.Message jmsMessage, JMSConsumer consumer) {
         flex.messaging.messages.AsyncMessage flexMessage = null;
         flexMessage = new flex.messaging.messages.AsyncMessage();
 
@@ -779,14 +779,14 @@ public class JMSAdapter extends MessagingAdapter implements JMSConfigConstants,
 
         // Finally, set the JMS message body of the Flex message body.
         try {
-            if (jmsMessage instanceof javax.jms.TextMessage) {
-                javax.jms.TextMessage textMessage = (javax.jms.TextMessage) jmsMessage;
+            if (jmsMessage instanceof jakarta.jms.TextMessage) {
+                jakarta.jms.TextMessage textMessage = (jakarta.jms.TextMessage) jmsMessage;
                 flexMessage.setBody(textMessage.getText());
-            } else if (jmsMessage instanceof javax.jms.ObjectMessage) {
-                javax.jms.ObjectMessage objMessage = (javax.jms.ObjectMessage) jmsMessage;
+            } else if (jmsMessage instanceof jakarta.jms.ObjectMessage) {
+                jakarta.jms.ObjectMessage objMessage = (jakarta.jms.ObjectMessage) jmsMessage;
                 flexMessage.setBody(objMessage.getObject());
-            } else if (jmsMessage instanceof javax.jms.MapMessage) {
-                javax.jms.MapMessage mapMessage = (javax.jms.MapMessage) jmsMessage;
+            } else if (jmsMessage instanceof jakarta.jms.MapMessage) {
+                jakarta.jms.MapMessage mapMessage = (jakarta.jms.MapMessage) jmsMessage;
                 @SuppressWarnings("unchecked")
                 Enumeration names = mapMessage.getMapNames();
                 Map<String, Object> body = new HashMap<String, Object>();
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConfigConstants.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConfigConstants.java
index 18fb22f..eb5147b 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConfigConstants.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConfigConstants.java
@@ -38,13 +38,13 @@ public interface JMSConfigConstants {
     String INITIAL_CONTEXT_ENVIRONMENT = "initial-context-environment";
     String JMS = "jms";
     String MAX_PRODUCERS = "max-producers";
-    String MAP_MESSAGE = "javax.jms.MapMessage";
+    String MAP_MESSAGE = "jakarta.jms.MapMessage";
     String MESSAGE_TYPE = "message-type";
     String MESSAGE_PRIORITY = "message-priority";
     String MODE = "mode";
     String NAME = "name";
     String NON_PERSISTENT = "non_persistent";
-    String OBJECT_MESSAGE = "javax.jms.ObjectMessage";
+    String OBJECT_MESSAGE = "jakarta.jms.ObjectMessage";
     String PASSWORD = "password";
     String PERSISTENT = "persistent";
     String PRESERVE_JMS_HEADERS = "preserve-jms-headers";
@@ -53,7 +53,7 @@ public interface JMSConfigConstants {
     String SYNC_RECEIVE_INTERVAL_MILLIS = "sync-receive-interval-millis";
     String SYNC_RECEIVE_WAIT_MILLIS = "sync-receive-wait-millis";
     String QUEUE = "queue";
-    String TEXT_MESSAGE = "javax.jms.TextMessage";
+    String TEXT_MESSAGE = "jakarta.jms.TextMessage";
     String TOPIC = "topic";
     String TRANSACTION_MODE = "transacted-sessions";
     String USERNAME = "username";
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConsumer.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConsumer.java
index 9876083..ca92539 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConsumer.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSConsumer.java
@@ -19,19 +19,19 @@ package flex.messaging.services.messaging.adapters;
 import java.util.Iterator;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.Session;
+import jakarta.jms.ExceptionListener;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.MessageListener;
+import jakarta.jms.Session;
 import javax.naming.NamingException;
 
 import flex.messaging.MessageException;
 import flex.messaging.log.Log;
 
 /**
- * A JMSProxy subclass for <code>javax.jms.MessageConsumer</code> instance.
+ * A JMSProxy subclass for <code>jakarta.jms.MessageConsumer</code> instance.
  */
 public abstract class JMSConsumer extends JMSProxy implements ExceptionListener {
     /* JMS related variables */
@@ -207,7 +207,7 @@ public abstract class JMSConsumer extends JMSProxy implements ExceptionListener
 
     /**
      * Returns the selector expression used when the underlying
-     * <code>javax.jms.MessageConsumer</code> is created.
+     * <code>jakarta.jms.MessageConsumer</code> is created.
      *
      * @return The selector expression.
      */
@@ -217,7 +217,7 @@ public abstract class JMSConsumer extends JMSProxy implements ExceptionListener
 
     /**
      * Sets the selector expression used when the underlying
-     * <code>javax.jms.MessageConsumer</code> is created. This property should
+     * <code>jakarta.jms.MessageConsumer</code> is created. This property should
      * not change after startup.
      *
      * @param selectorExpression The selector expression.
@@ -227,7 +227,7 @@ public abstract class JMSConsumer extends JMSProxy implements ExceptionListener
     }
 
     /**
-     * Implementation of javax.jms.ExceptionListener.onException.
+     * Implementation of jakarta.jms.ExceptionListener.onException.
      * Dispatches the JMS exception to registered JMS exception listeners.
      *
      * @param exception The thrown JMS exception.
@@ -347,7 +347,7 @@ public abstract class JMSConsumer extends JMSProxy implements ExceptionListener
      * and falls back to sync message delivery if it cannot.
      * <p>
      * This method should be called by subclasses once there is an underlying
-     * <code>javax.jms.MessageConsumer</code>.
+     * <code>jakarta.jms.MessageConsumer</code>.
      */
     private void initializeMessageReceiver() {
         // If an AsyncMessageReceiver is manually set, make sure the app server
@@ -357,11 +357,11 @@ public abstract class JMSConsumer extends JMSProxy implements ExceptionListener
                 String restrictedMethod = null;
                 try {
                     // Test if MessageListener is restricted.
-                    restrictedMethod = "javax.jms.MessageConsumer.setMessageListener";
+                    restrictedMethod = "jakarta.jms.MessageConsumer.setMessageListener";
                     consumer.getMessageListener();
 
                     // Test if ExceptionListener is restricted.
-                    restrictedMethod = "javax.jms.Connection.setExceptionListener";
+                    restrictedMethod = "jakarta.jms.Connection.setExceptionListener";
                     connection.setExceptionListener((AsyncMessageReceiver) messageReceiver);
 
                     if (Log.isInfo())
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSExceptionEvent.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSExceptionEvent.java
index 31c5348..38af4f5 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSExceptionEvent.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSExceptionEvent.java
@@ -17,7 +17,7 @@
 package flex.messaging.services.messaging.adapters;
 
 import java.util.EventObject;
-import javax.jms.JMSException;
+import jakarta.jms.JMSException;
 
 /**
  * Event dispatched to the JMSExceptionListener when a JMS exception is encountered
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSMessageEvent.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSMessageEvent.java
index 1ace43d..a472a79 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSMessageEvent.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSMessageEvent.java
@@ -17,7 +17,7 @@
 package flex.messaging.services.messaging.adapters;
 
 import java.util.EventObject;
-import javax.jms.Message;
+import jakarta.jms.Message;
 
 /**
  * Event dispatched to the JMSMessageListener when a JMS message is received
@@ -34,7 +34,7 @@ public class JMSMessageEvent extends EventObject {
      * @param source       The source of the message.
      * @param jmsException The actual JMS message.
      */
-    JMSMessageEvent(JMSConsumer source, javax.jms.Message message) {
+    JMSMessageEvent(JMSConsumer source, jakarta.jms.Message message) {
         super(source);
         this.message = message;
     }
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProducer.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProducer.java
index 5c1b1dc..adfb13d 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProducer.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProducer.java
@@ -21,8 +21,8 @@ import flex.messaging.config.ConfigurationException;
 import flex.messaging.log.Log;
 import flex.messaging.messages.MessagePerformanceUtils;
 
-import javax.jms.JMSException;
-import javax.jms.MessageProducer;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageProducer;
 import javax.naming.NamingException;
 
 import java.io.Serializable;
@@ -31,7 +31,7 @@ import java.util.Iterator;
 import java.util.Map;
 
 /**
- * A JMSProxy subclass for <code>javax.jms.MessageProducer</code> instances.
+ * A JMSProxy subclass for <code>jakarta.jms.MessageProducer</code> instances.
  */
 public abstract class JMSProducer extends JMSProxy {
     /* JMS related variables */
@@ -48,13 +48,13 @@ public abstract class JMSProducer extends JMSProxy {
     //--------------------------------------------------------------------------
 
     /**
-     * Create a new JMSProducer with default delivery mode of <code>javax.jms.Message.DEFAULT_DELIVERY_MODE</code>
-     * and default message priority of <code>javax.jms.Message.DEFAULT_PRIORITY</code>.
+     * Create a new JMSProducer with default delivery mode of <code>jakarta.jms.Message.DEFAULT_DELIVERY_MODE</code>
+     * and default message priority of <code>jakarta.jms.Message.DEFAULT_PRIORITY</code>.
      */
     public JMSProducer() {
         super();
-        deliveryMode = javax.jms.Message.DEFAULT_DELIVERY_MODE;
-        messagePriority = javax.jms.Message.DEFAULT_PRIORITY;
+        deliveryMode = jakarta.jms.Message.DEFAULT_DELIVERY_MODE;
+        messagePriority = jakarta.jms.Message.DEFAULT_PRIORITY;
     }
 
     //--------------------------------------------------------------------------
@@ -73,11 +73,11 @@ public abstract class JMSProducer extends JMSProxy {
 
         String deliveryString = settings.getDeliveryMode();
         if (deliveryString.equals(JMSConfigConstants.DEFAULT_DELIVERY_MODE))
-            deliveryMode = javax.jms.Message.DEFAULT_DELIVERY_MODE;
+            deliveryMode = jakarta.jms.Message.DEFAULT_DELIVERY_MODE;
         else if (deliveryString.equals(JMSConfigConstants.PERSISTENT))
-            deliveryMode = javax.jms.DeliveryMode.PERSISTENT;
+            deliveryMode = jakarta.jms.DeliveryMode.PERSISTENT;
         else if (deliveryString.equals(JMSConfigConstants.NON_PERSISTENT))
-            deliveryMode = javax.jms.DeliveryMode.NON_PERSISTENT;
+            deliveryMode = jakarta.jms.DeliveryMode.NON_PERSISTENT;
 
         messagePriority = settings.getMessagePriority();
         messageType = settings.getMessageType();
@@ -94,7 +94,7 @@ public abstract class JMSProducer extends JMSProxy {
         if (messageType == null || !(messageType.equals(JMSConfigConstants.TEXT_MESSAGE)
                 || messageType.equals(JMSConfigConstants.OBJECT_MESSAGE)
                 || messageType.equals(JMSConfigConstants.MAP_MESSAGE))) {
-            // Unsupported JMS Message Type ''{0}''. Valid values are javax.jms.TextMessage, javax.jms.ObjectMessage, javax.jms.MapMessage.
+            // Unsupported JMS Message Type ''{0}''. Valid values are jakarta.jms.TextMessage, jakarta.jms.ObjectMessage, jakarta.jms.MapMessage.
             ConfigurationException ce = new ConfigurationException();
             ce.setMessage(JMSConfigConstants.INVALID_JMS_MESSAGE_TYPE, new Object[]{messageType});
             throw ce;
@@ -152,15 +152,15 @@ public abstract class JMSProducer extends JMSProxy {
 
     /**
      * Sets the delivery mode used by the <code>JMSProducer</code>. Valid values
-     * javax.jms.DeliveryMode.PERSISTENT and javax.jms.DeliveryMode.NON_PERSISTENT.
-     * This propery is optional and defaults to javax.jms.Message.DEFAULT_DELIVERY_MODE.
+     * jakarta.jms.DeliveryMode.PERSISTENT and jakarta.jms.DeliveryMode.NON_PERSISTENT.
+     * This propery is optional and defaults to jakarta.jms.Message.DEFAULT_DELIVERY_MODE.
      *
      * @param deliveryMode
      */
     public void setDeliveryMode(int deliveryMode) {
-        if (deliveryMode == javax.jms.Message.DEFAULT_DELIVERY_MODE
-                || deliveryMode == javax.jms.DeliveryMode.NON_PERSISTENT
-                || deliveryMode == javax.jms.DeliveryMode.PERSISTENT)
+        if (deliveryMode == jakarta.jms.Message.DEFAULT_DELIVERY_MODE
+                || deliveryMode == jakarta.jms.DeliveryMode.NON_PERSISTENT
+                || deliveryMode == jakarta.jms.DeliveryMode.PERSISTENT)
             this.deliveryMode = deliveryMode;
     }
 
@@ -175,7 +175,7 @@ public abstract class JMSProducer extends JMSProxy {
 
     /**
      * Sets the message priority used by the <code>JMSProducer</code>.
-     * This property is optional and defaults to <code>javax.jms.Message.DEFAULT_PRIORITY</code>.
+     * This property is optional and defaults to <code>jakarta.jms.Message.DEFAULT_PRIORITY</code>.
      *
      * @param messagePriority an int specifying the message priority.
      */
@@ -194,7 +194,7 @@ public abstract class JMSProducer extends JMSProxy {
 
     /**
      * Sets the message type used by the <code>JMSProducer</code>. Supported
-     * types are <code>javax.jms.TextMessage</code> and <code>javax.jms.ObjectMessage</code>.
+     * types are <code>jakarta.jms.TextMessage</code> and <code>jakarta.jms.ObjectMessage</code>.
      * This property is mandatory.
      *
      * @param messageType String representing the message type used.
@@ -209,7 +209,7 @@ public abstract class JMSProducer extends JMSProxy {
     //
     //--------------------------------------------------------------------------
 
-    protected void copyHeadersToProperties(Map properties, javax.jms.Message message) throws JMSException {
+    protected void copyHeadersToProperties(Map properties, jakarta.jms.Message message) throws JMSException {
         // Generic Flex headers become JMS properties, named Flex headers become JMS headers
         for (Iterator iter = properties.keySet().iterator(); iter.hasNext(); ) {
             String propName = (String) iter.next();
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProxy.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProxy.java
index d848292..ca2db49 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProxy.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSProxy.java
@@ -17,11 +17,11 @@
 package flex.messaging.services.messaging.adapters;
 
 import java.util.Hashtable;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Session;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Destination;
+import jakarta.jms.JMSException;
+import jakarta.jms.Session;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
@@ -56,10 +56,10 @@ public abstract class JMSProxy {
 
     /**
      * Creates a new <code>JMSProxy</code> default default acknowledge mode of
-     * <code>javax.jms.Session.AUTO_ACKNOWLEDGE</code>.
+     * <code>jakarta.jms.Session.AUTO_ACKNOWLEDGE</code>.
      */
     public JMSProxy() {
-        acknowledgeMode = javax.jms.Session.AUTO_ACKNOWLEDGE;
+        acknowledgeMode = jakarta.jms.Session.AUTO_ACKNOWLEDGE;
     }
 
     //--------------------------------------------------------------------------
@@ -182,9 +182,9 @@ public abstract class JMSProxy {
 
     /**
      * Sets the acknowledge mode used by the <code>JMSProxy</code>. Valid values
-     * are javax.jms.Session.AUTO_ACKNOWLEDGE, javax.jms.Session.CLIENT_ACKNOWLEDGE,
-     * javax.jms.Session.DUPS_OK_ACNOWLEDGE. This property is optional and
-     * defaults to javax.jms.Session.AUTO_ACKNOWLEDGE.
+     * are jakarta.jms.Session.AUTO_ACKNOWLEDGE, jakarta.jms.Session.CLIENT_ACKNOWLEDGE,
+     * jakarta.jms.Session.DUPS_OK_ACNOWLEDGE. This property is optional and
+     * defaults to jakarta.jms.Session.AUTO_ACKNOWLEDGE.
      *
      * @param acknowledgeMode An int representing the acknowledge mode used.
      */
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueConsumer.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueConsumer.java
index f4c7fcf..b366840 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueConsumer.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueConsumer.java
@@ -16,11 +16,11 @@
  */
 package flex.messaging.services.messaging.adapters;
 
-import javax.jms.JMSException;
-import javax.jms.Queue;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSession;
+import jakarta.jms.JMSException;
+import jakarta.jms.Queue;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.QueueSession;
 import javax.naming.NamingException;
 
 import flex.messaging.MessageException;
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueProducer.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueProducer.java
index 6359c48..1f39959 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueProducer.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSQueueProducer.java
@@ -19,15 +19,15 @@ package flex.messaging.services.messaging.adapters;
 import java.io.Serializable;
 import java.util.Map;
 
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
-import javax.jms.QueueSender;
-import javax.jms.QueueSession;
-import javax.jms.TextMessage;
+import jakarta.jms.JMSException;
+import jakarta.jms.MapMessage;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.Queue;
+import jakarta.jms.QueueConnection;
+import jakarta.jms.QueueConnectionFactory;
+import jakarta.jms.QueueSender;
+import jakarta.jms.QueueSession;
+import jakarta.jms.TextMessage;
 import javax.naming.NamingException;
 
 import flex.messaging.MessageException;
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSSettings.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSSettings.java
index c6c6fbc..ae4719d 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSSettings.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSSettings.java
@@ -51,7 +51,7 @@ public class JMSSettings {
         destinationType = JMSConfigConstants.TOPIC;
         deliverySettings = new DeliverySettings();
         maxProducers = JMSConfigConstants.defaultMaxProducers;
-        messagePriority = javax.jms.Message.DEFAULT_PRIORITY;
+        messagePriority = jakarta.jms.Message.DEFAULT_PRIORITY;
         preserveJMSHeaders = JMSConfigConstants.defaultPreserveJMSHeaders;
     }
 
@@ -368,7 +368,7 @@ public class JMSSettings {
     /**
      * Sets the <code>message-priority</code> property which is the JMS priority
      * for messages sent by Flex producers. This property is optional and
-     * defaults to <code>javax.jms.Message.DEFAULT_PRIORITY</code>.
+     * defaults to <code>jakarta.jms.Message.DEFAULT_PRIORITY</code>.
      *
      * @param priority an int specifying the <code>message-priority</code>.
      */
@@ -387,18 +387,18 @@ public class JMSSettings {
 
     /**
      * Sets the <code>message-type</code> property which is the
-     * <code>javax.jms.Message</code> type which the adapter should use for the
+     * <code>jakarta.jms.Message</code> type which the adapter should use for the
      * destination.
      *
      * @param type The <code>message-type</code> property. Supported types are
-     *             <code>javax.jms.TextMessage</code>, <code>javax.jms.ObjectMessage</code>,
-     *             and <code>javax.jms.MapMessage</code>.
+     *             <code>jakarta.jms.TextMessage</code>, <code>jakarta.jms.ObjectMessage</code>,
+     *             and <code>jakarta.jms.MapMessage</code>.
      */
     public void setMessageType(String type) {
         if (type == null || !(type.equals(JMSConfigConstants.TEXT_MESSAGE)
                 || type.equals(JMSConfigConstants.OBJECT_MESSAGE)
                 || type.equals(JMSConfigConstants.MAP_MESSAGE))) {
-            // Unsupported JMS Message Type ''{0}''. Valid values are javax.jms.TextMessage and javax.jms.ObjectMessage.
+            // Unsupported JMS Message Type ''{0}''. Valid values are jakarta.jms.TextMessage and jakarta.jms.ObjectMessage.
             ConfigurationException ce = new ConfigurationException();
             ce.setMessage(JMSConfigConstants.INVALID_JMS_MESSAGE_TYPE, new Object[]{type});
             throw ce;
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicConsumer.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicConsumer.java
index 29e7ce7..c5f910f 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicConsumer.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicConsumer.java
@@ -16,11 +16,11 @@
  */
 package flex.messaging.services.messaging.adapters;
 
-import javax.jms.JMSException;
-import javax.jms.Topic;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.TopicSession;
+import jakarta.jms.JMSException;
+import jakarta.jms.Topic;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
+import jakarta.jms.TopicSession;
 import javax.naming.NamingException;
 
 import flex.messaging.MessageException;
@@ -131,7 +131,7 @@ public class JMSTopicConsumer extends JMSConsumer {
                                 + "on the topic connection because it was interrupted: "
                                 + ie.toString());
                 } catch (ExecutionException ee) {
-                    // JMS topic consumer for JMS destination ''{0}'' is configured to use durable subscriptions but the application server does not permit javax.jms.Connection.setClientID method needed to support durable subscribers. Set durable property to false.
+                    // JMS topic consumer for JMS destination ''{0}'' is configured to use durable subscriptions but the application server does not permit jakarta.jms.Connection.setClientID method needed to support durable subscribers. Set durable property to false.
                     MessageException me = new MessageException();
                     me.setMessage(JMSConfigConstants.DURABLE_SUBSCRIBER_NOT_SUPPORTED, new Object[]{destinationJndiName});
                     throw me;
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicProducer.java b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicProducer.java
index 3b479f9..550ce7e 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicProducer.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/JMSTopicProducer.java
@@ -18,15 +18,15 @@ package flex.messaging.services.messaging.adapters;
 
 import flex.messaging.MessageException;
 
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.ObjectMessage;
-import javax.jms.TextMessage;
-import javax.jms.Topic;
-import javax.jms.TopicConnection;
-import javax.jms.TopicConnectionFactory;
-import javax.jms.TopicPublisher;
-import javax.jms.TopicSession;
+import jakarta.jms.JMSException;
+import jakarta.jms.MapMessage;
+import jakarta.jms.ObjectMessage;
+import jakarta.jms.TextMessage;
+import jakarta.jms.Topic;
+import jakarta.jms.TopicConnection;
+import jakarta.jms.TopicConnectionFactory;
+import jakarta.jms.TopicPublisher;
+import jakarta.jms.TopicSession;
 import javax.naming.NamingException;
 import java.io.Serializable;
 import java.util.Map;
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/MessageReceiver.java b/core/src/main/java/flex/messaging/services/messaging/adapters/MessageReceiver.java
index cad9d4a..5e203ca 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/MessageReceiver.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/MessageReceiver.java
@@ -16,7 +16,7 @@
  */
 package flex.messaging.services.messaging.adapters;
 
-import javax.jms.JMSException;
+import jakarta.jms.JMSException;
 
 /**
  * An interface used by <code>JMSConsumer</code> to receive messages from JMS.
diff --git a/core/src/main/java/flex/messaging/services/messaging/adapters/SyncMessageReceiver.java b/core/src/main/java/flex/messaging/services/messaging/adapters/SyncMessageReceiver.java
index 3c20dfd..d4369b9 100644
--- a/core/src/main/java/flex/messaging/services/messaging/adapters/SyncMessageReceiver.java
+++ b/core/src/main/java/flex/messaging/services/messaging/adapters/SyncMessageReceiver.java
@@ -16,8 +16,8 @@
  */
 package flex.messaging.services.messaging.adapters;
 
-import javax.jms.JMSException;
-import javax.jms.Message;
+import jakarta.jms.JMSException;
+import jakarta.jms.Message;
 
 import flex.messaging.log.Log;
 
@@ -28,7 +28,7 @@ import java.util.concurrent.TimeUnit;
 
 /**
  * A <code>MessageReceiver</code> that receives messages from JMS using
- * synchronous <code>javax.jms.MessageConsumer.receive</code> call.
+ * synchronous <code>jakarta.jms.MessageConsumer.receive</code> call.
  */
 class SyncMessageReceiver implements MessageReceiver {
     private ScheduledExecutorService messageReceiverService;
@@ -162,7 +162,7 @@ class SyncMessageReceiver implements MessageReceiver {
     }
 
     /**
-     * Message receive threads that perform sync javax.jms.MessageConsumer.receive
+     * Message receive threads that perform sync jakarta.jms.MessageConsumer.receive
      * calls.
      */
     class MessageReceiveThread implements Runnable {
diff --git a/distribution/pom.xml b/distribution/pom.xml
index 15ed4d0..2903cc4 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>blazeds</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>distribution</artifactId>
diff --git a/opt/blazeds-spring-boot-starter/README.adoc b/opt/blazeds-spring-boot-starter/README.adoc
deleted file mode 100644
index 3bb877a..0000000
--- a/opt/blazeds-spring-boot-starter/README.adoc
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-//  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
-//
-//      https://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.
-//
-= BlazeDS Spring-Boot Starter
-
-This module can be used to configure a BlazeDS server with Spring-Boot.
-It automatically kicks in as soon as a services-config.xml is detected in
-`META-INF/flex/services-config.xml`
-
-In order to call your Spring services from Flex using Remote objects, all you need is a Spring-Boot starter:
-
-.init/Application.java
-----
-package init;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.ComponentScan;
-
-@SpringBootApplication
-@ComponentScan("my.base.package")
-public class Application {
-
-    public static void main(String[] args) {
-        SpringApplication.run(Application.class, args);
-    }
-
-}
-----
-
-In order to do it's magic, you need to add a depdendency to the the BlazeDS Spring-Boot starter in your pom.xml
-
-.pom.xml
-----
-
-...
-        <dependency>
-            <groupId>org.apache.flex.blazeds</groupId>
-            <artifactId>blazeds-spring-boot-starter</artifactId>
-            <version>4.7.3-SNAPSHOT</version>
-        </dependency>
-...
-
-----
-
-The services-config.xml is the core part of this, as it describes which channels the BlazeDS instance will provide.
-It has to be located in the applications classpath in `META-INF/flex/services-config.xml`:
-
-.src/main/resources/META-INF/flex/services-config.xml
-----
-<?xml version="1.0" encoding="UTF-8"?>
-<services-config>
-    <services>
-        <service id="remoting-service" class="flex.messaging.services.RemotingService">
-            <adapters>
-                <adapter-definition
-                        id="java-object"
-                        class="flex.messaging.services.remoting.adapters.JavaAdapter"
-                        default="true"/>
-            </adapters>
-            <default-channels>
-                <channel ref="websocketAmf"/>
-                <channel ref="longPollingAmf"/>
-                <channel ref="shortPollingAmf"/>
-            </default-channels>
-        </service>
-    </services>
-
-    <channels>
-        <channel-definition id="websocketAmf" class="mx.messaging.channels.StreamingAMFChannel">
-            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/websocket-amf"
-                      class="flex.messaging.endpoints.StreamingAMFEndpoint"/>
-            <properties>
-                <server-to-client-heartbeat-millis>5000</server-to-client-heartbeat-millis>
-                <add-no-cache-headers>true</add-no-cache-headers>
-            </properties>
-        </channel-definition>
-        <channel-definition id="longPollingAmf" class="mx.messaging.channels.AMFChannel">
-            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/long-polling-amf"
-                     class="flex.messaging.endpoints.AMFEndpoint"/>
-            <properties>
-                <polling-enabled>true</polling-enabled>
-                <wait-interval-millis>0</wait-interval-millis>
-                <polling-interval-millis>1000</polling-interval-millis>
-                <max-waiting-poll-requests>100</max-waiting-poll-requests>
-                <piggybacking-enabled>true</piggybacking-enabled>
-                <add-no-cache-headers>true</add-no-cache-headers>
-            </properties>
-        </channel-definition>
-        <channel-definition id="shortPollingAmf" class="mx.messaging.channels.AMFChannel">
-            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/short-polling-amf"
-                      class="flex.messaging.endpoints.AMFEndpoint"/>
-            <properties>
-                <polling-enabled>true</polling-enabled>
-                <polling-interval-millis>3000</polling-interval-millis>
-                <piggybacking-enabled>true</piggybacking-enabled>
-                <add-no-cache-headers>true</add-no-cache-headers>
-            </properties>
-        </channel-definition>
-    </channels>
-
-    <flex-client>
-        <!-- Make sure clients are automatically expired -->
-        <timeout-minutes>720</timeout-minutes>
-    </flex-client>
-
-    <logging>
-        <!--
-                Logging inside BlazeDS is completely turned off.
-                The UniversalExceptionTranslator will handle logging
-                of exceptions inside Spring.
-        -->
-        <target class="flex.messaging.log.ConsoleTarget" level="None"/>
-    </logging>
-</services-config>
-----
-
-As soon as you have Spring services annotated with `@RemotingDestination`
-these are automatically accessible.
-
-.src/main/java/my/base/package/movement/MovementService.java
-----
-package my.base.package.movement;
-
-import org.springframework.flex.remoting.RemotingDestination;
-import org.springframework.stereotype.Service;
-
-@Service("movementService")
-@RemotingDestination
-public class MovementService {
-
-    @Override
-    public void stop() {
-        System.out.println("Stop");
-    }
-
-    @Override
-    public void moveForward() {
-        System.out.println("Forward");
-    }
-
-    @Override
-    public void moveLeft() {
-        System.out.println("Left");
-    }
-
-    @Override
-    public void moveRight() {
-        System.out.println("Right");
-    }
-
-    @Override
-    public void moveBack() {
-        System.out.println("Back");
-    }
-
-}
-----
-
-The Flex code for accessing these methods is now:
-
-.src/main/flex/my/base/package/rapiro/movement/MovementService.mxml
-----
-    <fx:Declarations>
-        <s:RemoteObject id="movementService"
-                        destination="movementService"
-                        endpoint="http://localhost:8080/messagebroker/short-polling-amf"
-                        fault="onFault(event)">
-            <s:method name="stop" result="onResult(event)"/>
-            <s:method name="moveForward" result="onResult(event)"/>
-            <s:method name="moveLeft" result="onResult(event)"/>
-            <s:method name="moveRight" result="onResult(event)"/>
-            <s:method name="moveBack" result="onResult(event)"/>
-        </s:RemoteObject>
-    </fx:Declarations>
-----
diff --git a/opt/blazeds-spring-boot-starter/pom.xml b/opt/blazeds-spring-boot-starter/pom.xml
deleted file mode 100644
index 6d31328..0000000
--- a/opt/blazeds-spring-boot-starter/pom.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<!--
-
-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flex.blazeds</groupId>
-        <artifactId>flex-messaging-opt</artifactId>
-        <version>4.8.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>blazeds-spring-boot-starter</artifactId>
-
-    <properties>
-        <spring.version>5.3.21</spring.version>
-        <spring-boot.version>2.7.0</spring-boot.version>
-    </properties>
-
-    <dependencies>
-        <!-- Spring-Boot dependencies -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-autoconfigure</artifactId>
-            <version>${spring-boot.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-beans</artifactId>
-            <version>${spring.version}</version>
-        </dependency>
-
-        <!--
-            A s we rely on the Web layer being configured,
-            we can also take care of providing it. This way
-            all you need is a dependency to blazeds-spring-boot-starter
-            and you have all you need.
-        -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>${spring-boot.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-tomcat</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-jetty</artifactId>
-            <version>${spring-boot.version}</version>
-        </dependency>
-
-        <!-- Add a reference to Apache Flex BlazeDS -->
-        <dependency>
-            <groupId>org.apache.flex.blazeds</groupId>
-            <artifactId>flex-messaging-core</artifactId>
-            <version>4.8.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.flex.blazeds</groupId>
-            <artifactId>flex-messaging-common</artifactId>
-            <version>4.8.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.flex.blazeds</groupId>
-            <artifactId>flex-messaging-remoting</artifactId>
-            <version>4.8.0-SNAPSHOT</version>
-        </dependency>
-
-        <!--
-            We'll use Spring Flex-Integration for actually
-            running BlazeDS in Spring.
-        -->
-        <dependency>
-            <groupId>org.springframework.flex</groupId>
-            <artifactId>spring-flex-core</artifactId>
-            <version>1.5.2.RELEASE</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.adobe.blazeds</groupId>
-                    <artifactId>blazeds-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>com.adobe.blazeds</groupId>
-                    <artifactId>blazeds-common</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>com.adobe.blazeds</groupId>
-                    <artifactId>blazeds-proxy</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>com.adobe.blazeds</groupId>
-                    <artifactId>blazeds-remoting</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-    </dependencies>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-aop</artifactId>
-                <version>5.3.21</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-asm</artifactId>
-                <version>3.1.4.RELEASE</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-context</artifactId>
-                <version>5.3.21</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-context-support</artifactId>
-                <version>5.3.21</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-</project>
diff --git a/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java b/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java
deleted file mode 100644
index b2587af..0000000
--- a/opt/blazeds-spring-boot-starter/src/main/java/org/apache/flex/blazeds/spring/BlazeDsAutoConfiguration.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *
- *  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.flex.blazeds.spring;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.flex.config.RemotingAnnotationPostProcessor;
-import org.springframework.flex.core.MessageBrokerFactoryBean;
-import org.springframework.flex.servlet.MessageBrokerHandlerAdapter;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
-import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
-
-import javax.servlet.ServletContext;
-import java.util.Properties;
-
-/**
- * Created by christoferdutz on 21.03.16.
- */
-@ConditionalOnWebApplication
-@ConditionalOnResource(resources = BlazeDsAutoConfiguration.SERVICES_CONFIG_PATH)
-public class BlazeDsAutoConfiguration extends WebMvcConfigurationSupport {
-
-    public static final String SERVICES_CONFIG_PATH = "classpath:/META-INF/flex/services-config.xml";
-
-    @Autowired
-    private ServletContext context;
-
-    @Autowired
-    private ResourceLoader resourceLoader;
-
-    @Bean(name = "_messageBroker")
-    public MessageBrokerFactoryBean messageBrokerFactoryBean() throws Exception {
-        MessageBrokerFactoryBean factoryBean = new MessageBrokerFactoryBean();
-        // TODO: Do all the special configuration magic here ...
-        //factoryBean.setConfigProcessors(null);
-        //factoryBean.setConfigurationManager(null);
-
-        // Setup the Spring stuff.
-        factoryBean.setResourceLoader(resourceLoader);
-        factoryBean.setServletContext(context);
-
-        // The most important option: Where the services-config.xml is located.
-        factoryBean.setServicesConfigPath(SERVICES_CONFIG_PATH);
-
-        // This actually internally creates and configures the message broker.
-        //factoryBean.afterPropertiesSet();
-
-        return factoryBean;
-    }
-
-    /**
-     * The MessageBrokerHandlerAdapter intercepts any requests to the
-     * MVC Servlet, detects the ones that match valid BlazeDS endpoints
-     * and redirects them to the matching endpoint implementation.
-     *
-     * @return MessageBrokerHandlerAdapter instance
-     */
-    @Bean
-    public MessageBrokerHandlerAdapter messageBrokerHandlerAdapter() {
-        return new MessageBrokerHandlerAdapter();
-    }
-
-    /**
-     * Tell the Dispatcher Servlet to redirect any requests in the
-     * "/messagebroker/" context to the BlazeDS MessageBroker.
-     *
-     * @return SimpleUrlHandlerMapping instance.
-     */
-    @Bean
-    public SimpleUrlHandlerMapping sampleServletMapping() {
-        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
-        mapping.setOrder(Integer.MAX_VALUE - 2);
-
-        Properties urlProperties = new Properties();
-        urlProperties.put("/messagebroker/*", "_messageBroker");
-
-        mapping.setMappings(urlProperties);
-        return mapping;
-    }
-
-    /**
-     * Post processor that automatically scans all created beans for
-     * ones annotated with @RemotingDestination and automatically adds
-     * these to the list of destinations at the MessageBroker.
-     *
-     * @return RemotingAnnotationPostProcessor instance.
-     */
-    @Bean
-    public RemotingAnnotationPostProcessor remotingAnnotationPostProcessor() {
-        return new RemotingAnnotationPostProcessor();
-    }
-
-}
diff --git a/opt/blazeds-spring-boot-starter/src/main/resources/META-INF/spring.factories b/opt/blazeds-spring-boot-starter/src/main/resources/META-INF/spring.factories
deleted file mode 100644
index 6010223..0000000
--- a/opt/blazeds-spring-boot-starter/src/main/resources/META-INF/spring.factories
+++ /dev/null
@@ -1,19 +0,0 @@
-################################################################################
-##
-##  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.
-##
-################################################################################
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.apache.flex.blazeds.spring.BlazeDsAutoConfiguration
diff --git a/opt/oracle/pom.xml b/opt/oracle/pom.xml
deleted file mode 100644
index 943c184..0000000
--- a/opt/oracle/pom.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-
-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flex.blazeds</groupId>
-        <artifactId>flex-messaging-opt</artifactId>
-        <version>4.8.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>flex-messaging-opt-oracle</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.oracle.oc4j</groupId>
-            <artifactId>oc4j-api</artifactId>
-            <version>10.0.3.0.0</version>
-            <scope>system</scope>
-            <systemPath>${basedir}/../../lib/oc4j-api.jar</systemPath>
-        </dependency>
-        <dependency>
-            <groupId>com.oracle.oc4j</groupId>
-            <artifactId>jaas</artifactId>
-            <version>1.4</version>
-            <scope>system</scope>
-            <systemPath>${basedir}/../../lib/jazncore.jar</systemPath>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/opt/oracle/src/main/java/flex/messaging/security/OracleLoginCommand.java b/opt/oracle/src/main/java/flex/messaging/security/OracleLoginCommand.java
deleted file mode 100755
index 7aa590f..0000000
--- a/opt/oracle/src/main/java/flex/messaging/security/OracleLoginCommand.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * 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 flex.messaging.security;
-
-import oracle.security.jazn.JAZNConfig;
-import oracle.security.jazn.callback.JAZNCallbackHandler;
-
-import java.security.Principal;
-import java.util.*;
-import javax.security.auth.callback.*;
-import javax.security.auth.login.*;
-
-/**
- * A Oracle specific implementation of LoginCommand to manually authenticate
- * a user with the current web-app container.
- */
-public class OracleLoginCommand extends AppServerLoginCommand {
-    /**
-     * {@inheritDoc}
-     */
-    public Principal doAuthentication(String username, Object credentials)
-            throws SecurityException {
-        OracleUser user;
-        try {
-            CallbackHandler callbackHandler = new JAZNCallbackHandler
-                    (JAZNConfig.getJAZNConfig(), null,
-                            username, extractPassword(credentials));
-            LoginContext context = new LoginContext
-                    ("oracle.security.jazn.oc4j.JAZNUserManager", callbackHandler);
-            user = new OracleUser(context);
-        } catch (LoginException loginException) {
-            throw wrapLoginException(loginException);
-        }
-        return user;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean doAuthorization(Principal principal, List roles)
-            throws SecurityException {
-        boolean result = false;
-        if (principal instanceof OracleUser) {
-            OracleUser user = (OracleUser) principal;
-            result = user.isMemberOf(roles);
-        }
-        return result;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean logout(Principal principal) throws SecurityException {
-        boolean result = false;
-        if (principal instanceof OracleUser) {
-            OracleUser user = (OracleUser) principal;
-            try {
-                user.logout();
-                result = true;
-            } catch (LoginException loginException) {
-                throw wrapLoginException(loginException);
-            }
-        }
-        return result;
-    }
-
-    private SecurityException wrapLoginException(LoginException exception) {
-        SecurityException result = new SecurityException();
-        result.setRootCause(exception);
-        return result;
-    }
-}
diff --git a/opt/oracle/src/main/java/flex/messaging/security/OracleUser.java b/opt/oracle/src/main/java/flex/messaging/security/OracleUser.java
deleted file mode 100755
index b85e668..0000000
--- a/opt/oracle/src/main/java/flex/messaging/security/OracleUser.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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 flex.messaging.security;
-
-import java.security.Principal;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.security.auth.Subject;
-import javax.security.auth.login.LoginContext;
-import javax.security.auth.login.LoginException;
-
-import oracle.security.jazn.realm.Realm;
-import oracle.security.jazn.realm.RealmRole;
-import oracle.security.jazn.realm.RealmUser;
-
-/**
- * An Oracle specific implementation of java.security.Principal.
- */
-public class OracleUser implements Principal {
-    private LoginContext context;
-    private Subject subject;
-
-    public OracleUser(LoginContext context) throws LoginException {
-        this.context = context;
-        context.logout();
-        context.login();
-        this.subject = context.getSubject();
-    }
-
-    public void logout() throws LoginException {
-        context.logout();
-    }
-
-    private Principal userPrincipal() {
-        Set possibleUsers = subject.getPrincipals(RealmUser.class);
-        return (Principal) possibleUsers.iterator().next();
-    }
-
-    public boolean isMemberOf(List roleNames) {
-        boolean result = false;
-        Set possibleUsers = subject.getPrincipals(RealmRole.class);
-        Iterator itr = possibleUsers.iterator();
-        while (itr.hasNext()) {
-            RealmRole role = (RealmRole) itr.next();
-            Realm realm = role.getRealm();
-            String realmFullName = realm.getFullName();
-            String roleSimpleName = role.getName();
-            if ((realmFullName.length() > 0) &&
-                    roleSimpleName.startsWith(realmFullName)) {
-                // Format is "<realm full name>\<role name>"
-                roleSimpleName = roleSimpleName.substring
-                        (realmFullName.length() + 1);
-            }
-
-            if (roleNames.contains(roleSimpleName)) {
-                result = true;
-                break;
-            }
-        }
-        return result;
-    }
-
-    public boolean equals(Object object) {
-        boolean result = false;
-        if (object == this) {
-            result = true;
-        } else if (object instanceof OracleUser) {
-            OracleUser other = (OracleUser) object;
-            result = this.subject.equals(other.subject);
-        }
-        return result;
-    }
-
-    public String getName() {
-        return userPrincipal().getName();
-    }
-
-    public int hashCode() {
-        return this.subject.hashCode();
-    }
-
-    public String toString() {
-        return this.subject.toString();
-    }
-}
diff --git a/opt/pom.xml b/opt/pom.xml
index 918d6f7..e38c27e 100755
--- a/opt/pom.xml
+++ b/opt/pom.xml
@@ -22,7 +22,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>blazeds</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>flex-messaging-opt</artifactId>
@@ -46,8 +46,8 @@ limitations under the License.
         </dependency>
 
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
             <scope>provided</scope>
         </dependency>
 
diff --git a/opt/tomcat/pom.xml b/opt/tomcat/pom.xml
index 9a2ec1c..d513d2d 100644
--- a/opt/tomcat/pom.xml
+++ b/opt/tomcat/pom.xml
@@ -22,7 +22,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>flex-messaging-opt</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>flex-messaging-opt-tomcat</artifactId>
diff --git a/opt/tomcat/tomcat-4/pom.xml b/opt/tomcat/tomcat-4/pom.xml
deleted file mode 100644
index 54a6e9c..0000000
--- a/opt/tomcat/tomcat-4/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flex.blazeds</groupId>
-        <artifactId>flex-messaging-opt-tomcat</artifactId>
-        <version>4.8.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>flex-messaging-opt-tomcat-4</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>tomcat</groupId>
-            <artifactId>catalina</artifactId>
-            <version>4.1.36</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.flex.blazeds</groupId>
-            <artifactId>flex-messaging-opt-tomcat-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-
-</project>
diff --git a/opt/tomcat/tomcat-4/src/main/java/flex/messaging/security/TomcatValve4150.java b/opt/tomcat/tomcat-4/src/main/java/flex/messaging/security/TomcatValve4150.java
deleted file mode 100755
index 9eac7e2..0000000
--- a/opt/tomcat/tomcat-4/src/main/java/flex/messaging/security/TomcatValve4150.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * 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 flex.messaging.security;
-
-import flex.messaging.log.Log;
-import flex.messaging.log.LogCategories;
-import flex.messaging.util.ExceptionUtil;
-
-import org.apache.catalina.valves.ValveBase;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleException;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.Realm;
-import org.apache.catalina.Request;
-import org.apache.catalina.Response;
-import org.apache.catalina.ValveContext;
-import org.apache.catalina.Container;
-import org.apache.catalina.Session;
-import org.apache.catalina.HttpRequest;
-import org.apache.catalina.Manager;
-import org.apache.catalina.authenticator.Constants;
-
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.security.Principal;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A Tomcat valve for allowing programmatic login.  This valve saves the container, something not available
- * normally to a servlet, and allows login to the current realm.  The pieces interacting with Tomcat are taken from
- * org.apache.catalina.authenticator.AuthenticatorBase.  It would be nice if we could just extend that class or
- * call some of its methods, but things aren't set up in that class in such a way that this is possible
- * <p>
- * FIXME: doesn't support Tomcat's SingleSignOn idea.  This is a way to write custom valves that associate
- * the principal to different web apps or locations.  See AuthenticatorBase for details
- * <p>
- * JAR NOTE: this class is not in flex-messaging.jar but rather flex-tomcat-server.jar
- */
-public class TomcatValve4150 extends ValveBase implements Lifecycle {
-
-    private static String AMF_MATCH = "/amfgateway";
-    private static String GATEWAY_MATCH = "/flashgateway";
-    private static String MESSAGEBROKER_MATCH = "/messagebroker";
-    private static String CUSTOM_MATCH = System.getProperty("flex.tomcatValveMatch");
-
-    public void addLifecycleListener(LifecycleListener listener) {
-        // ignore
-    }
-
-    public LifecycleListener[] findLifecycleListeners() {
-        // ignore
-        return null;
-    }
-
-    public void removeLifecycleListener(LifecycleListener listener) {
-        // ignore
-    }
-
-    public void start() throws LifecycleException {
-
-        // RTMP may not go through invoke so we need to put at least one TomcatLoginImpl in the holder.
-        TomcatLogin login = new TomcatLoginImpl(getContainer(), null);
-        TomcatLoginHolder.setLogin(login);
-        // To avoid the thread processes the nio based endpoints does not match the thread start the valve (which is quite possible in Tomcat)
-        // We set the singleton 
-        TomcatLoginHolder.setNioBasedLogin(login);
-    }
-
-    public void stop() throws LifecycleException {
-        // ignore
-    }
-
-    public void invoke(Request request, Response response, ValveContext context)
-            throws IOException, ServletException {
-        ServletRequest servRequest = request.getRequest();
-        if (servRequest instanceof HttpServletRequest) {
-            // we only set the TomcatLoginImpl for gateway paths
-
-            HttpServletRequest hrequest = ((HttpServletRequest) servRequest);
-            String path = hrequest.getServletPath();
-            boolean match = false;
-            if (path == null) {
-                // We need to use a slighly-weaker uri match for 4.1
-                String uri = hrequest.getRequestURI();
-                match = (uri != null &&
-                        (uri.indexOf(MESSAGEBROKER_MATCH) != -1 ||
-                                uri.indexOf(AMF_MATCH) != -1 ||
-                                uri.indexOf(GATEWAY_MATCH) != -1 ||
-                                (CUSTOM_MATCH != null && uri.indexOf(CUSTOM_MATCH) != -1)));
-            } else {
-                match = (path.startsWith(MESSAGEBROKER_MATCH) ||
-                        path.startsWith(AMF_MATCH) ||
-                        path.startsWith(GATEWAY_MATCH) ||
-                        (CUSTOM_MATCH != null && path.startsWith(CUSTOM_MATCH)));
-            }
-
-            if (match) {
-                HttpRequest httpRequest = (HttpRequest) request;
-                TomcatLoginHolder.setLogin(new TomcatLoginImpl(getContainer(), httpRequest));
-
-                // copy over user princicpal and auth type values, just like in AuthenticatorBase.invoke()
-                Principal principal = hrequest.getUserPrincipal();
-                if (principal == null) {
-                    Session session = getSession(httpRequest, false);
-                    if (session != null) {
-                        principal = session.getPrincipal();
-                        if (principal != null) {
-                            httpRequest.setAuthType(session.getAuthType());
-                            httpRequest.setUserPrincipal(principal);
-                        }
-                    }
-                }
-            }
-        }
-        context.invokeNext(request, response);
-    }
-
-    // from AuthenticatorBase.getSession()
-    static Session getSession(HttpRequest request, boolean create) {
-
-        HttpServletRequest hreq =
-                (HttpServletRequest) request.getRequest();
-
-        HttpSession hses = hreq.getSession(create);
-
-        if (hses == null)
-            return (null);
-        Manager manager = request.getContext().getManager();
-
-        if (manager == null)
-            return (null);
-        else {
-            try {
-                return (manager.findSession(hses.getId()));
-            } catch (IOException e) {
-                Log.getLogger(LogCategories.SECURITY).error("Error in TomcatValve getting session id " + hses.getId() + " : " + ExceptionUtil.toString(e));
-                return (null);
-            }
-        }
-    }
-
-    class TomcatLoginImpl implements TomcatLogin {
-        private Container container;
-        private HttpRequest request;
-
-        TomcatLoginImpl(Container container, HttpRequest request) {
-            this.container = container;
-            this.request = request;
-        }
-
-        // authenticate the user and associate with the current session.  This is taken
-        // from AuthenticatorBase.register()
-        public Principal login(String username, String password, HttpServletRequest servletRequest) {
-            Realm realm = container.getRealm();
-            if (realm == null)
-                return null;
-            Principal principal = realm.authenticate(username, password);
-
-            if (principal != null) {
-                if (this.request != null && this.request.getRequest() == servletRequest) {
-                    request.setAuthType("flexmessaging"); //was "flashgateway"
-                    request.setUserPrincipal(principal);
-
-                    Session session = getSession(request, true);
-
-                    // Cache the authentication information in our session, if any
-                    if (session != null) {
-                        session.setAuthType("flexmessaging"); //was "flashgateway"
-                        session.setPrincipal(principal);
-                        if (username != null)
-                            session.setNote(Constants.SESS_USERNAME_NOTE, username);
-                        else
-                            session.removeNote(Constants.SESS_USERNAME_NOTE);
-                        if (password != null)
-                            session.setNote(Constants.SESS_PASSWORD_NOTE, password);
-                        else
-                            session.removeNote(Constants.SESS_PASSWORD_NOTE);
-                    }
-                }
-            }
-
-            return principal;
-        }
-
-        public boolean authorize(Principal principal, List roles) {
-
-            Realm realm = container.getRealm();
-            Iterator iter = roles.iterator();
-            while (iter.hasNext()) {
-                String role = (String) iter.next();
-                if (realm.hasRole(principal, role))
-                    return true;
-            }
-            return false;
-        }
-
-        public boolean logout(HttpServletRequest request) {
-            if (this.request != null && this.request.getRequest() == request) {
-                Session session = getSession(this.request, false);
-                if (session != null) {
-                    session.setPrincipal(null);
-                    session.setAuthType(null);
-                    session.removeNote(Constants.SESS_USERNAME_NOTE);
-                    session.removeNote(Constants.SESS_PASSWORD_NOTE);
-                }
-                return true;
-            }
-            return false;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public Principal convertPrincipal(Principal principal) {
-            return principal;
-        }
-    }
-
-}
diff --git a/opt/tomcat/tomcat-6/pom.xml b/opt/tomcat/tomcat-6/pom.xml
deleted file mode 100644
index 8552fdd..0000000
--- a/opt/tomcat/tomcat-6/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-
-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flex.blazeds</groupId>
-        <artifactId>flex-messaging-opt-tomcat</artifactId>
-        <version>4.8.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>flex-messaging-opt-tomcat-6</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tomcat</groupId>
-            <artifactId>servlet-api</artifactId>
-            <version>6.0.26</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.tomcat</groupId>
-            <artifactId>catalina</artifactId>
-            <version>6.0.53</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.flex.blazeds</groupId>
-            <artifactId>flex-messaging-opt-tomcat-base</artifactId>
-            <version>4.8.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/opt/tomcat/tomcat-6/src/main/java/flex/messaging/security/TomcatValve.java b/opt/tomcat/tomcat-6/src/main/java/flex/messaging/security/TomcatValve.java
deleted file mode 100755
index 6a9f697..0000000
--- a/opt/tomcat/tomcat-6/src/main/java/flex/messaging/security/TomcatValve.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * 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 flex.messaging.security;
-
-import flex.messaging.log.Log;
-import flex.messaging.log.LogCategories;
-import flex.messaging.util.ExceptionUtil;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleException;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.Manager;
-import org.apache.catalina.Realm;
-import org.apache.catalina.Session;
-import org.apache.catalina.Valve;
-import org.apache.catalina.authenticator.Constants;
-import org.apache.catalina.connector.Request;
-import org.apache.catalina.connector.Response;
-import org.apache.catalina.valves.ValveBase;
-
-/**
- * A Tomcat valve for allowing programmatic login.  This valve saves the container,
- * something not available normally to a servlet, and allows login to the current realm.
- * The pieces interacting with Tomcat are taken from org.apache.catalina.authenticator.AuthenticatorBase.
- * It would be nice if we could just extend that class or call some of its methods,
- * but things aren't set up in that class in such a way that this is possible
- * <p>
- * FIXME: Doesn't support Tomcat's SingleSignOn which is a way to write custom valves that associate
- * the principal to different web apps or locations. See AuthenticatorBase for details
- */
-public class TomcatValve extends ValveBase implements Lifecycle {
-    private static final String AUTH_TYPE = "flexmessaging"; // was "flashgateway"
-    private static final String AMF_MATCH = "/amfgateway";
-    private static final String GATEWAY_MATCH = "/flashgateway";
-    private static final String MESSAGEBROKER_MATCH = "/messagebroker";
-    private static String CUSTOM_MATCH = System.getProperty("flex.tomcatValveMatch");
-
-    public void invoke(Request request, Response response) throws IOException, ServletException {
-        invokeServletRequest(request);
-
-        Valve next = getNext();
-        if (next != null)
-            next.invoke(request, response);
-    }
-
-    private void invokeServletRequest(Request request) {
-        ServletRequest servRequest = request.getRequest();
-        if (!(servRequest instanceof HttpServletRequest))
-            return;
-
-        // We only set the TomcatLoginImpl for gateway paths
-        HttpServletRequest hrequest = (HttpServletRequest) servRequest;
-        boolean match = checkIfPathMatches(hrequest.getServletPath(), hrequest.getRequestURI());
-        if (match)
-            handleMatch(request, hrequest.getUserPrincipal());
-    }
-
-    private void handleMatch(Request request, Principal principal) {
-        TomcatLoginHolder.setLogin(new TomcatLoginImpl(getContainer(), request));
-
-        // Copy over user principal and auth type values, just like in AuthenticatorBase.invoke()
-        if (principal != null)
-            return;
-
-        Session session = getSession(request, false);
-        if (session == null)
-            return;
-
-        principal = session.getPrincipal();
-        if (principal != null) {
-            request.setAuthType(session.getAuthType());
-            request.setUserPrincipal(principal);
-        }
-    }
-
-    private boolean checkIfPathMatches(String path, String uri) {
-        if (path == null) {
-            // We need to use a slighly-weaker uri match for 4.1
-            return (uri != null &&
-                    (uri.indexOf(MESSAGEBROKER_MATCH) != -1 ||
-                            uri.indexOf(AMF_MATCH) != -1 ||
-                            uri.indexOf(GATEWAY_MATCH) != -1 ||
-                            (CUSTOM_MATCH != null && uri.indexOf(CUSTOM_MATCH) != -1)));
-        } else {
-            return (path.startsWith(MESSAGEBROKER_MATCH) ||
-                    path.startsWith(AMF_MATCH) ||
-                    path.startsWith(GATEWAY_MATCH) ||
-                    (CUSTOM_MATCH != null && path.startsWith(CUSTOM_MATCH)));
-        }
-    }
-
-    public void addLifecycleListener(LifecycleListener listener) {
-        // No-op.
-    }
-
-    public LifecycleListener[] findLifecycleListeners() {
-        return null;
-    }
-
-    public void removeLifecycleListener(LifecycleListener listener) {
-        // No-op.
-    }
-
-    public void start() throws LifecycleException {
-        // RTMP may not go through invoke so we need to put at least one TomcatLoginImpl in the holder.
-        TomcatLogin login = new TomcatLoginImpl(getContainer(), null);
-        TomcatLoginHolder.setLogin(login);
-        // To avoid the thread processes the nio based endpoints does not match the thread start the valve (which is quite possible in Tomcat)
-        // We set the singleton 
-        TomcatLoginHolder.setNioBasedLogin(login);
-    }
-
-    public void stop() throws LifecycleException {
-        // No-op.
-    }
-
-    // from AuthenticatorBase.getSession()
-    static Session getSession(Request request, boolean create) {
-
-        HttpServletRequest hreq = (HttpServletRequest) request.getRequest();
-        HttpSession hses = hreq.getSession(create);
-
-        if (hses == null)
-            return null;
-
-        Manager manager = request.getContext().getManager();
-        if (manager == null)
-            return null;
-
-        try {
-            return manager.findSession(hses.getId());
-        } catch (IOException e) {
-            Log.getLogger(LogCategories.SECURITY).error("Error in TomcatValve getting session id " + hses.getId() + " : " + ExceptionUtil.toString(e));
-            return null;
-        }
-    }
-
-    class TomcatLoginImpl implements TomcatLogin {
-        private Container container;
-        private Request request;
-
-        TomcatLoginImpl(Container container, Request request) {
-            this.container = container;
-            this.request = request;
-        }
-
-        // Authenticate the user and associate with the current session.
-        // This is taken from AuthenticatorBase.register()
-        public Principal login(String username, String password, HttpServletRequest servletRequest) {
-            Realm realm = container.getRealm();
-            if (realm == null)
-                return null;
-
-            Principal principal = realm.authenticate(username, password);
-            if (principal == null)
-                return null;
-
-            if (servletRequestMatches(servletRequest)) {
-                request.setAuthType(AUTH_TYPE);
-                request.setUserPrincipal(principal);
-
-                Session session = getSession(request, true);
-
-                // Cache the authentication information in our session.
-                if (session != null) {
-                    session.setAuthType(AUTH_TYPE);
-                    session.setPrincipal(principal);
-
-                    if (username != null)
-                        session.setNote(Constants.SESS_USERNAME_NOTE, username);
-                    else
-                        session.removeNote(Constants.SESS_USERNAME_NOTE);
-
-                    if (password != null)
-                        session.setNote(Constants.SESS_PASSWORD_NOTE, password);
-                    else
-                        session.removeNote(Constants.SESS_PASSWORD_NOTE);
-                }
-            }
-
-            return principal;
-        }
-
-        public boolean authorize(Principal principal, List roles) {
-            Realm realm = container.getRealm();
-            Iterator iter = roles.iterator();
-            while (iter.hasNext()) {
-                String role = (String) iter.next();
-                if (realm.hasRole(principal, role))
-                    return true;
-            }
-            return false;
-        }
-
-        public boolean logout(HttpServletRequest servletRequest) {
-            if (servletRequestMatches(servletRequest)) {
-                Session session = getSession(request, false);
-                if (session != null) {
-                    session.setPrincipal(null);
-                    session.setAuthType(null);
-                    session.removeNote(Constants.SESS_USERNAME_NOTE);
-                    session.removeNote(Constants.SESS_PASSWORD_NOTE);
-                }
-                return true;
-            }
-            return false;
-        }
-
-        private boolean servletRequestMatches(HttpServletRequest servletRequest) {
-            return request != null && request.getRequest() == servletRequest;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public Principal convertPrincipal(Principal principal) {
-            return principal;
-        }
-    }
-
-}
diff --git a/opt/tomcat/tomcat-7/pom.xml b/opt/tomcat/tomcat-7/pom.xml
deleted file mode 100644
index aad2d46..0000000
--- a/opt/tomcat/tomcat-7/pom.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-
-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flex.blazeds</groupId>
-        <artifactId>flex-messaging-opt-tomcat</artifactId>
-        <version>4.8.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>flex-messaging-opt-tomcat-7</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.tomcat</groupId>
-            <artifactId>tomcat-catalina</artifactId>
-            <version>7.0.107</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.flex.blazeds</groupId>
-            <artifactId>flex-messaging-opt-tomcat-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/opt/tomcat/tomcat-7/src/main/java/flex/messaging/security/Tomcat7Valve.java b/opt/tomcat/tomcat-7/src/main/java/flex/messaging/security/Tomcat7Valve.java
deleted file mode 100755
index bbd7866..0000000
--- a/opt/tomcat/tomcat-7/src/main/java/flex/messaging/security/Tomcat7Valve.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * 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 flex.messaging.security;
-
-import flex.messaging.log.Log;
-import flex.messaging.log.LogCategories;
-import flex.messaging.util.ExceptionUtil;
-
-import java.io.IOException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.servlet.ServletConfig;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleException;
-import org.apache.catalina.LifecycleListener;
-import org.apache.catalina.Manager;
-import org.apache.catalina.Realm;
-import org.apache.catalina.Role;
-import org.apache.catalina.Session;
-import org.apache.catalina.Valve;
-import org.apache.catalina.authenticator.Constants;
-import org.apache.catalina.connector.Request;
-import org.apache.catalina.connector.Response;
-import org.apache.catalina.realm.GenericPrincipal;
-import org.apache.catalina.users.AbstractUser;
-import org.apache.catalina.valves.ValveBase;
-import org.apache.catalina.Wrapper;
-
-/**
- * A Tomcat valve for allowing programmatic login.  This valve saves the container,
- * something not available normally to a servlet, and allows login to the current realm.
- * The pieces interacting with Tomcat are taken from org.apache.catalina.authenticator.AuthenticatorBase.
- * It would be nice if we could just extend that class or call some of its methods,
- * but things aren't set up in that class in such a way that this is possible
- * <p>
- * FIXME: Doesn't support Tomcat's SingleSignOn which is a way to write custom valves that associate
- * the principal to different web apps or locations. See AuthenticatorBase for details
- */
-public class Tomcat7Valve extends ValveBase implements Lifecycle {
-    private static final String AUTH_TYPE = "flexmessaging"; // was "flashgateway"
-    private static final String AMF_MATCH = "/amfgateway";
-    private static final String GATEWAY_MATCH = "/flashgateway";
-    private static final String MESSAGEBROKER_MATCH = "/messagebroker";
-    private static String CUSTOM_MATCH = System.getProperty("flex.tomcatValveMatch");
-
-    public Tomcat7Valve() {
-        super();
-
-        // RTMP may not go through invoke so we need to put at least one TomcatLoginImpl in the holder.
-        TomcatLogin login = new TomcatLoginImpl(this, null);
-        TomcatLoginHolder.setLogin(login);
-        // To avoid the thread processes the nio based endpoints does not match the thread start the valve (which is quite possible in Tomcat)
-        // We set the singleton 
-        TomcatLoginHolder.setNioBasedLogin(login);
-    }
-
-    public void invoke(Request request, Response response) throws IOException, ServletException {
-        invokeServletRequest(request);
-
-        Valve next = getNext();
-        if (next != null)
-            next.invoke(request, response);
-    }
-
-    private void invokeServletRequest(Request request) {
-        ServletRequest servRequest = request.getRequest();
-        if (!(servRequest instanceof HttpServletRequest))
-            return;
-
-        // We only set the TomcatLoginImpl for gateway paths
-        HttpServletRequest hrequest = (HttpServletRequest) servRequest;
-        boolean match = checkIfPathMatches(hrequest.getServletPath(), hrequest.getRequestURI());
-        if (match)
-            handleMatch(request, hrequest.getUserPrincipal());
-    }
-
-    private void handleMatch(Request request, Principal principal) {
-        TomcatLoginHolder.setLogin(new TomcatLoginImpl(this, request));
-
-        // Copy over user principal and auth type values, just like in AuthenticatorBase.invoke()
-        if (principal != null)
-            return;
-
-        Session session = getSession(request, false);
-        if (session == null)
-            return;
-
-        principal = session.getPrincipal();
-        if (principal != null) {
-            request.setAuthType(session.getAuthType());
-            request.setUserPrincipal(principal);
-        }
-    }
-
-    private boolean checkIfPathMatches(String path, String uri) {
-        if (path == null) {
-            // We need to use a slighly-weaker uri match for 4.1
-            return (uri != null &&
-                    (uri.indexOf(MESSAGEBROKER_MATCH) != -1 ||
-                            uri.indexOf(AMF_MATCH) != -1 ||
-                            uri.indexOf(GATEWAY_MATCH) != -1 ||
-                            (CUSTOM_MATCH != null && uri.indexOf(CUSTOM_MATCH) != -1)));
-        } else {
-            return (path.startsWith(MESSAGEBROKER_MATCH) ||
-                    path.startsWith(AMF_MATCH) ||
-                    path.startsWith(GATEWAY_MATCH) ||
-                    (CUSTOM_MATCH != null && path.startsWith(CUSTOM_MATCH)));
-        }
-    }
-
-    public void addLifecycleListener(LifecycleListener listener) {
-        // No-op.
-    }
-
-    public LifecycleListener[] findLifecycleListeners() {
-        return null;
-    }
-
-    public void removeLifecycleListener(LifecycleListener listener) {
-        // No-op.
-    }
-
-    // from AuthenticatorBase.getSession()
-    static Session getSession(Request request, boolean create) {
-
-        HttpServletRequest hreq = (HttpServletRequest) request.getRequest();
-        HttpSession hses = hreq.getSession(create);
-
-        if (hses == null)
-            return null;
-
-        Manager manager = request.getContext().getManager();
-        if (manager == null)
-            return null;
-
-        try {
-            return manager.findSession(hses.getId());
-        } catch (IOException e) {
-            Log.getLogger(LogCategories.SECURITY).error("Error in TomcatValve getting session id " + hses.getId() + " : " + ExceptionUtil.toString(e));
-            return null;
-        }
-    }
-
-    class TomcatLoginImpl implements TomcatLogin {
-        private ValveBase valve;
-        private Request request;
-
-        TomcatLoginImpl(ValveBase valve, Request request) {
-            this.valve = valve;
-            this.request = request;
-        }
-
-        // Authenticate the user and associate with the current session.
-        // This is taken from AuthenticatorBase.register()
-        public Principal login(String username, String password, HttpServletRequest servletRequest) {
-            Realm realm = valve.getContainer().getRealm();
-            if (realm == null)
-                return null;
-
-            Principal principal = realm.authenticate(username, password);
-            if (principal == null)
-                return null;
-
-            if (servletRequestMatches(servletRequest)) {
-                request.setAuthType(AUTH_TYPE);
-                request.setUserPrincipal(principal);
-
-                Session session = getSession(request, true);
-
-                // Cache the authentication information in our session.
-                if (session != null) {
-                    session.setAuthType(AUTH_TYPE);
-                    session.setPrincipal(principal);
-
-                    if (username != null)
-                        session.setNote(Constants.SESS_USERNAME_NOTE, username);
-                    else
-                        session.removeNote(Constants.SESS_USERNAME_NOTE);
-
-                    if (password != null)
-                        session.setNote(Constants.SESS_PASSWORD_NOTE, password);
-                    else
-                        session.removeNote(Constants.SESS_PASSWORD_NOTE);
-                }
-            }
-
-            return principal;
-        }
-
-        public boolean authorize(Principal principal, List roles) {
-            Realm realm = valve.getContainer().getRealm();
-            Iterator iter = roles.iterator();
-            while (iter.hasNext()) {
-                String role = (String) iter.next();
-                // For Tomcat 7, we need to get the wrapper from the request to support role mapping in the web.xml.
-                // This is only supported for servlet endpoints. For NIO endpoints, the wrapper will be null.
-                Wrapper wrapper = null;
-                if (request != null) {
-                    // in the servlet case get the wrapper
-                    wrapper = request.getWrapper();
-                }
-                // for nio the wrapper will be null
-                if (realm.hasRole(wrapper, principal, role))
-                    return true;
-            }
-            return false;
-        }
-
-        public boolean logout(HttpServletRequest servletRequest) {
-            if (servletRequestMatches(servletRequest)) {
-                Session session = getSession(request, false);
-                if (session != null) {
-                    session.setPrincipal(null);
-                    session.setAuthType(null);
-                    session.removeNote(Constants.SESS_USERNAME_NOTE);
-                    session.removeNote(Constants.SESS_PASSWORD_NOTE);
-                }
-                return true;
-            }
-            return false;
-        }
-
-        private boolean servletRequestMatches(HttpServletRequest servletRequest) {
-            return request != null && request.getRequest() == servletRequest;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        public Principal convertPrincipal(Principal principal) {
-            if (principal instanceof GenericPrincipal) {
-                return principal;
-            } else {
-                // We need to do the converting
-                if (principal instanceof AbstractUser) {
-                    AbstractUser abstractUser = (AbstractUser) principal;
-                    List<String> roles = new ArrayList<String>();
-                    Iterator roleIterator = abstractUser.getRoles();
-                    while (roleIterator.hasNext()) {
-                        Role role = (Role) roleIterator.next();
-                        roles.add(role.getName());
-                    }
-                    String userName = abstractUser.getUsername();
-                    String password = abstractUser.getPassword();
-                    return new GenericPrincipal(userName, password, roles);
-
-                } else {
-                    // no
-                    return principal;
-                }
-            }
-        }
-    }
-
-}
diff --git a/opt/tomcat/tomcat-7/src/main/resources/flex/messaging/security/tomcat-descriptor.xml b/opt/tomcat/tomcat-7/src/main/resources/flex/messaging/security/tomcat-descriptor.xml
deleted file mode 100755
index 9361423..0000000
--- a/opt/tomcat/tomcat-7/src/main/resources/flex/messaging/security/tomcat-descriptor.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
-  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.
-
--->
-<!DOCTYPE mbeans-descriptors PUBLIC
-        "-//Apache Software Foundation//DTD Model MBeans Configuration File"
-        "http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd">
-
-<!--
-     Descriptions of JMX MBeans for Catalina
- -->
-
-<mbeans-descriptors>
-
-    <mbean name="TomcatValve4150"
-           className="org.apache.catalina.mbeans.ClassNameMBean"
-           description="Valve that allows Flex to programmatically log in"
-           domain="Catalina"
-           group="Valve"
-           type="flex.messaging.security.TomcatValve4150">
-
-        <attribute name="className"
-                   description="Fully qualified class name of the managed object"
-                   type="java.lang.String"
-                   writeable="false"/>
-
-        <attribute name="debug"
-                   description="The debugging detail level for this component"
-                   type="int"/>
-
-
-    </mbean>
-
-    <mbean name="TomcatValve"
-           className="org.apache.catalina.mbeans.ClassNameMBean"
-           description="Valve that allows Flex to programmatically log in"
-           domain="Catalina"
-           group="Valve"
-           type="flex.messaging.security.TomcatValve">
-
-        <attribute name="className"
-                   description="Fully qualified class name of the managed object"
-                   type="java.lang.String"
-                   writeable="false"/>
-
-        <attribute name="debug"
-                   description="The debugging detail level for this component"
-                   type="int"/>
-
-
-    </mbean>
-</mbeans-descriptors>
diff --git a/opt/tomcat/tomcat-base/pom.xml b/opt/tomcat/tomcat-base/pom.xml
index 9023a0a..48d743d 100644
--- a/opt/tomcat/tomcat-base/pom.xml
+++ b/opt/tomcat/tomcat-base/pom.xml
@@ -22,7 +22,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>flex-messaging-opt-tomcat</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>flex-messaging-opt-tomcat-base</artifactId>
diff --git a/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLogin.java b/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLogin.java
index 27f430a..15ff3ad 100755
--- a/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLogin.java
+++ b/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLogin.java
@@ -19,7 +19,7 @@ package flex.messaging.security;
 import java.security.Principal;
 import java.util.List;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * Interface to code in the Tomcat valve. This is needed because Tomcat has a classloader system
diff --git a/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLoginCommand.java b/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLoginCommand.java
index 641567b..74efe9e 100755
--- a/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLoginCommand.java
+++ b/opt/tomcat/tomcat-base/src/main/java/flex/messaging/security/TomcatLoginCommand.java
@@ -19,8 +19,8 @@ package flex.messaging.security;
 import java.security.Principal;
 import java.util.List;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import flex.messaging.FlexContext;
 import flex.messaging.util.PropertyStringResourceLoader;
diff --git a/opt/weblogic/pom.xml b/opt/weblogic/pom.xml
deleted file mode 100644
index c56c2a7..0000000
--- a/opt/weblogic/pom.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-
-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flex.blazeds</groupId>
-        <artifactId>flex-messaging-opt</artifactId>
-        <version>4.8.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>flex-messaging-opt-weblogic</artifactId>
-
-    <distributionManagement>
-        <site>
-            <id>blazeds_mvn_site</id>
-            <url>${maven.site.local.url}/flex-messaging-opt/${project.artifactId}</url>
-        </site>
-    </distributionManagement>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.weblogic</groupId>
-            <artifactId>wsexception</artifactId>
-            <version>7.0.5.0</version>
-            <scope>system</scope>
-            <systemPath>${basedir}/../../lib/wsexception.jar</systemPath>
-        </dependency>
-        <dependency>
-            <groupId>com.weblogic</groupId>
-            <artifactId>weblogic</artifactId>
-            <version>7.0.5.0</version>
-            <scope>system</scope>
-            <systemPath>${basedir}/../../lib/weblogic.jar</systemPath>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <appserver>weblogic</appserver>
-        <source.dir>src/weblogic</source.dir>
-        <exclude.pattern>none</exclude.pattern>
-    </properties>
-
-</project>
diff --git a/opt/weblogic/src/main/java/flex/messaging/security/WeblogicLoginCommand.java b/opt/weblogic/src/main/java/flex/messaging/security/WeblogicLoginCommand.java
deleted file mode 100755
index e138942..0000000
--- a/opt/weblogic/src/main/java/flex/messaging/security/WeblogicLoginCommand.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * 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 flex.messaging.security;
-
-import java.security.Principal;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.security.auth.Subject;
-import javax.security.auth.login.LoginException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import weblogic.security.SimpleCallbackHandler;
-import weblogic.security.SubjectUtils;
-import weblogic.security.services.Authentication;
-import weblogic.servlet.security.ServletAuthentication;
-import weblogic.security.Security;
-import flex.messaging.FlexContext;
-
-/**
- * Authenticates against WebLogic and if using an HttpServlet will store
- * the authenticated user in the request.
- */
-public class WeblogicLoginCommand extends AppServerLoginCommand implements PrincipalConverter {
-    /**
-     * {@inheritDoc}
-     */
-    public Principal doAuthentication(String username, Object credentials) {
-        Principal principal = null;
-
-        String password = extractPassword(credentials);
-
-        if (password != null) {
-            // Test for the presence of a response here (rather than request) because NIO 
-            // endpoints require the alternate code path and they don't populate the response
-            // in FlexContext.
-            HttpServletResponse response = FlexContext.getHttpResponse();
-            if (response != null) {
-                HttpServletRequest request = FlexContext.getHttpRequest();
-                int result = ServletAuthentication.FAILED_AUTHENTICATION;
-                try {
-                    result = ServletAuthentication.login(username, password,
-                            request);
-                } catch (LoginException e) {
-                } catch (NoSuchMethodError noSuchMethodError) {
-                    //even though we're not supporting WebLogic 7 anymore...
-                    // Weblogic 7.0.4 didn't have login(), so try weak().
-                    result = ServletAuthentication.weak(username, password,
-                            request);
-                }
-
-                if (result != ServletAuthentication.FAILED_AUTHENTICATION) {
-                    // To authorize against the Groups defined via the WL console, we need
-                    // to have a SubjectPrincipal.  Because we do not need a principal to authorize
-                    // against web.xml / weblogic.xml, always save the SubjectPrincipal
-                    principal = getSubjectPrincipal(username, password);
-                }
-            } else // Code path for NIO endpoints.
-            {
-                principal = getSubjectPrincipal(username, password);
-            }
-        }
-
-        return principal;
-    }
-
-    /**
-     * Get a SubjectPrincipal for the current user.
-     *
-     * @return the generated SubjectPrincipal
-     */
-    private Principal getSubjectPrincipal(String username, String password) {
-        Principal principal = null;
-
-        SimpleCallbackHandler handler =
-                new SimpleCallbackHandler(username, password);
-        try {
-            Subject subject = Authentication.login(handler);
-            principal = new SubjectPrincipal(subject);
-        } catch (LoginException e) {
-            // let authentication fail if this fails
-        }
-
-        return principal;
-    }
-
-    /**
-     * Authorize a user against the Groups defined in the WL console.
-     *
-     * @param principal - Current user principal
-     * @param roles     - Set of roles that allow a succesfull authorization
-     * @return true if the authorization were succesfull
-     */
-    private boolean doSubjectGroupAuthorization(Principal principal, List roles) {
-        boolean authorized = false;
-
-        Subject subject = null;
-        if (principal instanceof SubjectPrincipal) {
-            subject = ((SubjectPrincipal) principal).getSubject();
-        } else {
-            subject = Security.getCurrentSubject();
-        }
-        if (subject == null) {
-            return false;
-        }
-        Iterator iter = roles.iterator();
-        while (iter.hasNext()) {
-            String role = (String) iter.next();
-            if (SubjectUtils.isUserInGroup(subject, role)) {
-                authorized = true;
-                break;
-            }
-        }
-
-        return authorized;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean doAuthorization(Principal principal, List roles) {
-        if (principal == null)
-            return false; // Avoid NPEs.
-
-        //NOTE: I believe that both HttpServletRequest.isUserInRole and
-        //SubjectUtils.isUserInGroup returns if the user is in a Weblogic Group,
-        //not necessarily the Weblogic role construct
-
-        boolean authorized = false;
-
-        // Test for the presence of a response here (rather than request) because NIO 
-        // endpoints require the alternate code path and they don't populate the response
-        // in FlexContext.
-        HttpServletResponse response = FlexContext.getHttpResponse();
-        if (response != null) {
-            HttpServletRequest request = FlexContext.getHttpRequest();
-
-            // This will attempt to authorize the user against roles configured
-            // in web.xml and weblogic.xml.
-            authorized = doAuthorization(principal, roles, request);
-
-            // We also want to support roles defined via the WL console
-            // attempt this authorization here
-            if (!authorized) {
-                authorized = doSubjectGroupAuthorization(principal, roles);
-            }
-        } else // Code path for NIO endpoints.
-        {
-            authorized = doSubjectGroupAuthorization(principal, roles);
-        }
-
-        return authorized;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean logout(Principal principal) {
-        HttpServletResponse response = FlexContext.getHttpResponse();
-        if (response != null) {
-            // Destroy the Principal maintained by the app server.
-            HttpServletRequest request = FlexContext.getHttpRequest();
-            ServletAuthentication.logout(request);
-        }
-        // else, current non-servlet session will be automatically invalidated, destroying any active Principal.
-
-        return true;
-    }
-
-    private class SubjectPrincipal implements Principal {
-        private Subject subject;
-
-        public SubjectPrincipal(Subject subject) {
-            this.subject = subject;
-        }
-
-        public String getName() {
-            return SubjectUtils.getUserPrincipal(subject).getName();
-        }
-
-        public Subject getSubject() {
-            return subject;
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Principal convertPrincipal(Principal principal) {
-        if (principal instanceof SubjectPrincipal) {
-            return principal;
-        } else {
-            // We need to do the converting
-            Subject subject = Security.getCurrentSubject();
-            return new SubjectPrincipal(subject);
-        }
-    }
-}
diff --git a/opt/websphere/pom.xml b/opt/websphere/pom.xml
deleted file mode 100644
index 01c7bea..0000000
--- a/opt/websphere/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-
-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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.flex.blazeds</groupId>
-        <artifactId>flex-messaging-opt</artifactId>
-        <version>4.8.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>flex-messaging-opt-webpshere</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.ibm.websphere</groupId>
-            <artifactId>wsexception</artifactId>
-            <version>7.0 SP5</version>
-            <scope>system</scope>
-            <systemPath>${basedir}/../../lib/wsexception.jar</systemPath>
-        </dependency>
-        <dependency>
-            <groupId>com.ibm.websphere</groupId>
-            <artifactId>asynchbeans</artifactId>
-            <version>7.0 SP5</version>
-            <scope>system</scope>
-            <systemPath>${basedir}/../../lib/asynchbeans.jar</systemPath>
-        </dependency>
-        <dependency>
-            <groupId>com.ibm.websphere</groupId>
-            <artifactId>sas</artifactId>
-            <version>7.0 SP5</version>
-            <scope>system</scope>
-            <systemPath>${basedir}/../../lib/sas.jar</systemPath>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/opt/websphere/src/main/java/flex/management/WebSphereMBeanServerLocator.java b/opt/websphere/src/main/java/flex/management/WebSphereMBeanServerLocator.java
deleted file mode 100755
index 297ca42..0000000
--- a/opt/websphere/src/main/java/flex/management/WebSphereMBeanServerLocator.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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 flex.management;
-
-import java.lang.reflect.Method;
-
-import javax.management.MBeanServer;
-
-import flex.messaging.log.Log;
-import flex.messaging.log.LogCategories;
-import flex.messaging.util.ClassUtil;
-
-/**
- * Custom MBeanServerLocator for use with WebSphere.
- * This class locates a MBean server instance via WebSphere's administration APIs.
- */
-public class WebSphereMBeanServerLocator implements MBeanServerLocator {
-    //--------------------------------------------------------------------------
-    //
-    // Private Static Variables
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * Localized error constant.
-     */
-    private static final int FAILED_TO_LOCATE_MBEAN_SERVER = 10427;
-
-    //--------------------------------------------------------------------------
-    //
-    // Private Variables
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * Reference to MBeanServer this locator found.
-     */
-    private MBeanServer server;
-
-    //--------------------------------------------------------------------------
-    //
-    // Public Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * {@inheritDoc}
-     */
-    public synchronized MBeanServer getMBeanServer() {
-        if (server == null) {
-            Class adminServiceClass = ClassUtil.createClass("com.ibm.websphere.management.AdminServiceFactory");
-            try {
-                Method getMBeanFactoryMethod = adminServiceClass.getMethod("getMBeanFactory", new Class[0]);
-                Object mbeanFactory = getMBeanFactoryMethod.invoke(null, new Object[0]);
-                Method getMBeanServerMethod = mbeanFactory.getClass().getMethod("getMBeanServer", new Class[0]);
-                server = (MBeanServer) getMBeanServerMethod.invoke(mbeanFactory, new Object[0]);
-            } catch (Exception e) {
-                ManagementException me = new ManagementException();
-                me.setMessage(FAILED_TO_LOCATE_MBEAN_SERVER, new Object[]{getClass().getName()});
-                me.setRootCause(e);
-                throw me;
-            }
-            if (Log.isDebug())
-                Log.getLogger(LogCategories.MANAGEMENT_MBEANSERVER).debug("Using MBeanServer: " + server);
-        }
-        return server;
-    }
-}
\ No newline at end of file
diff --git a/opt/websphere/src/main/java/flex/messaging/security/WebSphereLoginCommand.java b/opt/websphere/src/main/java/flex/messaging/security/WebSphereLoginCommand.java
deleted file mode 100755
index f5442b4..0000000
--- a/opt/websphere/src/main/java/flex/messaging/security/WebSphereLoginCommand.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * 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 flex.messaging.security;
-
-import com.ibm.websphere.security.UserRegistry;
-import com.ibm.websphere.security.WSSecurityException;
-import com.ibm.websphere.security.auth.WSLoginFailedException;
-import com.ibm.ws.security.core.ContextManager;
-import com.ibm.ws.security.core.ContextManagerFactory;
-import flex.messaging.FlexContext;
-import flex.messaging.log.Log;
-import flex.messaging.log.LogCategories;
-
-import javax.security.auth.Subject;
-import javax.servlet.http.HttpServletRequest;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/*
- * To setup WebSphere 5.1 for authentication testing:
- *
- * 1) Install WebSphere 5.1
- * 2) Create two files, users.props and groups.props
- * (examples in resources/security/websphere) and place them in a directory
- * under your WS install.
- * 3) Using the Admin webapp:
- *
- *  Security > Global Security
- *  Check Enabled
- *  Check Enforce Java 2 Security
- *  Set Active User Registry to Custom
- *  Click OK
- *
- *  Either the admin app will tell you to setup your Custom or you should
- *  go to Security > User Registries > Custom
- *
- *  Server User ID should be one of your users from your users.props
- *  Server User Password should be the matching password from users.props
- *  Customer Registry Classname by default is com.ibm.websphere.security.FileRegistrySample
- *  Go to Custom Properties
- *  Add a prop "groupsFile" that points to your groups.props: e.g., c:/websphere5.1/AppServer/security/groups.props
- *  Add a prop "usersFile" that points to your users.props: e.g., c:/websphere5.1/AppServer/security/users.props
- *
- *  Click OK
- *
- *  4) Install your Flex EAR.  You may need to go into its Session Settings
- *  page and enable session security there?
- *
- *  5) In <websphere_dir>/java/jre/lib/security edit java.policy and add something
- *  like the following:
- *
-grant codeBase "file:${was.install.root}/installedApps/MCHOTIN03/Flex2Ear.ear/secure.war/-" {
-  permission java.security.AllPermission;
-};
-
- * This gives your webapp all the permissions it needs (possible that it could have
- * been narrowed down further).
- *
- * 6) Edit java.security in teh same directory to add the following entries
-security.provider.1=com.sun.net.ssl.internal.ssl.Provider
-security.provider.2=sun.security.provider.Sun
- * Update the entries below it so they're ordered right.
- * Copy jsse.jar and jcert.jar into java/jre/lib/ext (I think)
- * This will get the Flex Proxy to start correctly
- *
- * Restart your WebSphere, cross your fingers!!!
- *
- */
-
-/**
- * Authenticates against WebSphere but does not store the authenticated
- * user in the HttpServletRequest for http attempts due to the container
- * not providing a mechanism for access.
- */
-public class WebSphereLoginCommand extends AppServerLoginCommand implements PrincipalConverter {
-
-    /**
-     * {@inheritDoc}
-     */
-    public Principal doAuthentication(String username, Object credentials) {
-        Principal principal = null;
-        try {
-            String password = extractPassword(credentials);
-
-            if (password != null) {
-                ContextManager contextManager = ContextManagerFactory.getInstance();
-
-                Subject subject =
-                        contextManager.login(contextManager.getDefaultRealm(),
-                                username, password);
-
-                if (subject != null) {
-                    //setting the caller subject really doesn't apply for long
-                    //it appears to be removed later as each call to
-                    //ContextManagerFactory.getInstance()
-                    //returns a new instance and we cannot get the real context
-                    //and assign values that will be re-used.
-                    //this also means that the HttpServletRequest will not have the
-                    //information that we've assigned, hence we store this contextManager
-                    //in the Principal for later use
-
-                    contextManager.setCallerSubject(subject);
-                    principal = new WSLCPrincipal(username, contextManager, subject);
-                }
-            }
-        } catch (WSLoginFailedException wsLoginFailedException) {
-            if (Log.isDebug()) {
-                Log.getLogger(LogCategories.SECURITY).debug("WebSphereLoginCommand#doAuthentication() failed: " + wsLoginFailedException.toString(), wsLoginFailedException);
-            }
-        } catch (WSSecurityException wsSecurityException) {
-            if (Log.isDebug()) {
-                Log.getLogger(LogCategories.SECURITY).debug("WebSphereLoginCommand#doAuthentication() failed: " + wsSecurityException.toString(), wsSecurityException);
-            }
-        }
-
-        if (Log.isDebug() && principal != null) {
-            Log.getLogger(LogCategories.SECURITY).debug("WebSphereLoginCommand#doAuthentication(). Principal: " + principal + ", Principal class: " + principal.getClass().getName()
-                    + ", Principal identity: " + System.identityHashCode(principal));
-        }
-
-        return principal;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean doAuthorization(Principal principal, List roles) {
-        //unfortunately we cannot seem to get the user stored
-        //in the context so the request will never have the information
-        //that we've assigned, therefore we have to do this
-        //every time
-
-        if (principal == null)
-            return false;
-
-        if (Log.isDebug())
-            Log.getLogger(LogCategories.SECURITY).debug("WebSphereLoginCommand#doAuthorization(). Principal: " + principal + ", Principal class: " + principal.getClass().getName()
-                    + ", Principal identity: " + System.identityHashCode(principal));
-
-        if (principal instanceof WSLCPrincipal) // This code path is hit if this login command handled authentication.
-        {
-            ContextManager contextManager = ((WSLCPrincipal) principal).getContextManager();
-            UserRegistry registry = contextManager.getRegistry(contextManager.getDefaultRealm());
-
-            try {
-                List groups = new ArrayList(registry.getGroupsForUser(principal.getName()));
-
-                groups.retainAll(roles);
-
-                // if authorization succeeds, set the user's Subject on this invocation context
-                // so that the rest of the Thread is executed in the context of the appropriate Subject
-                if (groups.size() > 0)
-                    ContextManagerFactory.getInstance().setCallerSubject(((WSLCPrincipal) principal).getSubject());
-
-                return groups.size() > 0;
-            } catch (Exception e) {
-            }
-        } else // This code path is hit if this login command didn't handle authentication.
-        {
-            // The Principal was not null, meaning we have a WAS Principal in the current HttpServletRequest.
-            // Use that for the authorization check.
-            HttpServletRequest request = FlexContext.getHttpRequest();
-            for (Iterator iter = roles.iterator(); iter.hasNext(); ) {
-                if (request.isUserInRole((String) iter.next()))
-                    return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean logout(Principal principal) {
-        //as long as credentials are nulled since we can't store
-        //the authenticated user there's nothing to do
-        return true;
-    }
-
-    private class WSLCPrincipal implements Principal {
-        private String username;
-        private ContextManager contextManager;
-        private Subject subject;
-
-        public WSLCPrincipal(String username, ContextManager contextManager, Subject subject) {
-            this.username = username;
-            this.contextManager = contextManager;
-            this.subject = subject;
-        }
-
-        public String getName() {
-            return username;
-        }
-
-        public ContextManager getContextManager() {
-            return contextManager;
-        }
-
-        public Subject getSubject() {
-            return subject;
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Principal convertPrincipal(Principal principal) {
-        if (principal instanceof WSLCPrincipal) {
-            // We are good
-            return principal;
-        } else {
-            // we need the converting
-
-            ContextManager contextManager = ContextManagerFactory.getInstance();
-
-            Subject subject = null;
-            try {
-                subject = contextManager.getCallerSubject();
-            } catch (WSSecurityException e) {
-
-            }
-
-            if (subject != null) {
-                return new WSLCPrincipal(principal.getName(), contextManager, subject);
-            } else
-                // Just return the old one
-                return principal;
-
-        }
-    }
-}
diff --git a/opt/websphere/src/main/java/flex/messaging/util/concurrent/AsynchBeansWorkManagerExecutor.java b/opt/websphere/src/main/java/flex/messaging/util/concurrent/AsynchBeansWorkManagerExecutor.java
deleted file mode 100755
index 73858c2..0000000
--- a/opt/websphere/src/main/java/flex/messaging/util/concurrent/AsynchBeansWorkManagerExecutor.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * 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 flex.messaging.util.concurrent;
-
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import com.ibm.websphere.asynchbeans.Work;
-import com.ibm.websphere.asynchbeans.WorkEvent;
-import com.ibm.websphere.asynchbeans.WorkException;
-import com.ibm.websphere.asynchbeans.WorkListener;
-import com.ibm.websphere.asynchbeans.WorkManager;
-
-import flex.messaging.config.ConfigurationException;
-import flex.messaging.log.Log;
-import flex.messaging.log.LogCategories;
-
-/**
- * Implements {@link Executor} by delegating command execution to a WAS asynchbeans <code>WorkManager</code>.
- * For more information on the asynchbeans API, refer to the WAS Javadoc for
- * <a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v5r0/index.jsp?topic=/com.ibm.wasee.doc/info/ee/javadoc/ee/com/ibm/websphere/asynchbeans/WorkManager.html">WorkManager</a>.
- */
-public class AsynchBeansWorkManagerExecutor implements Executor {
-    //--------------------------------------------------------------------------
-    //
-    // Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * Constructs an <code>AsynchBeansWorkManagerExecutor</code> that will delegate command execution
-     * to the specified <code>WorkManager</code> instance that is registered in JNDI.
-     *
-     * @param workManagerJNDIName The JNDI resource ref name for the <code>WorkManager</code>.
-     * @see com.ibm.websphere.asynchbeans.WorkManager
-     */
-    public AsynchBeansWorkManagerExecutor(String workManagerJNDIName) {
-        try {
-            InitialContext ic = new InitialContext();
-            workManager = (WorkManager) ic.lookup(workManagerJNDIName);
-        } catch (NamingException ne) {
-            ConfigurationException ce = new ConfigurationException();
-            ce.setMessage(13600, new Object[]{workManagerJNDIName});
-            ce.setRootCause(ne);
-            throw ce;
-        }
-
-        workListener = new WorkListener() {
-            public void workAccepted(WorkEvent event) {
-                /* No-op */
-            }
-
-            public void workCompleted(WorkEvent event) {
-                // This only needs to be handled if execution of the Runnable failed.
-                WorkException e = event.getException();
-                if (e != null) {
-                    if (Log.isDebug())
-                        Log.getLogger(LogCategories.EXECUTOR).error("AsynchBeansWorkManager's WorkListener.workCompleted() callback invoked for failed execution.", e);
-
-                    handleFailedExecution(((WorkCommandWrapper) event.getWork()).command, e);
-                }
-            }
-
-            public void workRejected(WorkEvent event) {
-                WorkException e = event.getException();
-                if (Log.isDebug())
-                    Log.getLogger(LogCategories.EXECUTOR).error("AsynchBeansWorkManager's WorkListener.workRejected() callback invoked. WorkException? " + e);
-
-                handleFailedExecution(((WorkCommandWrapper) event.getWork()).command, e);
-            }
-
-            public void workStarted(WorkEvent event) {
-                /* No-op */
-            }
-        };
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Variables
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * Instance level lock for thread-safe state changes.
-     */
-    private final Object lock = new Object();
-
-    /**
-     * Reference to the WorkManager instance configured in WAS that this executor instance delegates to.
-     */
-    private final WorkManager workManager;
-
-    /**
-     * Listener that monitors scheduled work for errors and notifies the FailedExecutionHandler if one has been set.
-     */
-    private final WorkListener workListener;
-
-    //--------------------------------------------------------------------------
-    //
-    // Properties
-    //
-    //--------------------------------------------------------------------------
-
-    //----------------------------------
-    //  failedExecutionHandler
-    //----------------------------------
-
-    private FailedExecutionHandler failedExecutionHandler;
-
-    /**
-     * {@inheritDoc}
-     */
-    public FailedExecutionHandler getFailedExecutionHandler() {
-        synchronized (lock) {
-            return failedExecutionHandler;
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setFailedExecutionHandler(FailedExecutionHandler value) {
-        synchronized (lock) {
-            failedExecutionHandler = value;
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Public Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * {@inheritDoc}
-     */
-    public void execute(Runnable command) {
-        try {
-            // Register our listener to monitor each scheduled work, and set the start timeout for the work to indefinite (no queue timeout).
-            workManager.startWork(new WorkCommandWrapper(command), WorkManager.INDEFINITE, workListener);
-        } catch (WorkException e) {
-            handleFailedExecution(command, e);
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Private Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * Handles command execution problems by notifying the FailedExecutionHandler if one has been set
-     * and otherwise logging the failure.
-     *
-     * @param command The command that failed to execute successfully.
-     * @param e       The exception generated by the failed command.
-     */
-    private void handleFailedExecution(Runnable command, Exception e) {
-        FailedExecutionHandler handler = getFailedExecutionHandler();
-        if (handler != null) {
-            handler.failedExecution(command, this, e);
-        } else if (Log.isError()) {
-            Log.getLogger(LogCategories.EXECUTOR).error("AsynchBeansWorkManager hit an Exception but no FailedExecutionHandler is registered to handle the error.", e);
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Inner Classes
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     * Helper class that wraps Runnable commands in the WAS Work interface.
-     */
-    class WorkCommandWrapper implements Work {
-        public WorkCommandWrapper(Runnable command) {
-            this.command = command;
-        }
-
-        private final Runnable command;
-
-        public void run() {
-            command.run();
-        }
-
-        /**
-         * This is invoked by WAS when the server is shutting down to signal long-running daemon threads spawned by the WorkManager
-         * to exit from their run() method. Our works are all short lived so this is a no-op; in this case  WAS will force any
-         * works that are executing at server shutdown to terminate.
-         */
-        public void release() {
-            // No-op.
-        }
-    }
-}
diff --git a/pom.xml b/pom.xml
index 6565697..229546c 100755
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
     <groupId>org.apache.flex.blazeds</groupId>
     <artifactId>blazeds</artifactId>
-    <version>4.9.0-SNAPSHOT</version>
+    <version>5.0.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <name>Apache Flex - BlazeDS</name>
@@ -311,15 +311,15 @@
             </dependency>
 
             <dependency>
-                <groupId>javax.servlet</groupId>
-                <artifactId>servlet-api</artifactId>
-                <version>2.5</version>
+                <groupId>jakarta.servlet</groupId>
+                <artifactId>jakarta.servlet-api</artifactId>
+                <version>5.0.0</version>
             </dependency>
 
             <dependency>
-                <groupId>javax.jms</groupId>
-                <artifactId>javax.jms-api</artifactId>
-                <version>2.0.1</version>
+                <groupId>jakarta.jms</groupId>
+                <artifactId>jakarta.jms-api</artifactId>
+                <version>3.0.0</version>
             </dependency>
 
             <!-- Testing -->
diff --git a/proxy/pom.xml b/proxy/pom.xml
index 6af5d2f..4bdff1a 100755
--- a/proxy/pom.xml
+++ b/proxy/pom.xml
@@ -22,7 +22,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>blazeds</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>flex-messaging-proxy</artifactId>
@@ -47,8 +47,8 @@ limitations under the License.
         </dependency-->
 
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
             <scope>provided</scope>
         </dependency>
 
diff --git a/remoting/pom.xml b/remoting/pom.xml
index 4c3d5b9..a628ade 100644
--- a/remoting/pom.xml
+++ b/remoting/pom.xml
@@ -22,7 +22,7 @@ limitations under the License.
     <parent>
         <groupId>org.apache.flex.blazeds</groupId>
         <artifactId>blazeds</artifactId>
-        <version>4.9.0-SNAPSHOT</version>
+        <version>5.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>flex-messaging-remoting</artifactId>
@@ -31,20 +31,20 @@ limitations under the License.
         <dependency>
             <groupId>org.apache.flex.blazeds</groupId>
             <artifactId>flex-messaging-core</artifactId>
-            <version>4.9.0-SNAPSHOT</version>
+            <version>5.0.0-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-server</artifactId>
-            <version>9.4.41.v20210516</version>
+            <version>11.0.14</version>
             <scope>test</scope>
         </dependency>
 
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-servlet</artifactId>
-            <version>9.3.30.v20211001</version>
+            <version>11.0.14</version>
             <scope>test</scope>
         </dependency>