diff --git a/appserver/appclient/client/acc/pom.xml b/appserver/appclient/client/acc/pom.xml
index 01d9593..e3ceaf5 100755
--- a/appserver/appclient/client/acc/pom.xml
+++ b/appserver/appclient/client/acc/pom.xml
@@ -323,6 +323,10 @@
             <scope>compile</scope>
         </dependency>
 
+        <dependency>
+            <groupId>jakarta.authorization</groupId>
+            <artifactId>jakarta.authorization-api</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ACCJCDIServiceImpl.java b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ACCJCDIServiceImpl.java
index c3af6ac..8a7063f 100644
--- a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ACCJCDIServiceImpl.java
+++ b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ACCJCDIServiceImpl.java
@@ -29,13 +29,13 @@
 import org.jboss.weld.manager.api.WeldManager;
 import org.jvnet.hk2.annotations.Service;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InjectionTarget;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.InjectionTarget;
 import javax.inject.Inject;
 import javax.naming.NamingException;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 import java.util.*;
 
 /**
diff --git a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientContainer.java b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientContainer.java
index 678b14f..8cca1e2 100644
--- a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientContainer.java
+++ b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientContainer.java
@@ -44,11 +44,11 @@
 import java.util.logging.Logger;
 import javax.inject.Inject;
 import javax.naming.NamingException;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManagerFactory;
 import javax.security.auth.callback.CallbackHandler;
 import javax.swing.SwingUtilities;
-import javax.transaction.Status;
-import javax.transaction.TransactionManager;
+import jakarta.transaction.Status;
+import jakarta.transaction.TransactionManager;
 import org.apache.naming.resources.DirContextURLStreamHandlerFactory;
 import org.glassfish.api.invocation.ComponentInvocation;
 import org.glassfish.api.invocation.InvocationManager;
diff --git a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientInfo.java b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientInfo.java
index 810dcda..6302ccc 100644
--- a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientInfo.java
+++ b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/AppClientInfo.java
@@ -46,7 +46,7 @@
 import org.jvnet.hk2.annotations.Service;
 import org.xml.sax.SAXParseException;
 
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityManagerFactory;
 
 /**
  *Represents information about the app client, regardless of what type of
diff --git a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java
index afbe45a..fb2300a 100644
--- a/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java
+++ b/appserver/appclient/client/acc/src/main/java/org/glassfish/appclient/client/acc/ProviderContainerContractInfoImpl.java
@@ -26,8 +26,8 @@
 import java.security.ProtectionDomain;
 import java.util.Collection;
 import java.util.HashSet;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.ClassTransformer;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.ClassTransformer;
 import jakarta.validation.ValidatorFactory;
 
 import org.glassfish.api.deployment.DeploymentContext;
diff --git a/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/AppClientHTTPAdapter.java b/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/AppClientHTTPAdapter.java
index b63c748..d8f76ba 100644
--- a/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/AppClientHTTPAdapter.java
+++ b/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/AppClientHTTPAdapter.java
@@ -31,8 +31,8 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.logging.Level;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletResponse;
 import org.glassfish.appclient.server.core.jws.servedcontent.ACCConfigContent;
 import org.glassfish.appclient.server.core.jws.servedcontent.DynamicContent;
 import org.glassfish.appclient.server.core.jws.servedcontent.StaticContent;
diff --git a/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/RestrictedContentAdapter.java b/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/RestrictedContentAdapter.java
index 4d02636..b3eb4d0 100644
--- a/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/RestrictedContentAdapter.java
+++ b/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/RestrictedContentAdapter.java
@@ -22,7 +22,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 
 import com.sun.logging.LogDomains;
 import java.net.URI;
diff --git a/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/servedcontent/FixedContent.java b/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/servedcontent/FixedContent.java
index a911007..0e73546 100644
--- a/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/servedcontent/FixedContent.java
+++ b/appserver/appclient/server/core/src/main/java/org/glassfish/appclient/server/core/jws/servedcontent/FixedContent.java
@@ -21,7 +21,7 @@
 import java.io.IOException;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
 import org.glassfish.appclient.server.core.AppClientDeployerHelper;
 import org.glassfish.appclient.server.core.jws.RestrictedContentAdapter;
 import org.glassfish.grizzly.http.server.Request;
diff --git a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/HandleDelegateFacadeImpl.java b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/HandleDelegateFacadeImpl.java
index adf1ecc..53f2ae8 100644
--- a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/HandleDelegateFacadeImpl.java
+++ b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/HandleDelegateFacadeImpl.java
@@ -18,7 +18,7 @@
 
 import org.glassfish.enterprise.iiop.api.HandleDelegateFacade;
 import org.jvnet.hk2.annotations.Service;
-import javax.ejb.spi.HandleDelegate;
+import jakarta.ejb.spi.HandleDelegate;
 
 @Service
 public class HandleDelegateFacadeImpl implements HandleDelegateFacade {
diff --git a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/IIOPHandleDelegate.java b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/IIOPHandleDelegate.java
index fdbd401..f25d452 100644
--- a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/IIOPHandleDelegate.java
+++ b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/IIOPHandleDelegate.java
@@ -18,8 +18,8 @@
 
 import java.io.*;
 
-import javax.ejb.*;
-import javax.ejb.spi.HandleDelegate;
+import jakarta.ejb.*;
+import jakarta.ejb.spi.HandleDelegate;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
@@ -58,27 +58,27 @@
     }
     
     
-    public void writeEJBObject(javax.ejb.EJBObject ejbObject,
+    public void writeEJBObject(jakarta.ejb.EJBObject ejbObject,
             java.io.ObjectOutputStream ostream)
         throws java.io.IOException
     {
         ostream.writeObject(ejbObject); // IIOP stubs are Serializable
     }
     
-    public javax.ejb.EJBObject readEJBObject(java.io.ObjectInputStream istream)
+    public jakarta.ejb.EJBObject readEJBObject(java.io.ObjectInputStream istream)
         throws java.io.IOException, ClassNotFoundException
     {
         return (EJBObject)getStub(istream, EJBObject.class);
     }
     
-    public void writeEJBHome(javax.ejb.EJBHome ejbHome,
+    public void writeEJBHome(jakarta.ejb.EJBHome ejbHome,
             java.io.ObjectOutputStream ostream)
         throws java.io.IOException
     {
         ostream.writeObject(ejbHome); // IIOP stubs are Serializable
     }
     
-    public javax.ejb.EJBHome readEJBHome(java.io.ObjectInputStream istream)
+    public jakarta.ejb.EJBHome readEJBHome(java.io.ObjectInputStream istream)
         throws java.io.IOException, ClassNotFoundException
     {
         return (EJBHome)getStub(istream, EJBHome.class);
diff --git a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POAProtocolMgr.java b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POAProtocolMgr.java
index c1f29fa..af661f5 100644
--- a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POAProtocolMgr.java
+++ b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POAProtocolMgr.java
@@ -34,9 +34,9 @@
 
 import com.sun.enterprise.util.Utility;
 
-import javax.ejb.NoSuchObjectLocalException;
-import javax.ejb.TransactionRolledbackLocalException;
-import javax.ejb.TransactionRequiredLocalException;
+import jakarta.ejb.NoSuchObjectLocalException;
+import jakarta.ejb.TransactionRolledbackLocalException;
+import jakarta.ejb.TransactionRequiredLocalException;
 
 import org.omg.PortableServer.POA;
 import org.omg.PortableServer.Servant;
@@ -319,7 +319,7 @@
             mappedException = new OBJECT_NOT_EXIST(MAPEXCEPTION_CODE,
                 CompletionStatus.COMPLETED_MAYBE);
         } else if ( exception instanceof java.rmi.AccessException
-            || exception instanceof javax.ejb.AccessLocalException )
+            || exception instanceof jakarta.ejb.AccessLocalException )
         {
             mappedException = new NO_PERMISSION(MAPEXCEPTION_CODE,
                 CompletionStatus.COMPLETED_MAYBE);
diff --git a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POARemoteReferenceFactory.java b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POARemoteReferenceFactory.java
index b5a0d9b..981eb5a 100755
--- a/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POARemoteReferenceFactory.java
+++ b/appserver/orb/orb-iiop/src/main/java/org/glassfish/enterprise/iiop/impl/POARemoteReferenceFactory.java
@@ -17,7 +17,7 @@
 package org.glassfish.enterprise.iiop.impl;
 
 
-import javax.ejb.NoSuchObjectLocalException;
+import jakarta.ejb.NoSuchObjectLocalException;
 
 import java.rmi.Remote;
 
diff --git a/appserver/pom.xml b/appserver/pom.xml
index ab52b4d..3ba71ad 100644
--- a/appserver/pom.xml
+++ b/appserver/pom.xml
@@ -41,10 +41,10 @@
     <properties>
         <jms-api.version>3.0.0-RC1</jms-api.version>
         <jsp-api.version>3.0.0-M1</jsp-api.version>
-        <jsp-impl.version>3.0.0-M1</jsp-impl.version>
-        <jstl-impl.version>2.0.0-RC1</jstl-impl.version>
+        <jsp-impl.version>3.0.0-RC1</jsp-impl.version>
+        <jstl-impl.version>2.0.0-SNAPSHOT</jstl-impl.version>
         <jstl-api.version>2.0.0-RC1</jstl-api.version>
-        <mojarra.version>2.3.9</mojarra.version>
+        <mojarra.version>3.0.0-RC1</mojarra.version>
         <jsf-ext.version>0.2</jsf-ext.version>
         <woodstock.version>5.0-SNAPSHOT</woodstock.version>
         <javax.ejb-api.version>4.0.0-RC1</javax.ejb-api.version>
@@ -82,7 +82,7 @@
         <woodstox.version>5.1.0</woodstox.version>
         <jaxb.version>3.0.0-M2</jaxb.version>
         <stax2-api.version>4.1</stax2-api.version>
-        <eclipselink.version>2.7.4</eclipselink.version>
+        <eclipselink.version>3.0.0-M1</eclipselink.version>
         <jakarta-persistence-api.version>3.0.0-RC2</jakarta-persistence-api.version>
         <dbschema.version>6.7</dbschema.version>
         <schema2beans.version>6.7</schema2beans.version>
@@ -535,6 +535,11 @@
                 <version>${mojarra.version}</version>
             </dependency>
             <dependency>
+                <groupId>jakarta.persistence</groupId>
+                <artifactId>jakarta.persistence-api</artifactId>
+                <version>${jakarta-persistence-api.version}</version>
+            </dependency>
+            <dependency>
                 <groupId>org.eclipse.persistence</groupId>
                 <artifactId>org.eclipse.persistence.core</artifactId>
                 <version>${eclipselink.version}</version>
diff --git a/appserver/security/appclient.security/pom.xml b/appserver/security/appclient.security/pom.xml
index 7210550..f2e7dee 100644
--- a/appserver/security/appclient.security/pom.xml
+++ b/appserver/security/appclient.security/pom.xml
@@ -88,6 +88,10 @@
             <artifactId>orb-connector</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>jakarta.authorization</groupId>
+            <artifactId>jakarta.authorization-api</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/AppClientSecurityInfoImpl.java b/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/AppClientSecurityInfoImpl.java
index a19ff84..976a070 100644
--- a/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/AppClientSecurityInfoImpl.java
+++ b/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/AppClientSecurityInfoImpl.java
@@ -35,7 +35,7 @@
 import javax.inject.Inject;
 import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.message.config.AuthConfigFactory;
+import jakarta.security.auth.message.config.AuthConfigFactory;
 import org.glassfish.appclient.client.acc.config.MessageSecurityConfig;
 import org.glassfish.appclient.client.acc.config.Security;
 import org.glassfish.appclient.client.acc.config.Ssl;
diff --git a/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/ConfigXMLParser.java b/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/ConfigXMLParser.java
index 9272133..1c14b81 100644
--- a/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/ConfigXMLParser.java
+++ b/appserver/security/appclient.security/src/main/java/com/sun/enterprise/security/appclient/ConfigXMLParser.java
@@ -36,7 +36,7 @@
 import com.sun.enterprise.security.jmac.AuthMessagePolicy;
 import java.io.FileInputStream;
 import java.io.InputStream;
-import javax.security.auth.message.MessagePolicy;
+import jakarta.security.auth.message.MessagePolicy;
 import jakarta.xml.bind.JAXBContext;
 import jakarta.xml.bind.Unmarshaller;
 import org.glassfish.internal.api.Globals;
diff --git a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SharedState.java b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SharedState.java
index dac0614..092b786 100644
--- a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SharedState.java
+++ b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SharedState.java
@@ -23,8 +23,8 @@
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import javax.security.jacc.PolicyContext;
-import javax.security.jacc.PolicyContextException;
+import jakarta.security.jacc.PolicyContext;
+import jakarta.security.jacc.PolicyContextException;
 
 /**
  * 
@@ -137,11 +137,11 @@
      * and idempotent. 
      * @param id
      * @param otherId
-     * @throws javax.security.jacc.PolicyContextException If otherID 
+     * @throws jakarta.security.jacc.PolicyContextException If otherID 
      * equals receiverID. no relationship is formed.
      */
     static void link(String id, String otherId)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
 
         wLock.lock();
         try {
diff --git a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfiguration.java b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfiguration.java
index 3686aba..f35fdd5 100644
--- a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfiguration.java
+++ b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfiguration.java
@@ -32,14 +32,14 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.management.MBeanPermission;
-import javax.security.jacc.EJBRoleRefPermission;
-import javax.security.jacc.PolicyConfiguration;
-import javax.security.jacc.PolicyContext;
-import javax.security.jacc.PolicyContextException;
-import javax.security.jacc.PolicyContextHandler;
-import javax.security.jacc.WebResourcePermission;
-import javax.security.jacc.WebRoleRefPermission;
-import javax.security.jacc.WebUserDataPermission;
+import jakarta.security.jacc.EJBRoleRefPermission;
+import jakarta.security.jacc.PolicyConfiguration;
+import jakarta.security.jacc.PolicyContext;
+import jakarta.security.jacc.PolicyContextException;
+import jakarta.security.jacc.PolicyContextHandler;
+import jakarta.security.jacc.WebResourcePermission;
+import jakarta.security.jacc.WebRoleRefPermission;
+import jakarta.security.jacc.WebUserDataPermission;
 
 /**
  *
@@ -138,14 +138,14 @@
      * if called by an AccessControlContext that has not been
      * granted the "setPolicy" SecurityPermission.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the getContextID method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
     public String getContextID()
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         return id;
     }
 
@@ -173,14 +173,14 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the addToRole method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
     public void addToRole(String roleName, PermissionCollection permissions)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -219,14 +219,14 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the addToRole method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
     public void addToRole(String roleName, Permission permission)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -257,7 +257,7 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the addToUncheckedPolicy method signature.
      * The exception thrown
@@ -265,7 +265,7 @@
      * in the thrown PolicyContextException.
      */
     public void addToUncheckedPolicy(PermissionCollection permissions)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -300,7 +300,7 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the addToUncheckedPolicy method signature.
      * The exception thrown
@@ -308,7 +308,7 @@
      * in the thrown PolicyContextException.
      */
     public void addToUncheckedPolicy(Permission permission)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -339,7 +339,7 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the addToExcludedPolicy method signature.
      * The exception thrown
@@ -347,7 +347,7 @@
      * in the thrown PolicyContextException.
      */
     public void addToExcludedPolicy(PermissionCollection permissions)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -382,7 +382,7 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the addToExcludedPolicy method signature.
      * The exception thrown
@@ -390,7 +390,7 @@
      * in the thrown PolicyContextException.
      */
     public void addToExcludedPolicy(Permission permission)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -421,14 +421,14 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the removeRole method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
     public void removeRole(String roleName)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -463,7 +463,7 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the removeUncheckedPolicy method signature.
      * The exception thrown
@@ -471,7 +471,7 @@
      * in the thrown PolicyContextException.
      */
     public void removeUncheckedPolicy()
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -497,7 +497,7 @@
      * PolicyConfiguration Object is "deleted" or "inService" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the removeExcludedPolicy method signature.
      * The exception thrown
@@ -505,7 +505,7 @@
      * in the thrown PolicyContextException.
      */
     public void removeExcludedPolicy()
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         pcwLock.lock();
         try {
@@ -551,7 +551,7 @@
      * if called with an argument PolicyConfiguration whose Policy context
      * is equivalent to that of this PolicyConfiguration.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the linkConfiguration method signature. The exception
      * thrown
@@ -559,7 +559,7 @@
      * in the thrown PolicyContextException.
      */
     public void linkConfiguration(PolicyConfiguration link)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
 
         checkSetPolicyPermission();
         pcrLock.lock();
@@ -589,13 +589,13 @@
      * if called by an AccessControlContext that has not been
      * granted the "setPolicy" SecurityPermission.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the delete method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
-    public void delete() throws javax.security.jacc.PolicyContextException {
+    public void delete() throws jakarta.security.jacc.PolicyContextException {
 
         checkSetPolicyPermission();
         SharedState.removeLinks(id);
@@ -639,14 +639,14 @@
      * PolicyConfiguration Object is "deleted" when this
      * method is called.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the commit method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
     public void commit()
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         checkSetPolicyPermission();
         boolean initRoles = false;
         pcwLock.lock();
@@ -683,14 +683,14 @@
      * if called by an AccessControlContext that has not been
      * granted the "setPolicy" SecurityPermission.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the inService method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
     public boolean inService()
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         pcrLock.lock();
         try {
             return stateIs(INSERVICE_STATE);
@@ -719,7 +719,7 @@
     }
 
     protected static boolean inService(String pcid)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         SimplePolicyConfiguration pc = SharedState.lookupConfig(pcid);
         if (pc == null) {
             return false;
@@ -798,7 +798,7 @@
 
     /**
      * Adds the principal-2-role mapping to the roles in the roleTable
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      */
     private void commitRoleMapping() throws PolicyContextException {
         JACCRoleMapper roleMapper = null;
@@ -938,7 +938,7 @@
      * @param d 
      * @param p
      * @return integer -1 if excluded, 0 if not implied, 1 if implied.
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      */
     private int doImplies(ProtectionDomain d, Permission p)
             throws PolicyContextException {
diff --git a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfigurationFactory.java b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfigurationFactory.java
index 47b30d1..5274db0 100644
--- a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfigurationFactory.java
+++ b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyConfigurationFactory.java
@@ -16,8 +16,8 @@
 
 package com.sun.enterprise.security.jacc.provider;
 
-import javax.security.jacc.PolicyConfiguration;
-import javax.security.jacc.PolicyConfigurationFactory;
+import jakarta.security.jacc.PolicyConfiguration;
+import jakarta.security.jacc.PolicyConfigurationFactory;
 
 /**
  * Abstract factory and finder class for obtaining
@@ -30,8 +30,8 @@
  * may be used to create an operational instance of the factory implementation
  * class.
  *
- * @see javax.security.jacc.PolicyConfiguration
- * @see javax.security.jacc.PolicyContextException
+ * @see jakarta.security.jacc.PolicyConfiguration
+ * @see jakarta.security.jacc.PolicyContextException
  *
  * @author monzillo
  */
@@ -85,7 +85,7 @@
      * when called by an AccessControlContext that has not been
      * granted the "setPolicy" SecurityPermission.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the getPolicyConfiguration method signature.
      * The exception thrown
@@ -93,7 +93,7 @@
      * in the thrown PolicyContextException.
      */
     public PolicyConfiguration getPolicyConfiguration(String contextID, boolean remove)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         return SimplePolicyConfiguration.getPolicyConfig(contextID, remove);
     }
 
@@ -111,14 +111,14 @@
      * when called by an AccessControlContext that has not been
      * granted the "setPolicy" SecurityPermission.
      *
-     * @throws javax.security.jacc.PolicyContextException
+     * @throws jakarta.security.jacc.PolicyContextException
      * if the implementation throws a checked exception that has not been
      * accounted for by the inService method signature. The exception thrown
      * by the implementation class will be encapsulated (during construction)
      * in the thrown PolicyContextException.
      */
     public boolean inService(String contextID)
-            throws javax.security.jacc.PolicyContextException {
+            throws jakarta.security.jacc.PolicyContextException {
         return SimplePolicyConfiguration.inService(contextID);
     }
 }
diff --git a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyProvider.java b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyProvider.java
index 39806dc..331be77 100644
--- a/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyProvider.java
+++ b/appserver/security/inmemory.jacc.provider/src/main/java/com/sun/enterprise/security/jacc/provider/SimplePolicyProvider.java
@@ -22,8 +22,8 @@
 import java.security.Policy;
 import java.security.ProtectionDomain;
 import java.util.logging.Level;
-import javax.security.jacc.PolicyContext;
-import javax.security.jacc.PolicyContextException;
+import jakarta.security.jacc.PolicyContext;
+import jakarta.security.jacc.PolicyContextException;
 
 /**
  *
diff --git a/appserver/security/jaspic-provider-framework/pom.xml b/appserver/security/jaspic-provider-framework/pom.xml
index ba7a465..60ecd84 100644
--- a/appserver/security/jaspic-provider-framework/pom.xml
+++ b/appserver/security/jaspic-provider-framework/pom.xml
@@ -41,5 +41,9 @@
             <groupId>jakarta.security.auth.message</groupId>
             <artifactId>jakarta.security.auth.message-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>jakarta.authorization</groupId>
+            <artifactId>jakarta.authorization-api</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/appserver/security/jaspic-provider-framework/src/main/java/com/sun/jaspic/config/servlet/JAASServletAuthConfigProvider.java b/appserver/security/jaspic-provider-framework/src/main/java/com/sun/jaspic/config/servlet/JAASServletAuthConfigProvider.java
index 8c64d0e..1cc12e1 100755
--- a/appserver/security/jaspic-provider-framework/src/main/java/com/sun/jaspic/config/servlet/JAASServletAuthConfigProvider.java
+++ b/appserver/security/jaspic-provider-framework/src/main/java/com/sun/jaspic/config/servlet/JAASServletAuthConfigProvider.java
@@ -35,7 +35,7 @@
 public class JAASServletAuthConfigProvider extends JAASAuthConfigProvider {
 
     private static final String HTTP_SERVLET_LAYER = "HttpServlet";
-    private static final String MANDATORY_KEY = "javax.security.auth.message.MessagePolicy.isMandatory";
+    private static final String MANDATORY_KEY = "jakarta.security.auth.message.MessagePolicy.isMandatory";
     private static final String MANDATORY_AUTH_CONTEXT_ID = "mandatory";
     private static final String OPTIONAL_AUTH_CONTEXT_ID = "optional";
     private static final Class[] moduleTypes = new Class[] {ServerAuthModule.class};
diff --git a/appserver/security/webintegration/src/main/java/com/sun/web/security/RealmAdapter.java b/appserver/security/webintegration/src/main/java/com/sun/web/security/RealmAdapter.java
index 2b4e493..bea0e7d 100644
--- a/appserver/security/webintegration/src/main/java/com/sun/web/security/RealmAdapter.java
+++ b/appserver/security/webintegration/src/main/java/com/sun/web/security/RealmAdapter.java
@@ -130,8 +130,8 @@
     public static final String SECURITY_CONTEXT = "SecurityContext";
     public static final String BASIC = "BASIC";
     public static final String FORM = "FORM";
-    private static final String SERVER_AUTH_CONTEXT = "__javax.security.auth.message.ServerAuthContext";
-    private static final String MESSAGE_INFO = "__javax.security.auth.message.MessageInfo";
+    private static final String SERVER_AUTH_CONTEXT = "__jakarta.security.auth.message.ServerAuthContext";
+    private static final String MESSAGE_INFO = "__jakarta.security.auth.message.MessageInfo";
     private static final WebSecurityDeployerProbeProvider websecurityProbeProvider = new WebSecurityDeployerProbeProvider();
 
     // name of system property that can be used to define 
diff --git a/appserver/security/webservices.security/pom.xml b/appserver/security/webservices.security/pom.xml
index e68a8e2..5f1195f 100644
--- a/appserver/security/webservices.security/pom.xml
+++ b/appserver/security/webservices.security/pom.xml
@@ -139,5 +139,9 @@
             <artifactId>logging-annotation-processor</artifactId>
             <optional>true</optional>
         </dependency>
+        <dependency>
+            <groupId>jakarta.authorization</groupId>
+            <artifactId>jakarta.authorization-api</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/PacketMessageInfo.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/PacketMessageInfo.java
index 03f23d4..cbdb7ff 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/PacketMessageInfo.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/PacketMessageInfo.java
@@ -16,7 +16,7 @@
 
 package com.sun.enterprise.security.jmac.provider;
 
-import javax.security.auth.message.MessageInfo;
+import jakarta.security.auth.message.MessageInfo;
 import com.sun.xml.ws.api.message.Packet;
 
 /**
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/config/PipeHelper.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/config/PipeHelper.java
index 0d071d8..8ddb254 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/config/PipeHelper.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/jmac/provider/config/PipeHelper.java
@@ -21,13 +21,13 @@
 import java.util.Map;
 import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.message.AuthException;
-import javax.security.auth.message.AuthStatus;
-import javax.security.auth.message.MessageInfo;
-import javax.security.auth.message.config.ClientAuthConfig;
-import javax.security.auth.message.config.ClientAuthContext;
-import javax.security.auth.message.config.ServerAuthConfig;
-import javax.security.auth.message.config.ServerAuthContext;
+import jakarta.security.auth.message.AuthException;
+import jakarta.security.auth.message.AuthStatus;
+import jakarta.security.auth.message.MessageInfo;
+import jakarta.security.auth.message.config.ClientAuthConfig;
+import jakarta.security.auth.message.config.ClientAuthContext;
+import jakarta.security.auth.message.config.ServerAuthConfig;
+import jakarta.security.auth.message.config.ServerAuthContext;
 import jakarta.xml.ws.WebServiceException;
 //import com.sun.ejb.Container;
 //import com.sun.ejb.Invocation;
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientPipeCloser.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientPipeCloser.java
index 6532d89..ba0a2d9 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientPipeCloser.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientPipeCloser.java
@@ -21,7 +21,7 @@
 import com.sun.enterprise.security.jmac.config.ConfigHelper.AuthConfigRegistrationWrapper;
 import java.util.Map;
 import java.util.WeakHashMap;
-import javax.security.auth.message.config.RegistrationListener;
+import jakarta.security.auth.message.config.RegistrationListener;
 
 public class ClientPipeCloser {
     
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityPipe.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityPipe.java
index fc4d076..fbf5c1b 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityPipe.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityPipe.java
@@ -23,8 +23,8 @@
 import java.util.Map;
 
 import javax.security.auth.Subject;
-import javax.security.auth.message.config.*;
-import javax.security.auth.message.AuthStatus;
+import jakarta.security.auth.message.config.*;
+import jakarta.security.auth.message.AuthStatus;
 import jakarta.xml.ws.WebServiceException;
 
 import com.sun.enterprise.security.jmac.provider.PacketMessageInfo;
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityTube.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityTube.java
index 2b792eb..30c93dc 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityTube.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/ClientSecurityTube.java
@@ -25,8 +25,8 @@
 import java.util.Map;
 
 import javax.security.auth.Subject;
-import javax.security.auth.message.config.*;
-import javax.security.auth.message.AuthStatus;
+import jakarta.security.auth.message.config.*;
+import jakarta.security.auth.message.AuthStatus;
 import jakarta.xml.ws.WebServiceException;
 
 import com.sun.enterprise.security.jmac.provider.PacketMessageInfo;
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityPipe.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityPipe.java
index 9c72abc..848549d 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityPipe.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityPipe.java
@@ -23,9 +23,9 @@
 import java.security.PrivilegedExceptionAction;
 import java.security.PrivilegedActionException;
 import javax.security.auth.Subject;
-import javax.security.auth.message.config.*;
-import javax.security.auth.message.AuthException;
-import javax.security.auth.message.AuthStatus;
+import jakarta.security.auth.message.config.*;
+import jakarta.security.auth.message.AuthException;
+import jakarta.security.auth.message.AuthStatus;
 
 import jakarta.xml.ws.WebServiceException;
 
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityTube.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityTube.java
index 5b5a7bc..b43b0aa 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityTube.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/CommonServerSecurityTube.java
@@ -25,9 +25,9 @@
 import java.security.PrivilegedExceptionAction;
 import java.security.PrivilegedActionException;
 import javax.security.auth.Subject;
-import javax.security.auth.message.config.*;
-import javax.security.auth.message.AuthException;
-import javax.security.auth.message.AuthStatus;
+import jakarta.security.auth.message.config.*;
+import jakarta.security.auth.message.AuthException;
+import jakarta.security.auth.message.AuthStatus;
 
 import jakarta.xml.ws.WebServiceException;
 
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/SecurityServiceImpl.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/SecurityServiceImpl.java
index 42beb16..90a712f 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/SecurityServiceImpl.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/SecurityServiceImpl.java
@@ -49,7 +49,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import javax.inject.Inject;
-import javax.security.jacc.PolicyContext;
+import jakarta.security.jacc.PolicyContext;
 import jakarta.xml.soap.SOAPMessage;
 
 /**
diff --git a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/WebServicesDelegateImpl.java b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/WebServicesDelegateImpl.java
index a11c67d..204dd1d 100644
--- a/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/WebServicesDelegateImpl.java
+++ b/appserver/security/webservices.security/src/main/java/com/sun/enterprise/security/webservices/WebServicesDelegateImpl.java
@@ -32,7 +32,7 @@
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import javax.security.auth.message.MessageInfo;
+import jakarta.security.auth.message.MessageInfo;
 import javax.xml.namespace.QName;
 import jakarta.xml.soap.MimeHeaders;
 import jakarta.xml.soap.Name;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/persistence/AVKPersistenceUnitInfoImpl.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/persistence/AVKPersistenceUnitInfoImpl.java
index dd2ecbb..27c4aac 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/persistence/AVKPersistenceUnitInfoImpl.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/persistence/AVKPersistenceUnitInfoImpl.java
@@ -19,8 +19,8 @@
 import com.sun.enterprise.deployment.PersistenceUnitDescriptor;
 
 import javax.sql.DataSource;
-import javax.persistence.spi.ClassTransformer;
-import javax.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.ClassTransformer;
+import jakarta.persistence.EntityManagerFactory;
 import javax.naming.NamingException;
 import jakarta.validation.ValidatorFactory;
 
@@ -31,7 +31,7 @@
 import org.glassfish.persistence.jpa.ProviderContainerContractInfoBase;
 
 /**
- * This class implements {@link javax.persistence.spi.PersistenceUnitInfo}
+ * This class implements {@link jakarta.persistence.spi.PersistenceUnitInfo}
  * It inherits most of the implementation from its super class, except the
  * implementation that depends on runtime environment. See the details of methods
  * overridden in this class.
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/AbstractPersistenceContextType.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/AbstractPersistenceContextType.java
index fa32d68..11d000d 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/AbstractPersistenceContextType.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/AbstractPersistenceContextType.java
@@ -21,7 +21,7 @@
 import org.glassfish.deployment.common.Descriptor;
 
 import java.util.Collection;
-import javax.persistence.PersistenceContextType;
+import jakarta.persistence.PersistenceContextType;
 
 /**
  * Assertion :
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionComponentInterfaceMethods.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionComponentInterfaceMethods.java
index 8b6bb6c..f897e1e 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionComponentInterfaceMethods.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionComponentInterfaceMethods.java
@@ -35,8 +35,8 @@
  * exception must not be defined as a subclass of the 
  * java.lang.RuntimeException, or of the java.rmi.RemoteException. These are 
  * reserved for system exceptions. 
- * The javax.ejb.CreateException, javax.ejb.RemoveException, 
- * javax.ejb.FinderException, and subclasses thereof, are considered to be 
+ * The jakarta.ejb.CreateException, jakarta.ejb.RemoveException, 
+ * jakarta.ejb.FinderException, and subclasses thereof, are considered to be 
  * application exceptions.
  */
 public class ApplicationExceptionComponentInterfaceMethods extends EjbTest implements EjbCheck {
@@ -51,8 +51,8 @@
      * exception must not be defined as a subclass of the 
      * java.lang.RuntimeException, or of the java.rmi.RemoteException. These are 
      * reserved for system exceptions. 
-     * The javax.ejb.CreateException, javax.ejb.RemoveException, 
-     * javax.ejb.FinderException, and subclasses thereof, are considered to be 
+     * The jakarta.ejb.CreateException, jakarta.ejb.RemoveException, 
+     * jakarta.ejb.FinderException, and subclasses thereof, are considered to be 
      * application exceptions.
      *
      * @param descriptor the Enterprise Java Bean deployment descriptor
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionHomeInterfaceMethods.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionHomeInterfaceMethods.java
index db642dc..c27b19e 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionHomeInterfaceMethods.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ApplicationExceptionHomeInterfaceMethods.java
@@ -33,8 +33,8 @@
  * exception must not be defined as a subclass of the 
  * java.lang.RuntimeException, or of the java.rmi.RemoteException. These are 
  * reserved for system exceptions. 
- * The javax.ejb.CreateException, javax.ejb.RemoveException, 
- * javax.ejb.FinderException, and subclasses thereof, are considered to be 
+ * The jakarta.ejb.CreateException, jakarta.ejb.RemoveException, 
+ * jakarta.ejb.FinderException, and subclasses thereof, are considered to be 
  * application exceptions.
  */
 public class ApplicationExceptionHomeInterfaceMethods extends EjbTest implements EjbCheck { 
@@ -50,8 +50,8 @@
      * exception must not be defined as a subclass of the 
      * java.lang.RuntimeException, or of the java.rmi.RemoteException. These are 
      * reserved for system exceptions. 
-     * The javax.ejb.CreateException, javax.ejb.RemoveException, 
-     * javax.ejb.FinderException, and subclasses thereof, are considered to be 
+     * The jakarta.ejb.CreateException, jakarta.ejb.RemoveException, 
+     * jakarta.ejb.FinderException, and subclasses thereof, are considered to be 
      * application exceptions.
      *
      * @param descriptor the Enterprise Java Bean deployment descriptor
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ContainerTransactionStyle3.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ContainerTransactionStyle3.java
index 12d0c9c..268fb6e 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ContainerTransactionStyle3.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ContainerTransactionStyle3.java
@@ -126,7 +126,7 @@
         try {
             ClassLoader jcl = getVerifierContext().getClassLoader();
             Class beanClass = Class.forName(descriptor.getEjbClassName(), false, jcl);
-            isTimedObject = javax.ejb.TimedObject.class.isAssignableFrom(beanClass);
+            isTimedObject = jakarta.ejb.TimedObject.class.isAssignableFrom(beanClass);
         } catch (ClassNotFoundException e) {} //continue
         
         initializeMethods();
@@ -141,7 +141,7 @@
                     MethodDescriptor.EJB_BEAN.equals(methodDescriptor.getEjbClassSymbol()) &&
                     methodDescriptor.getName().equals("ejbTimeout")) {
                 String[] params=methodDescriptor.getJavaParameterClassNames();
-                if(params.length==1 && params[0].trim().equals("javax.ejb.Timer"))
+                if(params.length==1 && params[0].trim().equals("jakarta.ejb.Timer"))
                     continue;//found a match
             }//if implements timer
             
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbBeanType.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbBeanType.java
index 401af5e..e71d0ae 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbBeanType.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbBeanType.java
@@ -60,7 +60,7 @@
                         logger.log(Level.FINE, getClass().getName() + ".debug1",
                                 new Object[] {interfaces[i].getName()});
 
-                        if (interfaces[i].getName().equals("javax.ejb.EntityBean") &&
+                        if (interfaces[i].getName().equals("jakarta.ejb.EntityBean") &&
                                 (descriptor instanceof EjbEntityDescriptor)) {
                             validBean = true;
                             result.addGoodDetails(smh.getLocalString
@@ -72,7 +72,7 @@
                                             "[ {0} ] properly implements the {1}Bean interface.",
                                             new Object[] {descriptor.getEjbClassName(),"Entity"}));
                             break;
-                        } else if (interfaces[i].getName().equals("javax.ejb.SessionBean") &&
+                        } else if (interfaces[i].getName().equals("jakarta.ejb.SessionBean") &&
                                 descriptor instanceof EjbSessionDescriptor) {
                             validBean = true;
                             result.addGoodDetails(smh.getLocalString
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbUtils.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbUtils.java
index fd162fa..b2038d6 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbUtils.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/EjbUtils.java
@@ -82,25 +82,25 @@
 
 
     /**
-     * Method exception javax.ejb.CreateException checked for compliance 
+     * Method exception jakarta.ejb.CreateException checked for compliance 
      * test.
      *
      * Verify the following:
      *
      *   The home/remote interface methods exception types must be legal types for
      *   CreateException.  
-     *   This means that their exception must throw javax.ejb.CreateException.
+     *   This means that their exception must throw jakarta.ejb.CreateException.
      *
      * @param methodExceptions the exceptions to be checked for throws
-     *        javax.ejb.CreateException 
+     *        jakarta.ejb.CreateException 
      *
-     * @return <code>boolean</code> true if exceptions throw javax.ejb.CreateException, false otherwise
+     * @return <code>boolean</code> true if exceptions throw jakarta.ejb.CreateException, false otherwise
      */
     public static boolean isValidCreateException(Class [] methodExceptions) {
-	// methods must throw javax.ejb.CreateException
+	// methods must throw jakarta.ejb.CreateException
 	boolean throwsCreateException = false;
 	for (int kk = 0; kk < methodExceptions.length; ++kk) {
-	    if ((methodExceptions[kk].getName().equals("javax.ejb.CreateException")) ||
+	    if ((methodExceptions[kk].getName().equals("jakarta.ejb.CreateException")) ||
 		(methodExceptions[kk].getName().equals("CreateException"))) {
 		throwsCreateException = true;
 		break;
@@ -144,7 +144,7 @@
 
 
     /**
-     * Method exception javax.ejb.ObjectNotFoundException checked for compliance 
+     * Method exception jakarta.ejb.ObjectNotFoundException checked for compliance 
      * test.
      *
      * Verify the following:
@@ -157,15 +157,15 @@
      *     exception.   Multi-object finders must not throw this exception.
      *
      * @param methodExceptions the exceptions to be checked for throws
-     *        javax.ejb.ObjectNotFoundException 
+     *        jakarta.ejb.ObjectNotFoundException 
      *
-     * @return <code>boolean</code> true if exceptions throw javax.ejb.ObjectNotFoundException, false otherwise
+     * @return <code>boolean</code> true if exceptions throw jakarta.ejb.ObjectNotFoundException, false otherwise
      */
     public static boolean isValidObjectNotFoundExceptionException(Class [] methodExceptions) {
-	// methods must throw javax.ejb.ObjectNotFoundException
+	// methods must throw jakarta.ejb.ObjectNotFoundException
 	boolean throwsObjectNotFoundException = false;
 	for (int kk = 0; kk < methodExceptions.length; ++kk) {
-	    if ((methodExceptions[kk].getName().equals("javax.ejb.ObjectNotFoundException")) ||
+	    if ((methodExceptions[kk].getName().equals("jakarta.ejb.ObjectNotFoundException")) ||
 		(methodExceptions[kk].getName().equals("ObjectNotFoundException"))) {
 		throwsObjectNotFoundException = true;
 		break;
@@ -178,25 +178,25 @@
 
 
     /**
-     * Method exception javax.ejb.FinderException checked for compliance 
+     * Method exception jakarta.ejb.FinderException checked for compliance 
      * test.
      *
      * Verify the following:
      *
      *   The home/remote interface methods exception types must be legal types for
      *   FinderException  
-     *   This means that their exception must throw javax.ejb.FinderException
+     *   This means that their exception must throw jakarta.ejb.FinderException
      *
      * @param methodExceptions the exceptions to be checked for throws
-     *        javax.ejb.FinderException 
+     *        jakarta.ejb.FinderException 
      *
-     * @return <code>boolean</code> true if exceptions throw javax.ejb.FinderException, false otherwise
+     * @return <code>boolean</code> true if exceptions throw jakarta.ejb.FinderException, false otherwise
      */
     public static boolean isValidFinderException(Class [] methodExceptions) {
-	// methods must throw javax.ejb.FinderException
+	// methods must throw jakarta.ejb.FinderException
 	boolean throwsFinderException = false;
 	for (int kk = 0; kk < methodExceptions.length; ++kk) {
-	    if ((methodExceptions[kk].getName().equals("javax.ejb.FinderException")) ||
+	    if ((methodExceptions[kk].getName().equals("jakarta.ejb.FinderException")) ||
 		(methodExceptions[kk].getName().equals("FinderException"))) {
 		throwsFinderException = true;
 		break;
@@ -279,8 +279,8 @@
      *   An application exception must not be defined as a subclass of the
      *   java.lang.RuntimeException, or of the java.rmi.RemoteException. These are
      *   reserved for system exceptions.
-     *   The javax.ejb.CreateException, javax.ejb.RemoveException,
-     *   javax.ejb.FinderException, and subclasses thereof, are considered to be
+     *   The jakarta.ejb.CreateException, jakarta.ejb.RemoveException,
+     *   jakarta.ejb.FinderException, and subclasses thereof, are considered to be
      *   application exceptions.
      *
      * @param methodExceptions the exceptions to be checked for throws
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/MethodPermissionComponentInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/MethodPermissionComponentInterface.java
index 869ea6d..1e4f8b7 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/MethodPermissionComponentInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/MethodPermissionComponentInterface.java
@@ -31,7 +31,7 @@
  * The transaction attributes must be specified for the methods defined
  * in the bean's remote interface and all the direct and indirect 
  * superinterfaces of the remote interface, excluding the methods of
- * the javax.ejb.EJBObject interface.
+ * the jakarta.ejb.EJBObject interface.
  */
 public class MethodPermissionComponentInterface extends EjbTest implements EjbCheck { 
     Result result  = null;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/RmiIIOPUtils.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/RmiIIOPUtils.java
index f7b7166..da1dde4 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/RmiIIOPUtils.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/RmiIIOPUtils.java
@@ -121,9 +121,9 @@
 		    //if (interfaces[i].getName().equals("java.rmi.Remote")) {
 		    if ((interfaces[i].getName().equals("java.rmi.Remote")) ||
 			//hack until i can ask hans why loop doesn't continue up past
-			// javax.ejb.EJBHome
-			(interfaces[i].getName().equals("javax.ejb.EJBObject")) ||
-			(interfaces[i].getName().equals("javax.ejb.EJBHome"))) {
+			// jakarta.ejb.EJBHome
+			(interfaces[i].getName().equals("jakarta.ejb.EJBObject")) ||
+			(interfaces[i].getName().equals("jakarta.ejb.EJBHome"))) {
 			validInterface = true;
 			break;
 		    }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/TransactionDemarcationType.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/TransactionDemarcationType.java
index b76220f..22b652f 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/TransactionDemarcationType.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/TransactionDemarcationType.java
@@ -221,7 +221,7 @@
 					    } else {
 						String[] paramList = methodDescriptor.getParameterClassNames();
 						if(Array.getLength(paramList) == 1) {
-						    if (paramList[0].equals("javax.ejb.EJBObject")) {
+						    if (paramList[0].equals("jakarta.ejb.EJBObject")) {
 							//style 3
 							oneFailed = true;
 							addErrorDetails(result, compName);
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodException.java
index c1cd29e..9dceded 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodException.java
@@ -37,7 +37,7 @@
  * Compatibility Note: EJB 1.0 allowed the business methods to throw the 
  * java.rmi.RemoteException to indicate a non-application exception. This 
  * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
- * should throw the javax.ejb.EJBException or another RuntimeException to 
+ * should throw the jakarta.ejb.EJBException or another RuntimeException to 
  * indicate non-application exceptions to the Container (see Section 12.2.2). 
  * Note: Treat as a warning to user in this instance.
  */
@@ -53,7 +53,7 @@
      * Compatibility Note: EJB 1.0 allowed the business methods to throw the 
      * java.rmi.RemoteException to indicate a non-application exception. This 
      * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
-     * should throw the javax.ejb.EJBException or another RuntimeException to 
+     * should throw the jakarta.ejb.EJBException or another RuntimeException to 
      * indicate non-application exceptions to the Container (see Section 12.2.2). 
      * Note: Treat as a warning to user in this instance.
      *   
@@ -106,8 +106,8 @@
             
             for (Method remoteMethod : intfClass.getMethods()) {
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")||
-                        remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBLocalObject")) 
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")||
+                        remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBLocalObject")) 
                     continue;
                 
                 Class beanClass = Class.forName(descriptor.getEjbClassName(), 
@@ -120,7 +120,7 @@
                     // Compatibility Note: EJB 1.0 allowed the business methods to throw
                     // the java.rmi.RemoteException to indicate a non-application 
                     // exception. This practice is deprecated in EJB 1.1---an EJB 1.1 
-                    // compliant enterprise bean should throw the javax.ejb.EJBException
+                    // compliant enterprise bean should throw the jakarta.ejb.EJBException
                     // or another RuntimeException to indicate non-application 
                     // exceptions to the Container (see Section 12.2.2). 
                     // Note: Treat as a warning to user in this instance 
@@ -135,7 +135,7 @@
                                     "\n java.rmi.RemoteException to indicate a non-application" +
                                     "\n exception. This practice is deprecated in EJB 1.1" +
                                     "\n ---an EJB 1.1 compliant enterprise bean should" +
-                                    "\n throw the javax.ejb.EJBException or another " +
+                                    "\n throw the jakarta.ejb.EJBException or another " +
                                     "\n RuntimeException to indicate non-application exceptions" +
                                     "\n to the Container. ",
                                     new Object[] {method.getName()}));
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodExceptionCheck.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodExceptionCheck.java
index 7f5c3d7..59b9c03 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodExceptionCheck.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodExceptionCheck.java
@@ -100,8 +100,8 @@
             for (Method remoteMethod : intfClass.getMethods()) {
                 
                 // we don't test the EJB methods,testing only business methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")||
-                        remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBLocalObject"))
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")||
+                        remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBLocalObject"))
                     continue;
                 
                 Class [] parameterTypes = remoteMethod.getParameterTypes();
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodFinal.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodFinal.java
index 0e21760..79ff2b2 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodFinal.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodFinal.java
@@ -97,8 +97,8 @@
             for (Method remoteMethod : intfClass.getMethods()) {
                 
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")||
-                        remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBLocalObject") ||
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")||
+                        remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBLocalObject") ||
                         remoteMethod.getDeclaringClass().getName().equals("java.lang.Object"))
                     continue;
                 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodMatchesWithDD.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodMatchesWithDD.java
index bb62bee..2a99009 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodMatchesWithDD.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodMatchesWithDD.java
@@ -121,7 +121,7 @@
                 found = false;
                 
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")) 
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")) 
                     continue;
                 if (!remoteMethod.getName().startsWith("ejb") &&
                         !remoteMethod.getName().equals("class$") &&
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodName.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodName.java
index d9b2b9f..4eb52be 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodName.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodName.java
@@ -99,7 +99,7 @@
             for (Method remoteMethod : intfClass.getMethods()) {
                 
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")) 
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")) 
                     continue;
                 
                 Class beanClass = Class.forName(descriptor.getEjbClassName(), 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodPublic.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodPublic.java
index 56c4ca6..80c3bed 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodPublic.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodPublic.java
@@ -91,8 +91,8 @@
             
             for (Method remoteMethod : intfClass.getMethods()) {
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")||
-                        remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBLocalObject")) 
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")||
+                        remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBLocalObject")) 
                     continue;
                 
                 Class beanClass = Class.forName(descriptor.getEjbClassName(), 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPArgs.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPArgs.java
index 87b7020..048268e 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPArgs.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPArgs.java
@@ -82,7 +82,7 @@
             
             for (Method remoteMethod : intfClass.getMethods()) {
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")) 
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")) 
                     continue;
                 
                 Class beanClass = Class.forName(descriptor.getEjbClassName(), 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPReturn.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPReturn.java
index ea3e66f..fe708ba 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPReturn.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodRmiIIOPReturn.java
@@ -82,7 +82,7 @@
             for (Method remoteMethod : intfClass.getMethods()) {
                 
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")) 
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")) 
                     continue;
                 Class beanClass = Class.forName(descriptor.getEjbClassName(), 
                                                 false, 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodStatic.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodStatic.java
index ef2cc4c..0e6d994 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodStatic.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/businessmethod/BusinessMethodStatic.java
@@ -94,8 +94,8 @@
             for (Method remoteMethod : intfClass.getMethods()) {
                 
                 // we don't test the EJB methods
-                if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBObject")||
-                        remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBLocalObject")) 
+                if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBObject")||
+                        remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBLocalObject")) 
                     continue;
                 
                 Class beanClass = Class.forName(descriptor.getEjbClassName(), 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfAnnotationValue.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfAnnotationValue.java
index 99beee5..8307cf7 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfAnnotationValue.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfAnnotationValue.java
@@ -21,8 +21,8 @@
 import com.sun.enterprise.tools.verifier.tests.ejb.EjbTest;
 import org.glassfish.ejb.deployment.descriptor.EjbDescriptor;
 
-import javax.ejb.Local;
-import javax.ejb.Remote;
+import jakarta.ejb.Local;
+import jakarta.ejb.Remote;
 import java.util.Set;
 
 /**
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfInheritance.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfInheritance.java
index ae3d278..deae0f5 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfInheritance.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/BusinessIntfInheritance.java
@@ -25,8 +25,8 @@
 import java.util.Set;
 
 /**
- * A business interface must not extend javax.ejb.EJBObject or 
- * javax.ejb.EJBLocalObject.
+ * A business interface must not extend jakarta.ejb.EJBObject or 
+ * jakarta.ejb.EJBLocalObject.
  * 
  * @author Vikas Awasthi
  */
@@ -45,13 +45,13 @@
                 Class c = Class.forName(remoteOrLocalIntf, 
                                         false, 
                                         getVerifierContext().getClassLoader());
-                if(javax.ejb.EJBObject.class.isAssignableFrom(c) ||
-                        javax.ejb.EJBLocalObject.class.isAssignableFrom(c)) {
+                if(jakarta.ejb.EJBObject.class.isAssignableFrom(c) ||
+                        jakarta.ejb.EJBLocalObject.class.isAssignableFrom(c)) {
                     addErrorDetails(result, compName);
                     result.failed(smh.getLocalString
                                     (getClass().getName() + ".failed",
-                                    "[ {0} ] extends either javax.ejb.EJBObject " +
-                                    "or javax.ejb.EJBLocalObject.",
+                                    "[ {0} ] extends either jakarta.ejb.EJBObject " +
+                                    "or jakarta.ejb.EJBLocalObject.",
                                     new Object[] {remoteOrLocalIntf}));
                 }
             } catch (ClassNotFoundException e) {
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/CallbackMethodArgument.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/CallbackMethodArgument.java
index 2cf8930..f0b3c03 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/CallbackMethodArgument.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/ejb30/CallbackMethodArgument.java
@@ -49,7 +49,7 @@
                     logFailure(callbackMethodName, method);
                 } else if(!isBeanMethod && 
                         (args.length!=1 || 
-                                !javax.interceptor.InvocationContext.class.isAssignableFrom(args[0]))) {
+                                !jakarta.interceptor.InvocationContext.class.isAssignableFrom(args[0]))) {
                     logFailure(callbackMethodName, method);
                 }
             } catch (Exception e) {}//ignore as it will be caught in other tests
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EjbClassImplementsComponentInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EjbClassImplementsComponentInterface.java
index 33270e3..3ebc3d9 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EjbClassImplementsComponentInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EjbClassImplementsComponentInterface.java
@@ -97,7 +97,7 @@
 						  new Object[] {compName.toString()}));
 			result.warning(smh.getLocalString
 				       (getClass().getName() + ".warning",
-					"Warning: [ {0} ] class implments the enterprise Bean's remote interface [ {1} ].  It is recommended that the enterprise bean class not implement the remote interface to prevent inadvertent passing of this as a method argument or result.  The class must provide no-op implementations of the methods defined in the javax.ejb.EJBObject interface.",
+					"Warning: [ {0} ] class implments the enterprise Bean's remote interface [ {1} ].  It is recommended that the enterprise bean class not implement the remote interface to prevent inadvertent passing of this as a method argument or result.  The class must provide no-op implementations of the methods defined in the jakarta.ejb.EJBObject interface.",
 					new Object[] {descriptor.getEjbClassName(),rc.getName()}));
 			foundOne = true;
 			break;
@@ -118,9 +118,9 @@
 	    } else {
 		// if the class implements the enterprise Bean's remote interface, 
 		// the class must provide no-op implementations of the methods 
-		// defined in the javax.ejb.EJBObject interface. 
+		// defined in the jakarta.ejb.EJBObject interface. 
 		
-		// i can check all methods defined within javax.ejb.EJBObject 
+		// i can check all methods defined within jakarta.ejb.EJBObject 
 		// interface, but i can't tell whether they are no-ops
 		// do nothing 
 	    }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanExtendsSerializableClass.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanExtendsSerializableClass.java
index 1bc8b50..e64a47e 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanExtendsSerializableClass.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanExtendsSerializableClass.java
@@ -37,7 +37,7 @@
      * The interfaces/classes that the entity bean implements must be 
      * serializable directly or indirectly.
      * Ejb 2.1 says that "The bean class that uses the timer service must 
-     * implement the javax.ejb.TimedObject interface."
+     * implement the jakarta.ejb.TimedObject interface."
      * @param descriptor the Enterprise Java Bean deployment descriptor
      * @return <code>Result</code> the results for this assertion
      */
@@ -163,7 +163,7 @@
     }
 
     public static boolean isTimedObject(Class serClass) {
-        if (javax.ejb.TimedObject.class.isAssignableFrom(serClass))
+        if (jakarta.ejb.TimedObject.class.isAssignableFrom(serClass))
             return true;
         else
             return false;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanInterface.java
index 036b5b2..74e99c1 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/EntityBeanInterface.java
@@ -60,7 +60,7 @@
 			    logger.log(Level.FINE, getClass().getName() + ".debug1",
                         new Object[] {interfaces[i].getName()});
 
-			if (interfaces[i].getName().equals("javax.ejb.EntityBean") &&
+			if (interfaces[i].getName().equals("jakarta.ejb.EntityBean") &&
 			    descriptor instanceof EjbEntityDescriptor) {
 			    validBean = true;
 			    result.addGoodDetails(smh.getLocalString
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/TransactionDemarcationComponentInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/TransactionDemarcationComponentInterface.java
index eaa8ed0..b40c15d 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/TransactionDemarcationComponentInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/TransactionDemarcationComponentInterface.java
@@ -76,7 +76,7 @@
 	    // in the bean's component interface and all the direct and indirect
 	    // superinterfaces of the component interface, excluding the "getEJBHome",
 	    //  "getHandle", "getPrimaryKey", "isIdentical" methods of the 
-	    // javax.ejb.EJBObject interface.
+	    // jakarta.ejb.EJBObject interface.
 
 	    if (descriptor instanceof EjbEntityDescriptor) {
 		boolean oneFailed = false;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/FindMethodException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/FindMethodException.java
index 9889a1a..2c29669 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/FindMethodException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/FindMethodException.java
@@ -23,7 +23,7 @@
 import java.lang.reflect.Method;
 
 /**
- * All finder methods should throw the javax.ejb.FinderException
+ * All finder methods should throw the jakarta.ejb.FinderException
  * 
  * @author  Jerome Dochez
  * @version 
@@ -45,14 +45,14 @@
      */
     protected boolean runIndividualQueryTest(Method method, EjbCMPEntityDescriptor descriptor, Class targetClass, Result result) {
 	ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();    
-        if (methodThrowException(method, "javax.ejb.FinderException")) {
+        if (methodThrowException(method, "jakarta.ejb.FinderException")) {
 	    result.addGoodDetails(smh.getLocalString
 				       ("tests.componentNameConstructor",
 					"For [ {0} ]",
 					new Object[] {compName.toString()}));
             result.addGoodDetails(smh.getLocalString
 		("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.FindMethodException.passed",
-                "[ {0} ] throws the javax.ejb.FinderException",
+                "[ {0} ] throws the jakarta.ejb.FinderException",
 		new Object[] {method.getName()}));                   
             return true;
         } else {
@@ -62,7 +62,7 @@
 					new Object[] {compName.toString()}));
             result.addErrorDetails(smh.getLocalString
 		("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.FindMethodException.failed",
-                "Error : [ {0} ] does not throw the javax.ejb.FinderException",
+                "Error : [ {0} ] does not throw the jakarta.ejb.FinderException",
 		new Object[] {method.getName()}));                   
             return false;
         }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/SelectMethodException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/SelectMethodException.java
index 6e162ce..f5b6a42 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/SelectMethodException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/cmp2/SelectMethodException.java
@@ -23,7 +23,7 @@
 import java.lang.reflect.Method;
 
 /**
- * Select methods must throw the javax.ejb.FinderException
+ * Select methods must throw the jakarta.ejb.FinderException
  *
  * @author  Jerome Dochez
  * @version 
@@ -43,14 +43,14 @@
      */
     protected boolean runIndividualSelectTest(Method m, EjbCMPEntityDescriptor descriptor, Result result) {
         ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
-        if (methodThrowException(m, "javax.ejb.FinderException")) {
+        if (methodThrowException(m, "jakarta.ejb.FinderException")) {
 	    result.addGoodDetails(smh.getLocalString
 				       ("tests.componentNameConstructor",
 					"For [ {0} ]",
 					new Object[] {compName.toString()}));
             result.addGoodDetails(smh.getLocalString
     		("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodException.passed",
-                "[ {0} ] throws the javax.ejb.FinderException",
+                "[ {0} ] throws the jakarta.ejb.FinderException",
 		new Object[] {m.getName()}));                                                       
             return true;
         } else {
@@ -60,7 +60,7 @@
 					new Object[] {compName.toString()}));
             result.addErrorDetails(smh.getLocalString
 	        ("com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodException.failed",
-                "Error : [ {0} ] does not throw the javax.ejb.FinderException",
+                "Error : [ {0} ] does not throw the jakarta.ejb.FinderException",
 		new Object[] {m.getName()}));                                                    
             return false;            
         }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/createmethod/HomeInterfaceCreateMethodExceptionCreate.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/createmethod/HomeInterfaceCreateMethodExceptionCreate.java
index 0709126..53eac71 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/createmethod/HomeInterfaceCreateMethodExceptionCreate.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/createmethod/HomeInterfaceCreateMethodExceptionCreate.java
@@ -36,7 +36,7 @@
  * 
  * An Entity Bean's home interface defines zero or more create(...) methods. 
  * 
- * The throws clause must include javax.ejb.CreateException. 
+ * The throws clause must include jakarta.ejb.CreateException. 
  */
 public class HomeInterfaceCreateMethodExceptionCreate extends EjbTest implements EjbCheck { 
     boolean foundAtLeastOneCreate = false;
@@ -50,7 +50,7 @@
      * 
      * An Entity Bean's home interface defines zero or more create(...) methods. 
      * 
-     * The throws clause must include javax.ejb.CreateException. 
+     * The throws clause must include jakarta.ejb.CreateException. 
      *    
      * @param descriptor the Enterprise Java Bean deployment descriptor
      *   
@@ -117,7 +117,7 @@
 	boolean oneFailed = false;
 	
 	// RULE: Entity home interface are only allowed to have create 
-	//       methods which must throw javax.ejb.CreateException
+	//       methods which must throw jakarta.ejb.CreateException
 	try {
 	    VerifierTestContext context = getVerifierContext();
 	    ClassLoader jcl = context.getClassLoader();
@@ -140,9 +140,9 @@
 		    
 		    methodExceptionTypes = methods[i].getExceptionTypes();
 		    
-		    // methods must also throw javax.ejb.CreateException
+		    // methods must also throw jakarta.ejb.CreateException
 		    for (int kk = 0; kk < methodExceptionTypes.length; ++kk) {
-			if (methodExceptionTypes[kk].getName().equals("javax.ejb.CreateException")) {
+			if (methodExceptionTypes[kk].getName().equals("jakarta.ejb.CreateException")) {
 			    throwsCreateException = true;
 			    break;
 			}
@@ -162,7 +162,7 @@
 					       new Object[] {c.getName(),methods[i].getName()}));
 			result.addGoodDetails(smh.getLocalString
 					      (getClass().getName() + ".passed",
-					       "The create method which must throw javax.ejb.CreateException was found."));
+					       "The create method which must throw jakarta.ejb.CreateException was found."));
 		    } else if (!throwsCreateException) {
 			oneFailed = true;
 			result.addErrorDetails(smh.getLocalString
@@ -175,7 +175,7 @@
 						new Object[] {home,methods[i].getName()}));
 			result.addErrorDetails(smh.getLocalString
 					       (getClass().getName() + ".failed",
-						"Error: A create method was found, but did not throw javax.ejb.CreateException." ));
+						"Error: A create method was found, but did not throw jakarta.ejb.CreateException." ));
 			break;
 		    }  // end of reporting for this particular 'create' method
 		} // if the home interface found a "create" method
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbcreatemethod/EjbCreateMethodExceptions.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbcreatemethod/EjbCreateMethodExceptions.java
index c98793a..ea15557 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbcreatemethod/EjbCreateMethodExceptions.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbcreatemethod/EjbCreateMethodExceptions.java
@@ -38,7 +38,7 @@
  * Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw the 
  * java.rmi.RemoteException to indicate a non-application exception. This 
  * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
- * should throw the javax.ejb.EJBException or another RuntimeException to 
+ * should throw the jakarta.ejb.EJBException or another RuntimeException to 
  * indicate non-application exceptions to the Container (see Section 12.2.2). 
  * Note: Treat as a warning to user in this instance.
  */
@@ -54,7 +54,7 @@
      * Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw the 
      * java.rmi.RemoteException to indicate a non-application exception. This 
      * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
-     * should throw the javax.ejb.EJBException or another RuntimeException to 
+     * should throw the jakarta.ejb.EJBException or another RuntimeException to 
      * indicate non-application exceptions to the Container (see Section 12.2.2). 
      * Note: Treat as a warning to user in this instance.
      *   
@@ -94,7 +94,7 @@
 			    // Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw
 			    // the java.rmi.RemoteException to indicate a non-application 
 			    // exception. This practice is deprecated in EJB 1.1---an EJB 1.1 
-			    // compliant enterprise bean should throw the javax.ejb.EJBException
+			    // compliant enterprise bean should throw the jakarta.ejb.EJBException
 			    // or another RuntimeException to indicate non-application 
 			    // exceptions to the Container (see Section 12.2.2). 
 			    // Note: Treat as a warning to user in this instance.
@@ -138,7 +138,7 @@
 							  "\n java.rmi.RemoteException to indicate a non-application" +
 							  "\n exception. This practice is deprecated in EJB 1.1" +
 							  "\n ---an EJB 1.1 compliant enterprise bean should" +
-							  "\n throw the javax.ejb.EJBException or another " +
+							  "\n throw the jakarta.ejb.EJBException or another " +
 							  "\n RuntimeException to indicate non-application exceptions" +
 							  "\n to the Container. ",
 							  new Object[] {methods[i].getName()}));
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindbyprimarykey/EjbFindByPrimaryKeyException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindbyprimarykey/EjbFindByPrimaryKeyException.java
index 7b99d04..8fc7788 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindbyprimarykey/EjbFindByPrimaryKeyException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindbyprimarykey/EjbFindByPrimaryKeyException.java
@@ -36,7 +36,7 @@
  *     Compatibility Note: EJB 1.0 allowed the finder methods to throw the
  *     java.rmi.RemoteException to indicate a non-application exception. This
  *     practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise
- *     bean should throw the javax.ejb.EJBException or another
+ *     bean should throw the jakarta.ejb.EJBException or another
  *     java.lang.RuntimeException to indicate non-application exceptions to
  *     the Container.
  * 
@@ -53,7 +53,7 @@
      *     Compatibility Note: EJB 1.0 allowed the finder methods to throw the
      *     java.rmi.RemoteException to indicate a non-application exception. This
      *     practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise
-     *     bean should throw the javax.ejb.EJBException or another
+     *     bean should throw the jakarta.ejb.EJBException or another
      *     java.lang.RuntimeException to indicate non-application exceptions to
      *     the Container.
      *  
@@ -92,7 +92,7 @@
 				// Compatibility Note: EJB 1.0 allowed the ejbFindByPrimaryKey to
 				// throw the java.rmi.RemoteException to indicate a non-application
 				// exception. This practice is deprecated in EJB 1.1---an EJB 1.1
-				// compliant enterprise bean should throw the javax.ejb.EJBException
+				// compliant enterprise bean should throw the jakarta.ejb.EJBException
 				// or another RuntimeException to indicate non-application
 				// exceptions to the Container (see Section 12.2.2).
 				// Note: Treat as a warning to user in this instance.
@@ -134,7 +134,7 @@
 							      "\n the java.rmi.RemoteException to indicate a non-application" +
 							      "\n exception. This practice is deprecated in EJB 1.1" +
 							      "\n ---an EJB 1.1 compliant enterprise bean should" +
-							      "\n throw the javax.ejb.EJBException or another " +
+							      "\n throw the jakarta.ejb.EJBException or another " +
 							      "\n RuntimeException to indicate non-application exceptions" +
 							      "\n to the Container. ",
 							      new Object[] {ejbFinderMethods[j].getName()}));
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindermethod/EjbFinderMethodException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindermethod/EjbFinderMethodException.java
index 4a00dfb..e1a79c5 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindermethod/EjbFinderMethodException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbfindermethod/EjbFinderMethodException.java
@@ -43,7 +43,7 @@
  *     Compatibility Note: EJB 1.0 allowed the finder methods to throw the 
  *     java.rmi.RemoteException to indicate a non-application exception. This 
  *     practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise 
- *     bean should throw the javax.ejb.EJBException or another 
+ *     bean should throw the jakarta.ejb.EJBException or another 
  *     java.lang.RuntimeException to indicate non-application exceptions to 
  *     the Container. 
  *
@@ -65,7 +65,7 @@
      *     Compatibility Note: EJB 1.0 allowed the finder methods to throw the 
      *     java.rmi.RemoteException to indicate a non-application exception. This 
      *     practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise 
-     *     bean should throw the javax.ejb.EJBException or another 
+     *     bean should throw the jakarta.ejb.EJBException or another 
      *     java.lang.RuntimeException to indicate non-application exceptions to 
      *     the Container.
      *  
@@ -111,7 +111,7 @@
 				// Compatibility Note: EJB 1.0 allowed the ejbFind<METHOD> to 
 				// throw the java.rmi.RemoteException to indicate a non-application
 				// exception. This practice is deprecated in EJB 1.1---an EJB 1.1
-				// compliant enterprise bean should throw the javax.ejb.EJBException
+				// compliant enterprise bean should throw the jakarta.ejb.EJBException
 				// or another RuntimeException to indicate non-application
 				// exceptions to the Container (see Section 12.2.2).
 				// Note: Treat as a warning to user in this instance.
@@ -157,7 +157,7 @@
 								"\n java.rmi.RemoteException to indicate a non-application" +
 								"\n exception. This practice was deprecated in EJB 1.1" +
 								"\n ---an EJB 2.0 compliant enterprise bean must" +
-								"\n throw the javax.ejb.EJBException or another " +
+								"\n throw the jakarta.ejb.EJBException or another " +
 								"\n RuntimeException to indicate non-application exceptions" +
 								"\n to the Container. ",
 								new Object[] {ejbFinderMethods[j].getName()}));
@@ -181,7 +181,7 @@
 								  "\n java.rmi.RemoteException to indicate a non-application" +
 								  "\n exception. This practice is deprecated in EJB 1.1" +
 								  "\n ---an EJB 1.1 compliant enterprise bean should" +
-								  "\n throw the javax.ejb.EJBException or another " +
+								  "\n throw the jakarta.ejb.EJBException or another " +
 								  "\n RuntimeException to indicate non-application exceptions" +
 								  "\n to the Container. ",
 								  new Object[] {ejbFinderMethods[j].getName()}));
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbpostcreatemethod/EjbPostCreateMethodException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbpostcreatemethod/EjbPostCreateMethodException.java
index aca6e8b..db2804d 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbpostcreatemethod/EjbPostCreateMethodException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/ejbpostcreatemethod/EjbPostCreateMethodException.java
@@ -39,7 +39,7 @@
  * Compatibility Note: EJB 1.0 allowed the ejbPostCreate method to throw the 
  * java.rmi.RemoteException to indicate a non-application exception. This 
  * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
- * should throw the javax.ejb.EJBException or another RuntimeException to 
+ * should throw the jakarta.ejb.EJBException or another RuntimeException to 
  * indicate non-application exceptions to the Container (see Section 12.2.2). 
  * Note: Treat as a warning to user in this instance.
  */
@@ -55,7 +55,7 @@
      * Compatibility Note: EJB 1.0 allowed the ejbPostCreate method to throw the 
      * java.rmi.RemoteException to indicate a non-application exception. This 
      * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
-     * should throw the javax.ejb.EJBException or another RuntimeException to 
+     * should throw the jakarta.ejb.EJBException or another RuntimeException to 
      * indicate non-application exceptions to the Container (see Section 12.2.2). 
      * Note: Treat as a warning to user in this instance.
      *   
@@ -95,7 +95,7 @@
 			    // Compatibility Note: EJB 1.0 allowed the ejbPostCreate method to throw
 			    // the java.rmi.RemoteException to indicate a non-application 
 			    // exception. This practice is deprecated in EJB 1.1---an EJB 1.1 
-			    // compliant enterprise bean should throw the javax.ejb.EJBException
+			    // compliant enterprise bean should throw the jakarta.ejb.EJBException
 			    // or another RuntimeException to indicate non-application 
 			    // exceptions to the Container (see Section 12.2.2). 
 			    // Note: Treat as a warning to user in this instance.
@@ -136,7 +136,7 @@
 							  "\n java.rmi.RemoteException to indicate a non-application" +
 							  "\n exception. This practice is deprecated in EJB 1.1" +
 							  "\n ---an EJB 1.1 compliant enterprise bean should" +
-							  "\n throw the javax.ejb.EJBException or another " +
+							  "\n throw the jakarta.ejb.EJBException or another " +
 							  "\n RuntimeException to indicate non-application exceptions" +
 							  "\n to the Container. ",
 							  new Object[] {methods[i].getName()}));
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodExceptionFinder.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodExceptionFinder.java
index cd764e2..4d83719 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodExceptionFinder.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodExceptionFinder.java
@@ -30,7 +30,7 @@
 
 /** 
  * Entity beans home interface find<METHOD> method throws 
- * javax.ejb.FinderException test.
+ * jakarta.ejb.FinderException test.
  * 
  * The following are the requirements for the enterprise Bean's home interface 
  * find<METHOD> signature: 
@@ -38,7 +38,7 @@
  * An Entity Bean's home interface defines one or more find<METHOD>(...) 
  * methods. 
  * 
- * The throws clause must include javax.ejb.FinderException. 
+ * The throws clause must include jakarta.ejb.FinderException. 
  */
 public class HomeInterfaceFindMethodExceptionFinder extends EjbTest implements EjbCheck { 
     Result result = null;
@@ -46,7 +46,7 @@
 
     /**
      * Entity beans home interface find<METHOD> method throws 
-     * javax.ejb.FinderException test.
+     * jakarta.ejb.FinderException test.
      * 
      * The following are the requirements for the enterprise Bean's home interface 
      * find<METHOD> signature: 
@@ -54,7 +54,7 @@
      * An Entity Bean's home interface defines one or more find<METHOD>(...) 
      * methods. 
      * 
-     * The throws clause must include javax.ejb.FinderException. 
+     * The throws clause must include jakarta.ejb.FinderException. 
      *    
      * @param descriptor the Enterprise Java Bean deployment descriptor
      *   
@@ -119,7 +119,7 @@
     private boolean commonToBothInterfaces(String home, EjbDescriptor descriptor) {
 	boolean oneFailed = false;
 		// RULE: Entity home interface are only allowed to have find<METHOD> 
-		//       methods which must throw javax.ejb.FinderException
+		//       methods which must throw jakarta.ejb.FinderException
 		try {
 		    VerifierTestContext context = getVerifierContext();
 		ClassLoader jcl = context.getClassLoader();
@@ -136,7 +136,7 @@
 			    throwsFinderException = false;
 			    methodExceptionTypes = methods[i].getExceptionTypes();
                  
-			    // methods must throw javax.ejb.FinderException
+			    // methods must throw jakarta.ejb.FinderException
 			    if (EjbUtils.isValidFinderException(methodExceptionTypes)) {
 				throwsFinderException = true;
 			    }
@@ -155,7 +155,7 @@
 						       new Object[] {c.getName(),methods[i].getName()}));
 				result.addGoodDetails(smh.getLocalString
 						      (getClass().getName() + ".passed",
-						       "The [ {0} ] method which must throw javax.ejb.FinderException was found.",
+						       "The [ {0} ] method which must throw jakarta.ejb.FinderException was found.",
 						       new Object[] {methods[i].getName()}));
 			    } else if (!throwsFinderException) {
 				oneFailed = true;
@@ -169,7 +169,7 @@
 							new Object[] {c.getName(),methods[i].getName()}));
 				result.addErrorDetails(smh.getLocalString
 						       (getClass().getName() + ".failed",
-							"Error: A [ {0} ] method was found, but did not throw javax.ejb.FinderException.",
+							"Error: A [ {0} ] method was found, but did not throw jakarta.ejb.FinderException.",
 							new Object[] {methods[i].getName()}));
 			    }  // end of reporting for this particular 'find' method
 			} // if the home interface found a "find" method
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodHasQuery.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodHasQuery.java
index c5f7813..6af1679 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodHasQuery.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/entity/findermethod/HomeInterfaceFindMethodHasQuery.java
@@ -33,7 +33,7 @@
 
 /** 
  * Entity beans home interface find<METHOD> method throws 
- * javax.ejb.FinderException test.
+ * jakarta.ejb.FinderException test.
  * 
  * The following are the requirements for the enterprise Bean's home interface 
  * find<METHOD> signature: 
@@ -48,7 +48,7 @@
 
     /**
      * Entity beans home interface find<METHOD> method throws 
-     * javax.ejb.FinderException test.
+     * jakarta.ejb.FinderException test.
      * 
      * The following are the requirements for the enterprise Bean's home interface 
      * find<METHOD> signature: 
@@ -120,7 +120,7 @@
     private boolean commonToBothInterfaces(String home, EjbDescriptor descriptor, String methodIntf) {
         boolean oneFailed = false;
 	// RULE: Entity home interface are only allowed to have find<METHOD> 
-	//       methods which must throw javax.ejb.FinderException
+	//       methods which must throw jakarta.ejb.FinderException
 	try {
 	    PersistenceDescriptor pers = ((EjbCMPEntityDescriptor)descriptor).getPersistenceDescriptor();
 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodException.java
index f946961..fad2fd6 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodException.java
@@ -36,7 +36,7 @@
  * Compatibility Note: EJB 1.0 allowed the ejbHome methods to throw the 
  * java.rmi.RemoteException to indicate a non-application exception. This 
  * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
- * should throw the javax.ejb.EJBException or another RuntimeException to 
+ * should throw the jakarta.ejb.EJBException or another RuntimeException to 
  * indicate non-application exceptions to the Container (see Section 12.2.2). 
  * Note: Treat as a warning to user in this instance.
  */
@@ -52,7 +52,7 @@
      * Compatibility Note: EJB 1.0 allowed the ejbHome methods to throw the 
      * java.rmi.RemoteException to indicate a non-application exception. This 
      * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
-     * should throw the javax.ejb.EJBException or another RuntimeException to 
+     * should throw the jakarta.ejb.EJBException or another RuntimeException to 
      * indicate non-application exceptions to the Container (see Section 12.2.2). 
      * Note: Treat as a warning to user in this instance.
      *   
@@ -101,8 +101,8 @@
             
             for (Method homeMethod : rc.getMethods()) {
                 
-                if (homeMethod.getDeclaringClass().getName().equals("javax.ejb.EJBHome")||
-                        homeMethod.getDeclaringClass().getName().equals("javax.ejb.EJBLocalHome")) 
+                if (homeMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBHome")||
+                        homeMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBLocalHome")) 
                     continue;
                 if (homeMethod.getName().startsWith("create") || 
                         homeMethod.getName().startsWith("find") || 
@@ -122,7 +122,7 @@
                         // Compatibility Note: EJB 1.0 allowed the business methods to throw
                         // the java.rmi.RemoteException to indicate a non-application 
                         // exception. This practice is deprecated in EJB 1.1---an EJB 1.1 
-                        // compliant enterprise bean should throw the javax.ejb.EJBException
+                        // compliant enterprise bean should throw the jakarta.ejb.EJBException
                         // or another RuntimeException to indicate non-application 
                         // exceptions to the Container (see Section 12.2.2). 
                         // Note: Treat as a warning to user in this instance 
@@ -137,7 +137,7 @@
                                     "\n java.rmi.RemoteException to indicate a non-application" +
                                     "\n exception. This practice is deprecated in EJB 1.1" +
                                     "\n ---an EJB 1.1 compliant enterprise bean should" +
-                                    "\n throw the javax.ejb.EJBException or another " +
+                                    "\n throw the jakarta.ejb.EJBException or another " +
                                     "\n RuntimeException to indicate non-application exceptions" +
                                     "\n to the Container. ",
                                     new Object[] {method.getName()}));
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPArgs.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPArgs.java
index 1ea8092..ee9c9ae 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPArgs.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPArgs.java
@@ -81,7 +81,7 @@
 		for (Method remoteMethod : rc.getMethods()) {
 
                     // we don't test the EJB methods
-                    if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBHome")) 
+                    if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBHome")) 
                         continue;
 		    if (remoteMethod.getName().startsWith("create") || 
 			remoteMethod.getName().startsWith("find") || 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPReturn.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPReturn.java
index de7d53d..ff86504 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPReturn.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodRmiIIOPReturn.java
@@ -76,7 +76,7 @@
 		for (Method remoteMethod : rc.getMethods()) {
 
                     // we don't test the EJB methods
-                    if (remoteMethod.getDeclaringClass().getName().equals("javax.ejb.EJBHome")) 
+                    if (remoteMethod.getDeclaringClass().getName().equals("jakarta.ejb.EJBHome")) 
                         continue;
 		    if (remoteMethod.getName().startsWith("create") || 
 			remoteMethod.getName().startsWith("find") || 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodTest.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodTest.java
index 16b9b1d..32b60be 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodTest.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/HomeMethodTest.java
@@ -108,7 +108,7 @@
                     methodName.startsWith("remove")) 
                     continue;
                 
-                Method m = getMethod(javax.ejb.EJBHome.class, methodName, 
+                Method m = getMethod(jakarta.ejb.EJBHome.class, methodName, 
                                      method.getParameterTypes());
                 if (m!=null) {
                     // this is an EJBHome method...
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeInterfaceExtendsEJBLocalHome.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeInterfaceExtendsEJBLocalHome.java
index f787086..e60c051 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeInterfaceExtendsEJBLocalHome.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeInterfaceExtendsEJBLocalHome.java
@@ -30,6 +30,6 @@
 	return descriptor.getLocalHomeClassName();
     }
      protected String getSuperInterface() {
-	 return "javax.ejb.EJBLocalHome";
+	 return "jakarta.ejb.EJBLocalHome";
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodModifiers.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodModifiers.java
index c56b414..c7301ab 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodModifiers.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodModifiers.java
@@ -31,6 +31,6 @@
 	return descriptor.getLocalHomeClassName();
     }
     protected String getSuperInterface() {
-	return "javax.ejb.EJBLocalHome";
+	return "jakarta.ejb.EJBLocalHome";
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodNameMatch.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodNameMatch.java
index f9d2610..eea8269 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodNameMatch.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/localhomeintf/LocalHomeMethodNameMatch.java
@@ -32,6 +32,6 @@
 	return descriptor.getLocalHomeClassName();
     }
     protected String getSuperInterface() {
-	return "javax.ejb.EJBLocalHome";
+	return "jakarta.ejb.EJBLocalHome";
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceExtendsEJBHome.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceExtendsEJBHome.java
index 0c6c412..73e2b75 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceExtendsEJBHome.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceExtendsEJBHome.java
@@ -30,7 +30,7 @@
 	return descriptor.getHomeClassName();
     }
      protected String getSuperInterface() {
-	 return "javax.ejb.EJBHome";
+	 return "jakarta.ejb.EJBHome";
     }
 
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPArgs.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPArgs.java
index 546d5fe..a84591b 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPArgs.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPArgs.java
@@ -77,6 +77,6 @@
     }
 
     protected String getSuperInterface() {
-	return "javax.ejb.EJBHome";
+	return "jakarta.ejb.EJBHome";
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPException.java
index d4b75d8..8b810bd 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPException.java
@@ -80,6 +80,6 @@
     }
 
     protected String getSuperInterface() {
-	return "javax.ejb.EJBHome";
+	return "jakarta.ejb.EJBHome";
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPReturn.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPReturn.java
index 19594f2..ebaa5cf 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPReturn.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceRmiIIOPReturn.java
@@ -77,6 +77,6 @@
     }
     
     protected String getSuperInterface() {
-        return "javax.ejb.EJBHome";
+        return "jakarta.ejb.EJBHome";
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceSuperInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceSuperInterface.java
index a7316b9..03ffcf8 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceSuperInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeInterfaceSuperInterface.java
@@ -95,7 +95,7 @@
                         
                         if (RmiIIOPUtils.isValidRmiIIOPInterfaceMethods(intf)) {
                             // this interface is valid, continue
-                            if (intf.getName().equals("javax.ejb.EJBHome")) {
+                            if (intf.getName().equals("jakarta.ejb.EJBHome")) {
                                 validHomeInterface = true;
                                 break;
                             }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodModifiers.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodModifiers.java
index 1c4b545..1bd763e 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodModifiers.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodModifiers.java
@@ -31,6 +31,6 @@
 	return descriptor.getHomeClassName();
     }
     protected String getSuperInterface() {
-	return "javax.ejb.EJBHome";
+	return "jakarta.ejb.EJBHome";
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodNameMatch.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodNameMatch.java
index 3055024..9f39652 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodNameMatch.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/homeintf/remotehomeintf/RemoteHomeMethodNameMatch.java
@@ -31,7 +31,7 @@
 	return descriptor.getHomeClassName();
     }
     protected String getSuperInterface() {
-	return "javax.ejb.EJBHome";
+	return "jakarta.ejb.EJBHome";
     }
   
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/localintf/EjbLocalInterfaceExtendsEJBLocalObject.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/localintf/EjbLocalInterfaceExtendsEJBLocalObject.java
index 0ee2001..7bbb68f 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/localintf/EjbLocalInterfaceExtendsEJBLocalObject.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/localintf/EjbLocalInterfaceExtendsEJBLocalObject.java
@@ -33,7 +33,7 @@
     }
     
     protected String getSuperInterface() {
-        return "javax.ejb.EJBLocalObject";
+        return "jakarta.ejb.EJBLocalObject";
     }
     
     protected String getInterfaceType() {
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/EjbRemoteInterfaceExtendsEJBObject.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/EjbRemoteInterfaceExtendsEJBObject.java
index 6f27072..ea444ea 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/EjbRemoteInterfaceExtendsEJBObject.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/EjbRemoteInterfaceExtendsEJBObject.java
@@ -32,7 +32,7 @@
     }
     
     protected String getSuperInterface() {
-        return "javax.ejb.EJBObject";
+        return "jakarta.ejb.EJBObject";
     }
     
     protected String getInterfaceType() {
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/RemoteInterfaceSuperInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/RemoteInterfaceSuperInterface.java
index cb60e96..6590fd2 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/RemoteInterfaceSuperInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/intf/remoteintf/RemoteInterfaceSuperInterface.java
@@ -104,7 +104,7 @@
                     // check the methods now.
                     if (RmiIIOPUtils.isValidRmiIIOPInterfaceMethods(intf)) {
                         // this interface is valid, continue
-                        if (intf.getName().equals("javax.ejb.EJBObject")) {
+                        if (intf.getName().equals("jakarta.ejb.EJBObject")) {
                             validRemoteInterface = true;
                             break;
                         }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/messagebean/ImplementsMessageDrivenBean.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/messagebean/ImplementsMessageDrivenBean.java
index 67cae2b..c96930a 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/messagebean/ImplementsMessageDrivenBean.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/messagebean/ImplementsMessageDrivenBean.java
@@ -40,7 +40,7 @@
         
         Result result = getInitializedResult();
         Class mbc = loadMessageBeanClass(descriptor, result);
-        testImplementationOf(mbc, "javax.ejb.MessageDrivenBean", result);
+        testImplementationOf(mbc, "jakarta.ejb.MessageDrivenBean", result);
         return result;
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionBeanInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionBeanInterface.java
index 9df1d14..9742b8c 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionBeanInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionBeanInterface.java
@@ -62,7 +62,7 @@
 		    for (int i = 0; i < interfaces.length; i++) {
 			logger.log(Level.FINE, getClass().getName() + ".debug1",
                     new Object[] {interfaces[i].getName()});
-			if (interfaces[i].getName().equals("javax.ejb.SessionBean") &&
+			if (interfaces[i].getName().equals("jakarta.ejb.SessionBean") &&
 			    descriptor instanceof EjbSessionDescriptor) {
 			    validBean = true;
 			    result.addGoodDetails(smh.getLocalString
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionSynchronizationInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionSynchronizationInterface.java
index 3fec0a4..8c1eab7 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionSynchronizationInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/SessionSynchronizationInterface.java
@@ -63,7 +63,7 @@
                         logger.log(Level.FINE, getClass().getName() + ".debug1",
                                 new Object[] {interfaces.getName()});
 
-                        if (interfaces.getName().equals("javax.ejb.SessionSynchronization") ) {
+                        if (interfaces.getName().equals("jakarta.ejb.SessionSynchronization") ) {
                             String transactionType = descriptor.getTransactionType();
                             if ((EjbSessionDescriptor.STATELESS.equals(stateType)) ||
                                     ((EjbSessionDescriptor.STATEFUL.equals(stateType))
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationComponentInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationComponentInterface.java
index 63fe438..575a56b 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationComponentInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationComponentInterface.java
@@ -38,7 +38,7 @@
  * The transaction attributes must be specified for the methods defined
  * in the bean's component interface and all the direct and indirect 
  * superinterfaces of the component interface, excluding the methods of
- * the javax.ejb.EJBObject interface.
+ * the jakarta.ejb.EJBObject interface.
  */
 public class TransactionDemarcationComponentInterface extends EjbTest implements EjbCheck { 
     Result result  = null;
@@ -55,7 +55,7 @@
      * The transaction attributes must be specified for the methods defined
      * in the bean's component interface and all the direct and indirect 
      * superinterfaces of the component interface, excluding the methods of
-     * the javax.ejb.EJBObject interface.
+     * the jakarta.ejb.EJBObject interface.
      *
      * @param descriptor the Enterprise Java Bean deployment descriptor
      *   
@@ -76,7 +76,7 @@
 	    // The transaction attributes must be specified for the methods defined
 	    // in the bean's component interface and all the direct and indirect 
 	    // superinterfaces of the component interface, excluding the methods of
-	    // the javax.ejb.EJBObject interface.
+	    // the jakarta.ejb.EJBObject interface.
 	    if (descriptor instanceof EjbSessionDescriptor) {
                 String transactionType = descriptor.getTransactionType();
                 if (EjbDescriptor.CONTAINER_TRANSACTION_TYPE.equals(transactionType)) {
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationSessionSynchronizationInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationSessionSynchronizationInterface.java
index 2f3bbac..400f605 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationSessionSynchronizationInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransactionDemarcationSessionSynchronizationInterface.java
@@ -32,7 +32,7 @@
 /**
  * Optionally implemented SessionSynchronization interface transaction 
  * demarcation test.
- * If an enterprise bean implements the javax.ejb.SessionSynchronization
+ * If an enterprise bean implements the jakarta.ejb.SessionSynchronization
  * interface, the Application Assembler can specify only the following values
  * for the transaction attributes of the bean's methods:
  *   Required
@@ -45,7 +45,7 @@
     /**
      * Optionally implemented SessionSynchronization interface transaction 
      * demarcation test.
-     * If an enterprise bean implements the javax.ejb.SessionSynchronization
+     * If an enterprise bean implements the jakarta.ejb.SessionSynchronization
      * interface, the Application Assembler can specify only the following values
      * for the transaction attributes of the bean's methods:
      *   Required
@@ -72,7 +72,7 @@
                     Class[] interfaces = c.getInterfaces();
 
                     for (int i = 0; i < interfaces.length; i++) {
-                        if (interfaces[i].getName().equals("javax.ejb.SessionSynchronization")) {
+                        if (interfaces[i].getName().equals("jakarta.ejb.SessionSynchronization")) {
                             oneFound = true;
                             break;
                         }
@@ -89,7 +89,7 @@
                 return result;
             }
 
-            // If an enterprise bean implements the javax.ejb.SessionSynchronization
+            // If an enterprise bean implements the jakarta.ejb.SessionSynchronization
             // interface, the Application Assembler can specify only the following
             // values for the transaction attributes of the bean's methods:
             //   Required, RequiresNew, Mandatory
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransientFieldsSerialization.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransientFieldsSerialization.java
index 3432ce7..e7d65ab 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransientFieldsSerialization.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/TransientFieldsSerialization.java
@@ -80,14 +80,14 @@
                         // can't do anything with environment JNDI naming context and
                         // any its subcontexts
                         //sg133765: do we need to do something for business interface
-                        if ((fc.getName().equals("javax.ejb.SessionContext")) ||
+                        if ((fc.getName().equals("jakarta.ejb.SessionContext")) ||
                                 (fc.getName().equals("javax.transaction.UserTransaction")) ||
                                 (fc.getName().equals(descriptor.getRemoteClassName())) ||
                                 (fc.getName().equals(descriptor.getHomeClassName()))||
                                 (fc.getName().equals(descriptor.getLocalClassName())) ||
                                 (fc.getName().equals(descriptor.getLocalHomeClassName())) ||
-                                (isEjb30 && fc.getName().equals("javax.ejb.EntityManager")) ||
-                                (isEjb30 && fc.getName().equals("javax.ejb.EntityManagerFactory"))) {
+                                (isEjb30 && fc.getName().equals("jakarta.ejb.EntityManager")) ||
+                                (isEjb30 && fc.getName().equals("jakarta.ejb.EntityManagerFactory"))) {
 
                             result.failed(smh.getLocalString
                                     ("tests.componentNameConstructor",
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/createmethod/HomeInterfaceCreateMethodExceptionCreate.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/createmethod/HomeInterfaceCreateMethodExceptionCreate.java
index 5e1602b..c44d111 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/createmethod/HomeInterfaceCreateMethodExceptionCreate.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/createmethod/HomeInterfaceCreateMethodExceptionCreate.java
@@ -36,7 +36,7 @@
  * 
  * A Session Bean's home interface defines one or more create(...) methods. 
  * 
- * The throws clause must include javax.ejb.CreateException. 
+ * The throws clause must include jakarta.ejb.CreateException. 
  */
 public class HomeInterfaceCreateMethodExceptionCreate extends EjbTest implements EjbCheck { 
     Result result = null;
@@ -50,7 +50,7 @@
      * 
      * A Session Bean's home interface defines one or more create(...) methods. 
      * 
-     * The throws clause must include javax.ejb.CreateException. 
+     * The throws clause must include jakarta.ejb.CreateException. 
      *    
      * @param descriptor the Enterprise Java Bean deployment descriptor
      *   
@@ -129,7 +129,7 @@
 		if (methods[i].getName().startsWith("create")) {
 		    methodExceptionTypes = methods[i].getExceptionTypes();
 		    
-		    // methods must also throw javax.ejb.CreateException
+		    // methods must also throw jakarta.ejb.CreateException
 		    if (EjbUtils.isValidCreateException(methodExceptionTypes)) {
 			throwsCreateException = true;
 		    }
@@ -148,7 +148,7 @@
 					       new Object[] {c.getName(),methods[i].getName()}));
 			result.addGoodDetails(smh.getLocalString
 						  (getClass().getName() + ".passed",
-						   "The create method which must throw javax.ejb.CreateException was found.."));
+						   "The create method which must throw jakarta.ejb.CreateException was found.."));
 		    } else if (!throwsCreateException) {
 			oneFailed = true;
 			result.addErrorDetails(smh.getLocalString
@@ -161,7 +161,7 @@
 						new Object[] {c.getName(),methods[i].getName()}));
 			result.addErrorDetails(smh.getLocalString
 					       (getClass().getName() + ".failed",
-						"Error: A create method was found, but did not throw javax.ejb.CreateException." ));
+						"Error: A create method was found, but did not throw jakarta.ejb.CreateException." ));
 		    }  // end of reporting for this particular 'create' method
 		} // if the home interface found a "create" method
 	    } // for all the methods within the home interface class, loop
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/ejbcreatemethod/EjbCreateMethodException.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/ejbcreatemethod/EjbCreateMethodException.java
index 22ef955..b2e2960 100755
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/ejbcreatemethod/EjbCreateMethodException.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/ejb/session/ejbcreatemethod/EjbCreateMethodException.java
@@ -38,7 +38,7 @@
  * Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw the 
  * java.rmi.RemoteException to indicate a non-application exception. This 
  * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
- * should throw the javax.ejb.EJBException or another RuntimeException to 
+ * should throw the jakarta.ejb.EJBException or another RuntimeException to 
  * indicate non-application exceptions to the Container (see Section 12.2.2). 
  * Note: Treat as a warning to user in this instance.
  */
@@ -56,7 +56,7 @@
      * Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw the 
      * java.rmi.RemoteException to indicate a non-application exception. This 
      * practice is deprecated in EJB 1.1---an EJB 1.1 compliant enterprise bean 
-     * should throw the javax.ejb.EJBException or another RuntimeException to 
+     * should throw the jakarta.ejb.EJBException or another RuntimeException to 
      * indicate non-application exceptions to the Container (see Section 12.2.2). 
      * Note: Treat as a warning to user in this instance.
      *   
@@ -97,7 +97,7 @@
 			    // Compatibility Note: EJB 1.0 allowed the ejbCreate method to throw
 			    // the java.rmi.RemoteException to indicate a non-application 
 			    // exception. This practice is deprecated in EJB 1.1---an EJB 1.1 
-			    // compliant enterprise bean should throw the javax.ejb.EJBException
+			    // compliant enterprise bean should throw the jakarta.ejb.EJBException
 			    // or another RuntimeException to indicate non-application 
 			    // exceptions to the Container (see Section 12.2.2). 
 			    // Note: Treat as a warning to user in this instance.
@@ -142,7 +142,7 @@
 							  "\n java.rmi.RemoteException to indicate a non-application" +
 							  "\n exception. This practice is deprecated in EJB 1.1" +
 							  "\n ---an EJB 1.1 compliant enterprise bean should" +
-							  "\n throw the javax.ejb.EJBException or another " +
+							  "\n throw the jakarta.ejb.EJBException or another " +
 							  "\n RuntimeException to indicate non-application exceptions" +
 							  "\n to the Container",
 							  new Object[] {methods[i].getName()}));
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/persistence/DefaultProviderVerification.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/persistence/DefaultProviderVerification.java
index 3ffaf98..8353aeb 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/persistence/DefaultProviderVerification.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/persistence/DefaultProviderVerification.java
@@ -23,11 +23,11 @@
 import com.sun.enterprise.tools.verifier.tests.VerifierCheck;
 import com.sun.enterprise.tools.verifier.tests.VerifierTest;
 
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.PersistenceException;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.PersistenceException;
 
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
 import java.util.logging.Level;
 import java.util.Properties;
 
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/EntityManagerInjection.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/EntityManagerInjection.java
index fe212b1..a20727f 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/EntityManagerInjection.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/EntityManagerInjection.java
@@ -21,8 +21,8 @@
 import com.sun.enterprise.deployment.EntityManagerReferenceDescriptor;
 import com.sun.enterprise.deployment.WebBundleDescriptor;
 import java.util.Set;
-import javax.servlet.Servlet;
-import javax.servlet.SingleThreadModel;
+import jakarta.servlet.Servlet;
+import jakarta.servlet.SingleThreadModel;
 
 /**
  * Assertion
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/FilterClassImplementsValidInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/FilterClassImplementsValidInterface.java
index 6ea0ec9..bab12b3 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/FilterClassImplementsValidInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/FilterClassImplementsValidInterface.java
@@ -20,7 +20,7 @@
 
 /** 
  * Filter class must implement a valid interface.
- * Verify that the Filter class implements the javax.servlet.Filter interface
+ * Verify that the Filter class implements the jakarta.servlet.Filter interface
  *
  * @author Jerome Dochez
  * @version 1.0
@@ -41,6 +41,6 @@
         if (filterClass==null) {
             return false;
         }
-        return testImplementationOf(filterClass, "javax.servlet.Filter", result);
+        return testImplementationOf(filterClass, "jakarta.servlet.Filter", result);
     }
 }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ListenerClassImplementsValidInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ListenerClassImplementsValidInterface.java
index 53a6039..2a5cd53 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ListenerClassImplementsValidInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ListenerClassImplementsValidInterface.java
@@ -45,22 +45,22 @@
             return false;
         }
         
-	validInterface = isImplementorOf(clazz,"javax.servlet.ServletContextAttributeListener");
+	validInterface = isImplementorOf(clazz,"jakarta.servlet.ServletContextAttributeListener");
 	if (validInterface != true) {
-	    validInterface = isImplementorOf(clazz,"javax.servlet.ServletContextListener");
+	    validInterface = isImplementorOf(clazz,"jakarta.servlet.ServletContextListener");
 	}
 	if (validInterface != true) {
-	    validInterface = isImplementorOf(clazz,"javax.servlet.http.HttpSessionAttributeListener");
+	    validInterface = isImplementorOf(clazz,"jakarta.servlet.http.HttpSessionAttributeListener");
 	}
 	if (validInterface != true) {
-	    validInterface = isImplementorOf(clazz,"javax.servlet.http.HttpSessionListener");
+	    validInterface = isImplementorOf(clazz,"jakarta.servlet.http.HttpSessionListener");
 	}
     if (validInterface != true) {
-	    validInterface = isImplementorOf(clazz,"javax.servlet.ServletRequestAttributeListener");
+	    validInterface = isImplementorOf(clazz,"jakarta.servlet.ServletRequestAttributeListener");
 	}if (validInterface != true) {
-	    validInterface = isImplementorOf(clazz,"javax.servlet.ServletRequestListener");
+	    validInterface = isImplementorOf(clazz,"jakarta.servlet.ServletRequestListener");
 	}if (validInterface != true) {
-	    validInterface = isImplementorOf(clazz,"javax.servlet.http.HttpSessionBindingListener");
+	    validInterface = isImplementorOf(clazz,"jakarta.servlet.http.HttpSessionBindingListener");
 	}
 
          if (validInterface) {
@@ -71,7 +71,7 @@
          } else if (!validInterface){
              result.addErrorDetails(smh.getLocalString
                 (getClass().getName() + ".failed",
-                 "Error: Listener class [ {0} ] does not implement one or more of the following valid interface.\n javax.servlet.ServletContextAttributeListener, javax.servlet.ServletContextListener, javax.servlet.http.HttpSessionAttributeListener, javax.servlet.http.HttpSessionListener",
+                 "Error: Listener class [ {0} ] does not implement one or more of the following valid interface.\n jakarta.servlet.ServletContextAttributeListener, jakarta.servlet.ServletContextListener, jakarta.servlet.http.HttpSessionAttributeListener, jakarta.servlet.http.HttpSessionListener",
                   new Object[] {clazz.getName()}));
 	 }
 	    	                     
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletClassDeclared.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletClassDeclared.java
index ca3fc1a..2a4ffd8 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletClassDeclared.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletClassDeclared.java
@@ -99,7 +99,7 @@
                     String className = classEntryName.replace('/','.');
                     Class servletClass = loadClass(result, className);
                     if (!Modifier.isAbstract(servletClass.getModifiers()) &&
-                            isImplementorOf(servletClass, "javax.servlet.Servlet")) {
+                            isImplementorOf(servletClass, "jakarta.servlet.Servlet")) {
                         foundOne=true;
                         // let's find out if this servlet has associated deployment descriptors...
                         Set servlets = descriptor.getServletDescriptors();
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletInterface.java
index 0738d20..1c988e1 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/ServletInterface.java
@@ -19,15 +19,15 @@
 import com.sun.enterprise.tools.verifier.tests.web.WebTest;
 import java.util.*;
 import java.io.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
+import jakarta.servlet.*;
+import jakarta.servlet.http.*;
 import com.sun.enterprise.deployment.*;
 import com.sun.enterprise.tools.verifier.*;
 import com.sun.enterprise.tools.verifier.tests.*;
 
 /** 
  * Servlet Interface test.
- * Servlets must implement the javax.servlet.Servlet interface 
+ * Servlets must implement the jakarta.servlet.Servlet interface 
  * either directly or indirectly through GenericServlet or HttpServlet
  */
 public class ServletInterface extends WebTest implements WebCheck { 
@@ -36,7 +36,7 @@
       
     /**
      * Servlet Interface test.
-     * Servlets must implement the javax.servlet.Servlet interface 
+     * Servlets must implement the jakarta.servlet.Servlet interface 
      * either directly or indirectly through GenericServlet or HttpServlet
      * 
      * @param descriptor the Web deployment descriptor
@@ -80,14 +80,14 @@
 				  new Object[] {servletClassName}));
                     notPassOrFail = false;
                 }
-		else if (isImplementorOf(c, "javax.servlet.Servlet")) {
+		else if (isImplementorOf(c, "jakarta.servlet.Servlet")) {
 		    result.addGoodDetails(smh.getLocalString
 				       ("tests.componentNameConstructor",
 					"For [ {0} ]",
 					new Object[] {compName.toString()}));
 		    result.addGoodDetails(smh.getLocalString
 					  (getClass().getName() + ".passed",
-					   "Servlet class [ {0} ] directly or indirectly implements javax.servlet.Servlet",
+					   "Servlet class [ {0} ] directly or indirectly implements jakarta.servlet.Servlet",
 					   new Object[] {servletClassName}));	    
                     notPassOrFail = false;
 		} else {
@@ -98,7 +98,7 @@
 					new Object[] {compName.toString()}));
 		    result.addErrorDetails(smh.getLocalString
 					   (getClass().getName() + ".failed",
-					    "Error: Servlet class [ {0} ] does not directly or indirectly implement javax.servlet.Servlet",
+					    "Error: Servlet class [ {0} ] does not directly or indirectly implement jakarta.servlet.Servlet",
 					    new Object[] {servletClassName}));
                     notPassOrFail = false;
 		}                       
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassExtendsValidInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassExtendsValidInterface.java
index db77289..ae6a9d0 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassExtendsValidInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassExtendsValidInterface.java
@@ -24,8 +24,8 @@
 import com.sun.enterprise.deployment.WebBundleDescriptor;
 
 /**
- * Tag class implements javax.servlet.jsp.tagext.JspTag for JSP version 2.0,
- * javax.servlet.jsp.tagext.Tag for earlier versions of JSP specification.
+ * Tag class implements jakarta.servlet.jsp.tagext.JspTag for JSP version 2.0,
+ * jakarta.servlet.jsp.tagext.Tag for earlier versions of JSP specification.
  *
  * @author sg133765
  */
@@ -55,9 +55,9 @@
                 Class c = loadClass(result, tagclass);
                 if (c!=null) {
                     if (tld.getSpecVersion().trim().equalsIgnoreCase("2.0")) {
-                        failed = !javax.servlet.jsp.tagext.JspTag.class.isAssignableFrom(c);
+                        failed = !jakarta.servlet.jsp.tagext.JspTag.class.isAssignableFrom(c);
                     } else {
-                        failed = !javax.servlet.jsp.tagext.Tag.class.isAssignableFrom(c);
+                        failed = !jakarta.servlet.jsp.tagext.Tag.class.isAssignableFrom(c);
                     }
                     if(failed) {
                         oneFailed = true;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassImplementsValidInterface.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassImplementsValidInterface.java
index e1393aa..c4c7e15 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassImplementsValidInterface.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TagClassImplementsValidInterface.java
@@ -26,7 +26,7 @@
 /**
  * dynamic-attributes element in tag element describes whether this tag supports
  * additional attributes with dynamic names. If true, the tag-class must
- * implement the javax.servlet.jsp.tagext.DynamicAttributes interface.
+ * implement the jakarta.servlet.jsp.tagext.DynamicAttributes interface.
  * Defaults to false.
  * @author Sudipto Ghosh
  *
@@ -57,7 +57,7 @@
                        //do nothing
                     }
                     if (tagdesc.getDynamicAttributes().equalsIgnoreCase("true") &&
-                            !javax.servlet.jsp.tagext.DynamicAttributes.class.
+                            !jakarta.servlet.jsp.tagext.DynamicAttributes.class.
                             isAssignableFrom(c) ) {
                         addErrorDetails(result, compName);
                         result.failed(smh.getLocalString(getClass()
@@ -65,7 +65,7 @@
                                 ".failed",
                                 "Error: tag class [ {0} ] in [ {1} ] does not " +
                                 "implements interface " +
-                                "javax.servlet.jsp.tagext.DynamicAttributes",
+                                "jakarta.servlet.jsp.tagext.DynamicAttributes",
                                 new Object[]{c.getName(), tld.getUri()}));
 
                     }
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibLocation.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibLocation.java
index b0cb016..aff0355 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibLocation.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibLocation.java
@@ -16,7 +16,7 @@
 
 package com.sun.enterprise.tools.verifier.tests.web;
 
-import javax.servlet.descriptor.*;
+import jakarta.servlet.descriptor.*;
 import com.sun.enterprise.deployment.*;
 import com.sun.enterprise.tools.verifier.*;
 import com.sun.enterprise.tools.verifier.tests.*;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibUri.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibUri.java
index d0584cb..4567de6 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibUri.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/TaglibUri.java
@@ -16,7 +16,7 @@
 
 package com.sun.enterprise.tools.verifier.tests.web;
 
-import javax.servlet.descriptor.*;
+import jakarta.servlet.descriptor.*;
 import com.sun.enterprise.deployment.*;
 import com.sun.enterprise.tools.verifier.*;
 import com.sun.enterprise.tools.verifier.tests.*;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/URLPattern.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/URLPattern.java
index 3f0be42..680480a 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/URLPattern.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/web/URLPattern.java
@@ -19,7 +19,7 @@
 import java.util.Enumeration;
 import java.util.Iterator;
 
-import javax.servlet.descriptor.*;
+import jakarta.servlet.descriptor.*;
 
 import org.glassfish.deployment.common.Descriptor;
 import com.sun.enterprise.deployment.WebBundleDescriptor;
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/webservices/EJBServiceImplBeanChk.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/webservices/EJBServiceImplBeanChk.java
index bf96cab..e876682 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/webservices/EJBServiceImplBeanChk.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/webservices/EJBServiceImplBeanChk.java
@@ -50,7 +50,7 @@
  *   ejbRemove() methods which take no arguments. This is a requirement of the EJB container, 
  *   but generally can be stubbed out with an empty implementations.
  *
- *   The Stateless Session Bean must implement the javax.ejb.SessionBean interface either 
+ *   The Stateless Session Bean must implement the jakarta.ejb.SessionBean interface either 
  *   directly or indirectly.
  *
  *   All the exceptions defined in the throws clause of the matching method of the session bean 
@@ -119,11 +119,11 @@
           }
 
           // it should be a stateless session bean
-          boolean isSLSB = (javax.ejb.SessionBean.class).isAssignableFrom(bean);
+          boolean isSLSB = (jakarta.ejb.SessionBean.class).isAssignableFrom(bean);
           boolean implementsSEI = sei.isAssignableFrom(bean);
 
           if (!isSLSB) {
-            //result.fail does not implement javax.ejb.SessionBean interface
+            //result.fail does not implement jakarta.ejb.SessionBean interface
             result.addErrorDetails(smh.getLocalString ("tests.componentNameConstructor",
                                    "For [ {0} ]", new Object[] {compName.toString()}));
             result.failed(smh.getLocalString
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/webservices/HandlerClassCheck.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/webservices/HandlerClassCheck.java
deleted file mode 100755
index 26d1bc4..0000000
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/webservices/HandlerClassCheck.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.enterprise.tools.verifier.tests.webservices;
-
-import com.sun.enterprise.deployment.*;
-import com.sun.enterprise.tools.verifier.*;
-import java.util.*;
-import com.sun.enterprise.tools.verifier.tests.*;
-import java.lang.reflect.*;
-
-// Make sure we are able to load the Handler classes
-/* 
- *   @class.setup_props: ; 
- */ 
-
-/*  
- *   @testName: check  
- *   @assertion_ids: JSR109_WS_29; 
- *   @test_Strategy: 
- *   @class.testArgs: Additional arguments (if any) to be passed when execing the client  
- *   @testDescription: handler-class Defines a fully qualified class name for the handler 
- *   implementation and implements javax.xml.rpc.handler.Handler.
- */
-public class HandlerClassCheck extends WSTest implements WSCheck {
-
-    /**
-     * @param descriptor the WebServices  descriptor
-     * @return <code>Result</code> the results for this assertion
-     */
-    public Result check (WebServiceEndpoint descriptor) {
-
-	Result result = getInitializedResult();
-        ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
-        boolean pass = true;
-
-        if (descriptor.hasHandlers()) {
-           List handlers = descriptor.getHandlers();
-           for (Iterator it = handlers.iterator(); it.hasNext();) {
-                String hClass = ((WebServiceHandler)it.next()).getHandlerClass();
-                Class cl = null;
-                try {
-                  cl = Class.forName(hClass, false, getVerifierContext().getClassLoader());
-                  if ((cl != null) && ((javax.xml.rpc.handler.Handler.class).isAssignableFrom(cl))) {
-                    //result.pass
-                    result.addGoodDetails(smh.getLocalString
-                                  ("tests.componentNameConstructor",
-                                   "For [ {0} ]",
-                                   new Object[] {compName.toString()}));
-                    result.passed(smh.getLocalString (getClass().getName() + ".passed", 
-             "The Handler Class [{0}] exists and implements the javax.xml.rpc.handler.Handler Interface.",
-                     new Object[] {hClass}));
-
-                  }
-                  else {
-                       //result.fail, handler class does not extend javax.xml.rpc.handler.Handler
-                        result.addErrorDetails(smh.getLocalString ("tests.componentNameConstructor",
-                         "For [ {0} ]", new Object[] {compName.toString()}));
-                        result.failed(smh.getLocalString (getClass().getName() + ".failed", 
-                        "Handler Class [{0}] does not implement javax.xml.rpc.handler.Handler",
-                        new Object[] {hClass}));
-                        pass = false;
-
-                  }
-                }
-                catch (ClassNotFoundException e) {
-                 // result.fail, handler class not found
-                 result.addErrorDetails(smh.getLocalString ("tests.componentNameConstructor",
-                 "For [ {0} ]", new Object[] {compName.toString()}));
-                 result.failed(smh.getLocalString (
-                 "com.sun.enterprise.tools.verifier.tests.webservices.clfailed",
-                 "The [{0}] Class [{1}] could not be Loaded",
-                  new Object[] {"Handler Class", hClass}));
-                }
-            }
-          }
-          else {
-             result.addNaDetails(smh.getLocalString
-                     ("tests.componentNameConstructor", "For [ {0} ]",
-                      new Object[] {compName.toString()}));
-             result.notApplicable(smh.getLocalString
-                 ( getClass().getName() + ".notapp",
-                 "Not Applicable since No handlers defined in this WebService"));
-
-            }
-
-        return result;
-    }
- }
-
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/wsclients/HandlerClassCheck.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/wsclients/HandlerClassCheck.java
deleted file mode 100755
index 82e7943..0000000
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/tests/wsclients/HandlerClassCheck.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.enterprise.tools.verifier.tests.wsclients;
-
-import com.sun.enterprise.deployment.*;
-import com.sun.enterprise.tools.verifier.*;
-import java.util.*;
-import com.sun.enterprise.tools.verifier.tests.*;
-import java.lang.reflect.*;
-
-/* 
- *   @class.setup_props: ; 
- */ 
-
-/*  
- *   @testName: check  
- *   @assertion_ids: JSR109_WS_52; 
- *   @test_Strategy: 
- *   @class.testArgs: Additional arguments (if any) to be passed when execing the client  
- *   @testDescription: handler-class Defines a fully qualified class name for the handler 
- *   implementation.
- */
-
-// Make sure we are able to load the Handler classes
-public class HandlerClassCheck extends WSClientTest implements WSClientCheck {
-
-    /**
-     * @param descriptor the WebServices  descriptor
-     * @return <code>Result</code> the results for this assertion
-     */
-    public Result check (ServiceReferenceDescriptor descriptor) {
-
-	Result result = getInitializedResult();
-        ComponentNameConstructor compName = getVerifierContext().getComponentNameConstructor();
-        ClassLoader loader = getVerifierContext().getClassLoader();
-
-        if (descriptor.hasHandlers()) {
-           List handlerChain = descriptor.getHandlerChain();
-           for (Iterator it = handlerChain.iterator(); it.hasNext();) {
-                String hClass = ((WebServiceHandler)it.next()).getHandlerClass();
-                Class cl = null;
-                try {
-                  cl = Class.forName(hClass, false, getVerifierContext().getClassLoader());
-                  if ((cl != null) && ((javax.xml.rpc.handler.Handler.class).isAssignableFrom(cl))) {
-                    //result.pass
-                    result.addGoodDetails(smh.getLocalString
-                                  ("tests.componentNameConstructor",
-                                   "For [ {0} ]",
-                                   new Object[] {compName.toString()}));
-                    result.passed(smh.getLocalString (getClass().getName() + ".passed",
-             "The Handler Class [{0}] exists and implements the javax.xml.rpc.handler.Handler Interface.",
-                     new Object[] {hClass}));
-
-                  }
-                  else {
-                     result.addErrorDetails(smh.getLocalString ("tests.componentNameConstructor",
-                         "For [ {0} ]", new Object[] {compName.toString()}));
-                        result.failed(smh.getLocalString (getClass().getName() + ".failed",
-                        "Handler Class [{0}] does not implement javax.xml.rpc.handler.Handler",
-                        new Object[] {hClass}));
-                    
-                  }
-                }
-                catch (ClassNotFoundException e) {
-                    // result.fail, handler class not found
-                     result.addErrorDetails(smh.getLocalString ("tests.componentNameConstructor",
-                 "For [ {0} ]", new Object[] {compName.toString()}));
-                 result.failed(smh.getLocalString (
-                 "com.sun.enterprise.tools.verifier.tests.webservices.clfailed",
-                 "The [{0}] Class [{1}] could not be Loaded",
-                  new Object[] {"Handler Class", hClass}));
-
-                }
-           }
-        }
-        else {
-         // result.NotApplicable
-          result.addNaDetails(smh.getLocalString
-                     ("tests.componentNameConstructor", "For [ {0} ]",
-                      new Object[] {compName.toString()}));
-          result.notApplicable(smh.getLocalString
-                ( getClass().getName() + ".notapp",
-                 "Not Applicable since No handlers defined in this WebService"));
-        }
-
-        return result;
-    }
- }
-
diff --git a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/web/TagLibFactory.java b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/web/TagLibFactory.java
index d8ab7da..f8e73c8 100644
--- a/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/web/TagLibFactory.java
+++ b/appserver/verifier/verifier-impl/src/main/java/com/sun/enterprise/tools/verifier/web/TagLibFactory.java
@@ -20,7 +20,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
-import javax.servlet.descriptor.*;
+import jakarta.servlet.descriptor.*;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/appserver/verifier/verifier-impl/src/main/resources/com/sun/enterprise/tools/verifier/LocalStrings.properties b/appserver/verifier/verifier-impl/src/main/resources/com/sun/enterprise/tools/verifier/LocalStrings.properties
index 46eadb3..040f73a 100755
--- a/appserver/verifier/verifier-impl/src/main/resources/com/sun/enterprise/tools/verifier/LocalStrings.properties
+++ b/appserver/verifier/verifier-impl/src/main/resources/com/sun/enterprise/tools/verifier/LocalStrings.properties
@@ -735,7 +735,7 @@
 
 
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.localhomeintf.LocalHomeInterfaceExtendsEJBLocalHome.assertion=\
-    Enterprise bean LocalHome interface must extend the javax.ejb.EJBLocalHome interface.
+    Enterprise bean LocalHome interface must extend the jakarta.ejb.EJBLocalHome interface.
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.localhomeintf.LocalHomeInterfaceExtendsEJBLocalHome.specMappingInfo_2.1=\
     EJB 2.1 Specification Section #7.11.8
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.localhomeintf.LocalHomeInterfaceExtendsEJBLocalHome.specMappingInfo_3.0=\
@@ -752,7 +752,7 @@
     Interface [ {0} ]
 
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.remotehomeintf.RemoteHomeInterfaceExtendsEJBHome.assertion=\
-    Enterprise bean RemoteHome interface must extend the javax.ejb.EJBHome interface.
+    Enterprise bean RemoteHome interface must extend the jakarta.ejb.EJBHome interface.
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.remotehomeintf.RemoteHomeInterfaceExtendsEJBHome.specMappingInfo_2.1=\
     EJB 2.1 Specification Section #7.11.6
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.remotehomeintf.RemoteHomeInterfaceExtendsEJBHome.specMappingInfo_3.0=\
@@ -853,7 +853,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.MethodPermissionComponentInterface.exception=The test generated the following exception: [ {0} ].
 
 com.sun.enterprise.tools.verifier.tests.ejb.intf.remoteintf.EjbRemoteInterfaceExtendsEJBObject.assertion=\
-    Enterprise bean remote interface must extend the javax.ejb.EJBObject interface.
+    Enterprise bean remote interface must extend the jakarta.ejb.EJBObject interface.
 com.sun.enterprise.tools.verifier.tests.ejb.intf.remoteintf.EjbRemoteInterfaceExtendsEJBObject.specMappingInfo_2.1=\
     EJB 2.1 Specification Section #7.11.5
 com.sun.enterprise.tools.verifier.tests.ejb.intf.remoteintf.EjbRemoteInterfaceExtendsEJBObject.specMappingInfo_3.0=\
@@ -1040,7 +1040,7 @@
     Error: Remote interface [ {0} ] does not exist or is not loadable within bean [ {1} ].
 
 com.sun.enterprise.tools.verifier.tests.ejb.intf.localintf.EjbLocalInterfaceExtendsEJBLocalObject.assertion=\
-    Enterprise bean local interfaces must extend the javax.ejb.EJBLocalObject interface.
+    Enterprise bean local interfaces must extend the jakarta.ejb.EJBLocalObject interface.
 com.sun.enterprise.tools.verifier.tests.ejb.intf.localintf.EjbLocalInterfaceExtendsEJBLocalObject.specMappingInfo_2.1=\
     EJB 2.1 Specification Section #7.11.7
 com.sun.enterprise.tools.verifier.tests.ejb.intf.localintf.EjbLocalInterfaceExtendsEJBLocalObject.specMappingInfo_3.0=\
@@ -1429,7 +1429,7 @@
     Error: [ {0} ] does not contain class [ {1} ] within bean [ {2} ].
 
 com.sun.enterprise.tools.verifier.tests.ejb.session.TransactionDemarcationSessionSynchronizationInterface.assertion=\
-    If an enterprise bean implements the javax.ejb.SessionSynchronization interface, the Application Assembler can specify only the following values for the transaction attributes of the bean's methods:  Required, RequiresNew, Mandatory.
+    If an enterprise bean implements the jakarta.ejb.SessionSynchronization interface, the Application Assembler can specify only the following values for the transaction attributes of the bean's methods:  Required, RequiresNew, Mandatory.
 com.sun.enterprise.tools.verifier.tests.ejb.session.TransactionDemarcationSessionSynchronizationInterface.specMappingInfo_2.1=\
 	  EJB 2.1 Specification Section #17.4.1
 com.sun.enterprise.tools.verifier.tests.ejb.session.TransactionDemarcationSessionSynchronizationInterface.specMappingInfo_3.0=\
@@ -1991,7 +1991,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.entity.EjbClassImplementsComponentInterface.specMappingInfo_3.0=\
     EJB 3.0 Specification Section #4.6.6
 com.sun.enterprise.tools.verifier.tests.ejb.entity.EjbClassImplementsComponentInterface.warning=\
-    Warning: [ {0} ] class implements the enterprise bean''s remote/local interface [ {1} ].  It is recommended that the enterprise bean class not implement the remote/local interface to prevent inadvertent passing of this as a method argument or result. The class must provide no-op implementations of the methods defined in the javax.ejb.EJBObject/javax.ejb.EJBLocalObject interface.
+    Warning: [ {0} ] class implements the enterprise bean''s remote/local interface [ {1} ].  It is recommended that the enterprise bean class not implement the remote/local interface to prevent inadvertent passing of this as a method argument or result. The class must provide no-op implementations of the methods defined in the jakarta.ejb.EJBObject/jakarta.ejb.EJBLocalObject interface.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.EjbClassImplementsComponentInterface.failedException=\
     Error: [ {0} ] class not found.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.EjbClassImplementsComponentInterface.passed=\
@@ -2199,10 +2199,10 @@
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodException.notApplicable1=\
     [ {0} ] does not declare any ejbFind[METHOD](...) methods.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodException.warning=\
-   Warning: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbFind[METHOD] method to throw a java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 or EJB 2.0 compliant enterprise bean should throw the javax.ejb.EJB Exception or another RuntimeException to indicate non-application exceptions to the Container. An EJB 2.0 compliant bean should not throw java.rmi.RemoteException from its ejbCreate method.
+   Warning: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbFind[METHOD] method to throw a java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 or EJB 2.0 compliant enterprise bean should throw the jakarta.ejb.EJB Exception or another RuntimeException to indicate non-application exceptions to the Container. An EJB 2.0 compliant bean should not throw java.rmi.RemoteException from its ejbCreate method.
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodException.error=\
-    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbFind[METHOD] method to throw a java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 2.0 compliant enterprise bean must throw the javax.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container. An EJB 1.1 compliant bean should not throw java.rmi.RemoteException from its ejbCreate method.
+    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbFind[METHOD] method to throw a java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 2.0 compliant enterprise bean must throw the jakarta.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container. An EJB 1.1 compliant bean should not throw java.rmi.RemoteException from its ejbCreate method.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodException.failedException=\
     Error: enterprise bean class [ {1} ] does not exist or is not loadable.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodException.notApplicable2=\
@@ -2213,7 +2213,7 @@
 Error: ejbFind[Method] [ {0} ] does not throw FinderException.
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodObjectNotFoundException.assertion=\
-    Multi-object ejbFind[METHOD] methods must not throw javax.ejb.ObjectNotFoundException. 
+    Multi-object ejbFind[METHOD] methods must not throw jakarta.ejb.ObjectNotFoundException. 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodObjectNotFoundException.specMappingInfo_2.1=\
 	  EJB 2.1 Specification Section #12.1.8.2, #10.5.6.2  
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindermethod.EjbFinderMethodObjectNotFoundException.debug1=\
@@ -2396,7 +2396,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindbyprimarykey.EjbFindByPrimaryKeyException.failed=\
     Error: No ejbFindByPrimaryKey method was found in bean class.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindbyprimarykey.EjbFindByPrimaryKeyException.warning=\
-    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbFindByPrimary method to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw the javax.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
+    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbFindByPrimary method to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw the jakarta.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindbyprimarykey.EjbFindByPrimaryKeyException.failedException=\
     Error: enterprise bean class [ {1} ] does not exist or is not loadable.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbfindbyprimarykey.EjbFindByPrimaryKeyException.notApplicable=\
@@ -2547,7 +2547,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbcreatemethod.EjbCreateMethodExceptions.notApplicable1=\
     [ {0} ] does not declare any ejbCreate(...) methods. 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbcreatemethod.EjbCreateMethodExceptions.warning=\
-    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbCreate method to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw the javax.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
+    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbCreate method to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw the jakarta.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbcreatemethod.EjbCreateMethodExceptions.failedException=\
     Error: [ {0} ] class not found.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbcreatemethod.EjbCreateMethodExceptions.notApplicable=\
@@ -2693,7 +2693,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbpostcreatemethod.EjbPostCreateMethodException.notApplicable1=\
     [ {0} ] does not declare any ejbPostCreate(...) methods. 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbpostcreatemethod.EjbPostCreateMethodException.warning=\
-    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbPostCreate method to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a javax.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
+    Error: Compatibility Note:  An [ {0} ] method was found, but EJB 1.0 allowed the ejbPostCreate method to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a jakarta.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbpostcreatemethod.EjbPostCreateMethodException.failedException=\
     Error: [ {0} ] class not found.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.ejbpostcreatemethod.EjbPostCreateMethodException.notApplicable=\
@@ -2865,7 +2865,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.session.ejbcreatemethod.EjbCreateMethodException.failed=\
     Error: [ {0} ] does not properly declare at least one ejbCreate(...) method.  [ {1} ] is not a valid bean.
 com.sun.enterprise.tools.verifier.tests.ejb.session.ejbcreatemethod.EjbCreateMethodException.warning=\
-    Error: Compatibility Note:  A public ejbCreate(...) method was found, but EJB 1.0 allowed the ejbCreate method to throw a java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a javax.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
+    Error: Compatibility Note:  A public ejbCreate(...) method was found, but EJB 1.0 allowed the ejbCreate method to throw a java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a jakarta.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
 com.sun.enterprise.tools.verifier.tests.ejb.session.ejbcreatemethod.EjbCreateMethodException.failedException=\
     Error: [ {0} ] class not found.
 com.sun.enterprise.tools.verifier.tests.ejb.session.ejbcreatemethod.EjbCreateMethodException.notApplicable=\
@@ -3077,7 +3077,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodException.passed=\
     Valid Home method(s).
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodException.warning=\
-    Error: Compatibility Note: A public ejbHome[METHOD] method [ {0} ] was found, but EJB 1.0 allowed ejbHome[METHOD] methods to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a javax.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
+    Error: Compatibility Note: A public ejbHome[METHOD] method [ {0} ] was found, but EJB 1.0 allowed ejbHome[METHOD] methods to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a jakarta.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
 com.sun.enterprise.tools.verifier.tests.ejb.homeintf.HomeMethodException.failedException=\
     Error: Remote interface [ {0} ] or bean class [ {1} ] does not exist or is not loadable within bean [ {2} ].
 
@@ -3090,7 +3090,7 @@
 com.sun.enterprise.tools.verifier.tests.ejb.businessmethod.BusinessMethodException.passed=\
     Proper declaration of business method(s) found.
 com.sun.enterprise.tools.verifier.tests.ejb.businessmethod.BusinessMethodException.warning=\
-    Error: Compatibility Note: A public business method [ {0} ] was found, but EJB 1.0 allowed business methods to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a javax.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
+    Error: Compatibility Note: A public business method [ {0} ] was found, but EJB 1.0 allowed business methods to throw the java.rmi.RemoteException to indicate a non-application exception. This practice is deprecated in EJB 1.1 -- an EJB 1.1 compliant enterprise bean should throw a jakarta.ejb.EJBException or another RuntimeException to indicate non-application exceptions to the Container.
 com.sun.enterprise.tools.verifier.tests.ejb.businessmethod.BusinessMethodException.failedException=\
     Error: Remote interface [ {0} ] or bean class [ {1} ] does not exist or is not loadable within bean [ {2} ].
 
@@ -3214,7 +3214,7 @@
 
 
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.assertion=\
-    Session bean home interface create methods must throw javax.ejb.CreateException.
+    Session bean home interface create methods must throw jakarta.ejb.CreateException.
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.specMappingInfo_2.1=\
     EJB 2.1 Specification Section #7.11.6, #7.11.8
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.specMappingInfo_3.0=\
@@ -3222,11 +3222,11 @@
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.debug1=\
     For home interface [ {0} ] method [ {1} ].
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.passed=\
-    The create method that throws javax.ejb.CreateException was found.
+    The create method that throws jakarta.ejb.CreateException was found.
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.debug2=\
     ==============================
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.failed=\
-    Error: A create method was found, but did not throw javax.ejb.CreateException.
+    Error: A create method was found, but did not throw jakarta.ejb.CreateException.
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.failed1=\
     Error: No create method was found in [ {0} ].
 com.sun.enterprise.tools.verifier.tests.ejb.session.createmethod.HomeInterfaceCreateMethodExceptionCreate.failedException=\
@@ -3353,7 +3353,7 @@
 
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.assertion=\
-    Entity bean home interface create methods must throw javax.ejb.CreateException.
+    Entity bean home interface create methods must throw jakarta.ejb.CreateException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.specMappingInfo_2.1=\
 	  EJB 2.1 Specification Section #10.6.10, #10.6.12  
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.debug1=\
@@ -3361,11 +3361,11 @@
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.debug3=\
     For home interface [ {0} ].
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.passed=\
-    The create method that throws javax.ejb.CreateException was found.
+    The create method that throws jakarta.ejb.CreateException was found.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.debug2=\
     ==============================
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.failed=\
-    Error: A create method was found, but did not throw javax.ejb.CreateException.
+    Error: A create method was found, but did not throw jakarta.ejb.CreateException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.failedException=\
     Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ].
 com.sun.enterprise.tools.verifier.tests.ejb.entity.createmethod.HomeInterfaceCreateMethodExceptionCreate.notApplicable1=\
@@ -3495,17 +3495,17 @@
 
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.assertion=\
-    Entity bean home interface find[METHOD](...) methods must throw javax.ejb.FinderException.
+    Entity bean home interface find[METHOD](...) methods must throw jakarta.ejb.FinderException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.specMappingInfo_2.1=\
 	  EJB 2.1 Specification Section #10.6.10, #10.6.12  
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.debug1=\
     For home interface [ {0} ] method [ {1} ].
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.passed=\
-    The [ {0} ] method that throws javax.ejb.FinderException was found.
+    The [ {0} ] method that throws jakarta.ejb.FinderException was found.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.debug2=\
     ==============================
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.failed=\
-    Error: A [ {0} ] method was found, but did not throw javax.ejb.FinderException.
+    Error: A [ {0} ] method was found, but did not throw jakarta.ejb.FinderException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.failedException=\
     Error: Home interface [ {0} ] does not exist or is not loadable within bean [ {1} ].
 com.sun.enterprise.tools.verifier.tests.ejb.entity.findermethod.HomeInterfaceFindMethodExceptionFinder.notApplicable=\
@@ -3975,13 +3975,13 @@
     [ {0} ] has a query element associated with it.
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.FindMethodException.assertion=\
-    Query method should throw javax.ejb.FinderException.
+    Query method should throw jakarta.ejb.FinderException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.FindMethodException.specMappingInfo_2.1=\
 	  EJB 2.1 Specification Section #12.2.9  
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.FindMethodException.passed=\
-    [ {0} ] throws javax.ejb.FinderException.
+    [ {0} ] throws jakarta.ejb.FinderException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.FindMethodException.failed=\
-    Error: [ {0} ] does not throw javax.ejb.FinderException.
+    Error: [ {0} ] does not throw jakarta.ejb.FinderException.
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodTest.notApplicable=\
 Not Applicable: No select methods found.
@@ -4006,13 +4006,13 @@
     Error: [ {0} ] is not declared public and abstract.
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodException.assertion=\
-    ejbSelect methods must throw javax.ejb.FinderException.
+    ejbSelect methods must throw jakarta.ejb.FinderException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodException.specMappingInfo_2.1=\
 	  EJB 2.1 Specification Section #10.6.7  
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodException.passed=\
-    [ {0} ] throws javax.ejb.FinderException.
+    [ {0} ] throws jakarta.ejb.FinderException.
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodException.failed=\
-    Error: [ {0} ] does not throw javax.ejb.FinderException.
+    Error: [ {0} ] does not throw jakarta.ejb.FinderException.
 
 com.sun.enterprise.tools.verifier.tests.ejb.entity.cmp2.SelectMethodQL.assertion=\
     ejbSelect methods must be associated with an EJB-QL query that includes a SELECT statement.
@@ -4275,15 +4275,15 @@
 
 
 com.sun.enterprise.tools.verifier.tests.web.ServletInterface.assertion=\
-    Servlet implements the javax.servlet.Servlet interface either directly or indirectly through GenericServlet or HttpServlet.
+    Servlet implements the jakarta.servlet.Servlet interface either directly or indirectly through GenericServlet or HttpServlet.
 com.sun.enterprise.tools.verifier.tests.web.ServletInterface.specMappingInfo_2.4=\
 	  Java Servlet 2.4 Specification Section #SRV.2.3  
 com.sun.enterprise.tools.verifier.tests.web.ServletInterface.specMappingInfo_2.5=\
 	  Java Servlet 2.5 Specification Section #SRV.2.3  
 com.sun.enterprise.tools.verifier.tests.web.ServletInterface.passed=\
-    Servlet class [ {0} ] directly or indirectly implements javax.servlet.Servlet.
+    Servlet class [ {0} ] directly or indirectly implements jakarta.servlet.Servlet.
 com.sun.enterprise.tools.verifier.tests.web.ServletInterface.failed=\
-    Error: Servlet class [ {0} ] does not directly or indirectly implement javax.servlet.Servlet.
+    Error: Servlet class [ {0} ] does not directly or indirectly implement jakarta.servlet.Servlet.
 com.sun.enterprise.tools.verifier.tests.web.ServletInterface.ClassNotFoundException=\
     Error: [ {0} ] class not found.
 com.sun.enterprise.tools.verifier.tests.web.ServletInterface.IOException=\
@@ -4567,7 +4567,7 @@
     Exception occurred : [ {0} ].
 
 com.sun.enterprise.tools.verifier.tests.web.TagClassExtendsValidInterface.assertion=\
-    Tag class implements javax.servlet.jsp.tagext.JspTag for JSP version 2.0, javax.servlet.jsp.tagext.Tag for earlier versions of JSP specification.
+    Tag class implements jakarta.servlet.jsp.tagext.JspTag for JSP version 2.0, jakarta.servlet.jsp.tagext.Tag for earlier versions of JSP specification.
 com.sun.enterprise.tools.verifier.tests.web.TagClassExtendsValidInterface.specMappingInfo_2.4=\
     Section 7.1.3 and APPENDIX JSP.C of JSP Specification version 2.0
 com.sun.enterprise.tools.verifier.tests.web.TagClassExtendsValidInterface.specMappingInfo_2.5=\
@@ -4580,7 +4580,7 @@
     Tag class [ {0} ] in [ {1} ] implements a valid interface.
 
 com.sun.enterprise.tools.verifier.tests.web.TEIClassExtendsValidInterface.assertion=\
-    tei-class implements javax.servlet.jsp.tagext.TagExtraInfo.
+    tei-class implements jakarta.servlet.jsp.tagext.TagExtraInfo.
 com.sun.enterprise.tools.verifier.tests.web.TEIClassExtendsValidInterface.specMappingInfo_2.4=\
     Section 7.1.2 and APPENDIX JSP.C of JSP Specification version 2.0
 com.sun.enterprise.tools.verifier.tests.web.TEIClassExtendsValidInterface.specMappingInfo_2.5=\
@@ -4606,7 +4606,7 @@
     The name element value [ {0} ] under the tag element in [ {1} ] is not unique.
 
 com.sun.enterprise.tools.verifier.tests.web.TagClassImplementsValidInterface.assertion=\
-    The tag-class must implement the javax.servlet.jsp.tagext.DynamicAttributes interface if dynamic-attributes is true
+    The tag-class must implement the jakarta.servlet.jsp.tagext.DynamicAttributes interface if dynamic-attributes is true
 com.sun.enterprise.tools.verifier.tests.web.TagClassImplementsValidInterface.specMappingInfo_2.4=\
     APPENDIX JSP.C of JSP Specification version 2.0
 com.sun.enterprise.tools.verifier.tests.web.TagClassImplementsValidInterface.specMappingInfo_2.5=\
@@ -4614,7 +4614,7 @@
 com.sun.enterprise.tools.verifier.tests.web.TagClassImplementsValidInterface.passed=\
     No tag lib files are specified
 com.sun.enterprise.tools.verifier.tests.web.TagClassImplementsValidInterface.failed=\
-    Error: tag class [ {0} ] in [ {1} ] does not implements interface javax.servlet.jsp.tagext.DynamicAttributes
+    Error: tag class [ {0} ] in [ {1} ] does not implements interface jakarta.servlet.jsp.tagext.DynamicAttributes
 com.sun.enterprise.tools.verifier.tests.web.TagClassImplementsValidInterface.passed1=\
     All tag-class defined in the tag lib descriptor files implement valid interface
 
@@ -5151,7 +5151,7 @@
     Error: Listener class [ {0} ] does not implement a valid constructor.    
 
 com.sun.enterprise.tools.verifier.tests.web.ListenerClassImplementsValidInterface.warning=\
-Listener class [ {0} ] implements a valid interface.\n Warning: Listener class [ {0} ] implements javax.servlet.http.HttpSessionBindingListener interface.\n NOTE: The valueBound() and valueUnbound() methods will never be called unless the application explicitly adds an instance to the session itself.
+Listener class [ {0} ] implements a valid interface.\n Warning: Listener class [ {0} ] implements jakarta.servlet.http.HttpSessionBindingListener interface.\n NOTE: The valueBound() and valueUnbound() methods will never be called unless the application explicitly adds an instance to the session itself.
 com.sun.enterprise.tools.verifier.tests.web.ListenerClassImplementsValidInterface.assertion=\
     Listener class implements one of the listener interfaces.
 com.sun.enterprise.tools.verifier.tests.web.ListenerClassImplementsValidInterface.specMappingInfo_2.4=\
@@ -5163,7 +5163,7 @@
 com.sun.enterprise.tools.verifier.tests.web.ListenerClassImplementsValidInterface.passed=\
     Listener class [ {0} ] implements a valid listener interface.
 com.sun.enterprise.tools.verifier.tests.web.ListenerClassImplementsValidInterface.failed=\
-    Error: Listener class [ {0} ] does not implement one or more of the following valid interfaces:\n javax.servlet.ServletContextAttributeListener, javax.servlet.ServletContextListener, javax.servlet.http.HttpSessionAttributeListener, javax.servlet.http.HttpSessionListener
+    Error: Listener class [ {0} ] does not implement one or more of the following valid interfaces:\n jakarta.servlet.ServletContextAttributeListener, jakarta.servlet.ServletContextListener, jakarta.servlet.http.HttpSessionAttributeListener, jakarta.servlet.http.HttpSessionListener
 
 com.sun.enterprise.tools.verifier.tests.web.FilterClass.notApplicable=\
     There are no filter components within the Web archive [ {0} ].
@@ -5219,7 +5219,7 @@
     Error: Filter class [ {0} ] does not implement a valid constructor.
 
 com.sun.enterprise.tools.verifier.tests.web.FilterClassImplementsValidInterface.assertion=\
-    Filter class implements the javax.servlet.Filter interface.
+    Filter class implements the jakarta.servlet.Filter interface.
 com.sun.enterprise.tools.verifier.tests.web.FilterClassImplementsValidInterface.specMappingInfo_2.4=\
 	  Java Servlet 2.4 Specification Section #SRV.6.2  
 com.sun.enterprise.tools.verifier.tests.web.FilterClassImplementsValidInterface.specMappingInfo_2.5=\
@@ -6085,7 +6085,7 @@
     Cannot load declared message-driven bean component [ {0} ]
 
 com.sun.enterprise.tools.verifier.tests.ejb.messagebean.ImplementsMessageDrivenBean.assertion=\
-    Declared message-driven bean components must implement the javax.ejb.MessageDrivenBean interface.
+    Declared message-driven bean components must implement the jakarta.ejb.MessageDrivenBean interface.
 com.sun.enterprise.tools.verifier.tests.ejb.messagebean.ImplementsMessageDrivenBean.specMappingInfo_2.1=\
 	  EJB 2.1 Specification Section #15.4.1  
 
@@ -6939,11 +6939,11 @@
     Test apply only to Message Bean components
 ########################## BusinessIntfInheritance #############################
 com.sun.enterprise.tools.verifier.tests.ejb.ejb30.BusinessIntfInheritance.assertion=\
-    A business interface must not extend javax.ejb.EJBObject or javax.ejb.EJBLocalObject.
+    A business interface must not extend jakarta.ejb.EJBObject or jakarta.ejb.EJBLocalObject.
 com.sun.enterprise.tools.verifier.tests.ejb.ejb30.BusinessIntfInheritance.specMappingInfo_3.0=\
     EJB 3.0 Simplified API Section #3.2
 com.sun.enterprise.tools.verifier.tests.ejb.ejb30.BusinessIntfInheritance.failed=\
-    [ {0} ] extends either javax.ejb.EJBObject or javax.ejb.EJBLocalObject.
+    [ {0} ] extends either jakarta.ejb.EJBObject or jakarta.ejb.EJBLocalObject.
 com.sun.enterprise.tools.verifier.tests.ejb.ejb30.BusinessIntfInheritance.failed1=\
     Business Interface class [ {0} ] not found.
 com.sun.enterprise.tools.verifier.tests.ejb.ejb30.BusinessIntfInheritance.passed=\
diff --git a/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceHandler.java b/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceHandler.java
index 5c09dcf..0d0619f 100644
--- a/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceHandler.java
+++ b/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceHandler.java
@@ -38,8 +38,8 @@
 import java.util.logging.Level;
 
 import javax.xml.namespace.QName;
-import javax.ejb.Stateless;
-import javax.ejb.Singleton;
+import jakarta.ejb.Stateless;
+import jakarta.ejb.Singleton;
 
 import org.glassfish.api.deployment.archive.ReadableArchive;
 import org.glassfish.web.deployment.descriptor.WebComponentDescriptorImpl;
@@ -129,7 +129,7 @@
       /*  TODO These conditions will change since ejb in war will be supported
         //uncomment if needed
              if(annCtx instanceof EjbContext &&   (provider !=null) &&
-                    (provider.getType("javax.ejb.Stateless") == null)) {
+                    (provider.getType("jakarta.ejb.Stateless") == null)) {
                 AnnotationProcessorException ape = new AnnotationProcessorException(
                         localStrings.getLocalString("enterprise.deployment.annotation.handlers.webeppkgwrong",
                                 "Class {0} is annotated with @WebService and without @Stateless
@@ -143,7 +143,7 @@
             }
 
             if(annCtx instanceof EjbBundleContext && (provider !=null) &&
-                    (provider.getType("javax.ejb.Stateless") == null)) {
+                    (provider.getType("jakarta.ejb.Stateless") == null)) {
                 AnnotationProcessorException ape = new AnnotationProcessorException(
                         localStrings.getLocalString  ("enterprise.deployment.annotation.handlers.webeppkgwrong",
                                 "Class {0} is annotated with @WebService and without @Stateless but is packaged in a JAR." +
@@ -154,7 +154,7 @@
                 throw ape;
             }
             if(annCtx instanceof WebBundleContext && (provider !=null) &&
-                    (provider.getType("javax.ejb.Stateless") != null)) {
+                    (provider.getType("jakarta.ejb.Stateless") != null)) {
                 AnnotationProcessorException ape = new AnnotationProcessorException(
                         localStrings.getLocalString
                          ("enterprise.deployment.annotation.handlers.ejbeppkgwrong",
@@ -165,7 +165,7 @@
                 throw ape;
             }*/
             // let's see the type of web service we are dealing with...
-            if (ejbProvider != null && ejbProvider.getType("javax.ejb.Stateless") != null) {
+            if (ejbProvider != null && ejbProvider.getType("jakarta.ejb.Stateless") != null) {
                 // this is an ejb !
                 if (annCtx instanceof EjbContext) {
                     EjbContext ctx = (EjbContext) annCtx;
@@ -533,7 +533,7 @@
      */
     private boolean ignoreWebserviceAnnotations(AnnotatedElement annElem,AnnotatedElementHandler annCtx){
 
-        javax.ejb.Stateless stateless = annElem.getAnnotation(javax.ejb.Stateless.class);
+        jakarta.ejb.Stateless stateless = annElem.getAnnotation(jakarta.ejb.Stateless.class);
         jakarta.jws.WebService webservice = annElem.getAnnotation(jakarta.jws.WebService.class);
         if ((stateless != null) && (webservice != null)
                && ( (annCtx instanceof WebBundleContext) || (annCtx instanceof WebComponentContext)) ) {
@@ -567,7 +567,7 @@
     private String getEjbName(AnnotatedElement annElem) {
         Stateless stateless = null;
         try {
-            stateless = annElem.getAnnotation(javax.ejb.Stateless.class);
+            stateless = annElem.getAnnotation(jakarta.ejb.Stateless.class);
         } catch (Exception e) {
             if (logger.isLoggable(Level.FINE)) {
                 //This can happen in the web.zip installation where there is no ejb
@@ -577,7 +577,7 @@
         }
         Singleton singleton = null;
         try {
-            singleton = annElem.getAnnotation(javax.ejb.Singleton.class);
+            singleton = annElem.getAnnotation(jakarta.ejb.Singleton.class);
         } catch (Exception e) {
             if (logger.isLoggable(Level.FINE)) {
                 //This can happen in the web.zip installation where there is no ejb
diff --git a/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceProviderHandler.java b/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceProviderHandler.java
index 81993bc..ecd7391 100644
--- a/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceProviderHandler.java
+++ b/appserver/webservices/connector/src/main/java/org/glassfish/webservices/connector/annotation/handlers/WebServiceProviderHandler.java
@@ -42,8 +42,8 @@
 import com.sun.enterprise.deployment.util.DOLUtils;
 import com.sun.enterprise.util.LocalStringManagerImpl;
 import java.util.logging.Level;
-import javax.ejb.Singleton;
-import javax.ejb.Stateless;
+import jakarta.ejb.Singleton;
+import jakarta.ejb.Stateless;
 
 import javax.xml.namespace.QName;
 
@@ -77,7 +77,7 @@
      * annotation type.
      */
     public Class<? extends Annotation>[] getTypeDependencies() {
-        /*Class dependencies[] = { javax.ejb.Stateless.class };
+        /*Class dependencies[] = { jakarta.ejb.Stateless.class };
         return dependencies;*/
         return getEjbAndWebAnnotationTypes();
     }
@@ -129,7 +129,7 @@
         
         try {
             // let's see the type of web service we are dealing with...
-            if ((ejbProvider != null) && ejbProvider.getType("javax.ejb.Stateless") != null) {
+            if ((ejbProvider != null) && ejbProvider.getType("jakarta.ejb.Stateless") != null) {
                 // this is an ejb !
                 if (annCtx instanceof EjbContext) {
                     EjbContext ctx = (EjbContext) annCtx;
@@ -360,7 +360,7 @@
      *
      */
     private boolean ignoreWebserviceAnnotations(AnnotatedElement annElem, AnnotatedElementHandler annCtx) {
-        javax.ejb.Stateless stateless = annElem.getAnnotation(javax.ejb.Stateless.class);
+        jakarta.ejb.Stateless stateless = annElem.getAnnotation(jakarta.ejb.Stateless.class);
         jakarta.xml.ws.WebServiceProvider webservice = annElem.getAnnotation(jakarta.xml.ws.WebServiceProvider.class);
         if ((stateless != null) && (webservice != null)
                 && ((annCtx instanceof WebBundleContext) || (annCtx instanceof WebComponentContext))) {
@@ -372,7 +372,7 @@
     private String getEjbName(AnnotatedElement annElem) {
         Stateless stateless = null;
         try {
-            stateless = annElem.getAnnotation(javax.ejb.Stateless.class);
+            stateless = annElem.getAnnotation(jakarta.ejb.Stateless.class);
         } catch (Exception e) {
             if (logger.isLoggable(Level.FINE)) {
                 //This can happen in the web.zip installation where there is no ejb
@@ -382,7 +382,7 @@
         }
         Singleton singleton = null;
         try {
-            singleton = annElem.getAnnotation(javax.ejb.Singleton.class);
+            singleton = annElem.getAnnotation(jakarta.ejb.Singleton.class);
         } catch (Exception e) {
             if (logger.isLoggable(Level.FINE)) {
                 //This can happen in the web.zip installation where there is no ejb
