diff --git a/appserver/core/javaee-kernel/pom.xml b/appserver/core/javaee-kernel/pom.xml
index 4c81a66..38de3c1 100755
--- a/appserver/core/javaee-kernel/pom.xml
+++ b/appserver/core/javaee-kernel/pom.xml
@@ -27,9 +27,9 @@
     </parent>
     <artifactId>javaee-kernel</artifactId>
     <packaging>glassfish-jar</packaging>
-    
+
     <name>Java EE related distributions kernel Classes</name>
-    
+
     <developers>
         <developer>
             <id>dochez</id>
@@ -42,7 +42,7 @@
             </roles>
         </developer>
     </developers>
-    
+
     <dependencies>
         <dependency>
             <groupId>org.glassfish.main.common</groupId>
diff --git a/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/MEJBService.java b/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/MEJBService.java
index 1034273..b929156 100755
--- a/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/MEJBService.java
+++ b/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/MEJBService.java
@@ -33,7 +33,7 @@
 import java.util.logging.Level;
 
 /**
- * MEJB service to register mejb with a temporary NamingObjectProxy at server 
+ * MEJB service to register mejb with a temporary NamingObjectProxy at server
  * start up time
  */
 @Service
@@ -48,23 +48,23 @@
     @Inject
     ServiceLocator habitat;
 
-    @Inject 
+    @Inject
     Provider<GlassfishNamingManager> gfNamingManagerProvider;
 
     private static final Logger _logger = LogDomains.getLogger(
         MEJBService.class, LogDomains.EJB_LOGGER);
-  
+
     public void postConstruct() {
         GlassfishNamingManager gfNamingManager =
             gfNamingManagerProvider.get();
 
-        MEJBNamingObjectProxy mejbProxy = 
+        MEJBNamingObjectProxy mejbProxy =
             new MEJBNamingObjectProxy(habitat);
         for(String next : MEJBNamingObjectProxy.getJndiNames()) {
             try {
                 gfNamingManager.publishObject(next, mejbProxy, true);
             } catch (Exception e) {
-                _logger.log(Level.WARNING, "Problem in publishing temp proxy for MEJB: " + 
+                _logger.log(Level.WARNING, "Problem in publishing temp proxy for MEJB: " +
                     e.getMessage(), e);
             }
         }
diff --git a/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/WebContainerStarter.java b/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/WebContainerStarter.java
index 55b8581..bb3aacc 100644
--- a/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/WebContainerStarter.java
+++ b/appserver/core/javaee-kernel/src/main/java/org/glassfish/kernel/javaee/WebContainerStarter.java
@@ -70,12 +70,12 @@
 @RunLevel(StartupRunLevel.VAL)
 public class WebContainerStarter
         implements PostConstruct, ConfigListener {
-   
+
     private static final String LOGMSG_PREFIX = "AS-CORE-JAVAEE";
-    
+
     @LogMessagesResourceBundle
     private static final String SHARED_LOGMESSAGE_RESOURCE = "org.glassfish.kernel.javaee.LogMessages";
-    
+
     @LoggerInfo(subsystem = "AS-CORE", description = "Java EE Core Kernel", publish = true)
     private static final String ASCORE_LOGGER = "jakarta.enterprise.system.core.ee";
     private static final Logger logger = Logger.getLogger(
@@ -93,7 +93,7 @@
             message = "Done with starting {0} container.",
             level = "INFO")
     public static final String mStartContainerDone = LOGMSG_PREFIX + "-0002";
-    
+
     @LogMessageInfo(
             message = "Unable to start container (no exception provided)",
             cause = "The web container does not start properly.",
@@ -137,7 +137,7 @@
      * Scans the domain.xml to see if it specifies any configuration
      * that can be handled only by the web container, and if so, starts
      * the web container
-     */ 
+     */
     public void postConstruct() {
         domainProvider.get();
         Config serverConfig = serverConfigProvider.get();
@@ -202,7 +202,7 @@
             }
             return;
         }
-        
+
         if (containerRegistry.getContainer(
                     webSniffer.getContainersNames()[0]) != null) {
             containerRegistry.getContainer(
@@ -216,7 +216,7 @@
                     for (EngineInfo info : containersInfo) {
                         info.getContainer();
                         if (logger.isLoggable(Level.INFO)) {
-                            logger.log(Level.INFO, mStartContainerDone, 
+                            logger.log(Level.INFO, mStartContainerDone,
                                 webSniffer.getModuleType());
                         }
                     }
@@ -304,7 +304,7 @@
                     !ConfigBeansUtilities.toBoolean(state))) {
             return true;
         }
-     
+
         List<Property> props = host.getProperty();
         if (props != null && !props.isEmpty()) {
             return true;
