You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2022/08/30 09:31:51 UTC

[myfaces] branch main updated: cosmetics

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

tandraschko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/main by this push:
     new 2eb1814eb cosmetics
2eb1814eb is described below

commit 2eb1814ebea056e9215e988a25d82209ae3bc097
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Tue Aug 30 11:31:43 2022 +0200

    cosmetics
---
 .../myfaces/push/WebsocketComponentRenderer.java   | 50 ++++++++---------
 .../apache/myfaces/push/WebsocketConfigurator.java | 14 ++---
 .../push/cdi/AbstractWebsocketTokenManager.java    | 42 +++++++++++++++
 ...textCDIExtension.java => PushCDIExtension.java} | 14 ++---
 .../apache/myfaces/push/cdi/PushContextImpl.java   | 62 +++++++++++-----------
 ...Bean.java => WebsocketChannelTokenBuilder.java} |  4 +-
 ....java => WebsocketTokenManagerApplication.java} | 32 +++++------
 ...Bean.java => WebsocketTokenManagerSession.java} | 43 +++++++--------
 ...iewBean.java => WebsocketTokenManagerView.java} | 31 ++++-------
 .../jakarta.enterprise.inject.spi.Extension        |  2 +-
 10 files changed, 151 insertions(+), 143 deletions(-)

diff --git a/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java b/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
index e7ad86ef9..98171f936 100644
--- a/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/push/WebsocketComponentRenderer.java
@@ -37,11 +37,11 @@ import jakarta.faces.event.PostAddToViewEvent;
 import jakarta.faces.render.Renderer;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
 import org.apache.myfaces.cdi.util.CDIUtils;
-import org.apache.myfaces.push.cdi.WebsocketApplicationBean;
+import org.apache.myfaces.push.cdi.WebsocketTokenManagerApplication;
 import org.apache.myfaces.push.cdi.WebsocketChannelMetadata;
-import org.apache.myfaces.push.cdi.WebsocketChannelTokenBuilderBean;
-import org.apache.myfaces.push.cdi.WebsocketSessionBean;
-import org.apache.myfaces.push.cdi.WebsocketViewBean;
+import org.apache.myfaces.push.cdi.WebsocketChannelTokenBuilder;
+import org.apache.myfaces.push.cdi.WebsocketTokenManagerSession;
+import org.apache.myfaces.push.cdi.WebsocketTokenManagerView;
 import org.apache.myfaces.renderkit.html.util.ClientBehaviorRendererUtils;
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.HtmlRendererUtils;
@@ -122,16 +122,13 @@ public class WebsocketComponentRenderer extends Renderer implements ComponentSys
         // TODO: use a single bean and entry point for this algorithm.
         BeanManager beanManager = CDIUtils.getBeanManager(facesContext);
 
-        WebsocketChannelTokenBuilderBean channelTokenBean = CDIUtils.get(
-                beanManager,
-                WebsocketChannelTokenBuilderBean.class);
+        WebsocketChannelTokenBuilder channelTokenBean = CDIUtils.get(beanManager, WebsocketChannelTokenBuilder.class);
 
         // This bean is required because you always need to register the token, so it can be properly destroyed
-        WebsocketViewBean viewTokenBean = CDIUtils.get(
-                beanManager,
-                WebsocketViewBean.class);
-        WebsocketSessionBean sessionTokenBean = CDIUtils.get(
-                beanManager, WebsocketSessionBean.class);
+        WebsocketTokenManagerView viewTokenManager =
+                CDIUtils.get(beanManager, WebsocketTokenManagerView.class);
+        WebsocketTokenManagerSession sessionTokenManager =
+                CDIUtils.get(beanManager, WebsocketTokenManagerSession.class);
 
         // Create channel token 
         // TODO: Use ResponseStateManager to create the token
@@ -144,7 +141,7 @@ public class WebsocketComponentRenderer extends Renderer implements ComponentSys
         // creation 
         if (!component.isConnected())
         {
-            channelToken = viewTokenBean.getChannelToken(metadata);
+            channelToken = viewTokenManager.getChannelToken(metadata);
         }
         if (channelToken == null)
         {
@@ -152,37 +149,32 @@ public class WebsocketComponentRenderer extends Renderer implements ComponentSys
             channelToken = channelTokenBean.createChannelToken(facesContext, channel);
             
             // Register channel in view scope to chain discard view algorithm using @PreDestroy
-            viewTokenBean.registerToken(channelToken, metadata);
+            viewTokenManager.registerToken(channelToken, metadata);
             
             // Register channel in session scope to allow validation on handshake ( WebsocketConfigurator )
-            sessionTokenBean.registerToken(channelToken, metadata);
+            sessionTokenManager.registerToken(channelToken, metadata);
         }
 
         // Ask these two scopes 
-        WebsocketApplicationBean appTokenBean = CDIUtils.get(
-                beanManager, WebsocketApplicationBean.class, false);
+        WebsocketTokenManagerApplication applicationTokenManager =
+                CDIUtils.get(beanManager, WebsocketTokenManagerApplication.class, false);
 
         // Register token and metadata in the proper bean
         if (scope.equals("view"))
         {
-            viewTokenBean.registerWebsocketSession(channelToken, metadata);
+            viewTokenManager.registerWebsocketSession(channelToken, metadata);
         }
         else if (scope.equals("session"))
         {
-            sessionTokenBean = (sessionTokenBean != null) ? sessionTokenBean : CDIUtils.get(
-                    CDIUtils.getBeanManager(facesContext),
-                    WebsocketSessionBean.class);
-
-            sessionTokenBean.registerWebsocketSession(channelToken, metadata);
+            sessionTokenManager.registerWebsocketSession(channelToken, metadata);
         }
-        else
+        else if (scope.equals("application"))
         {
-            //Default application
-            appTokenBean = (appTokenBean != null) ? appTokenBean : CDIUtils.get(
-                    CDIUtils.getBeanManager(facesContext),
-                    WebsocketApplicationBean.class);
+            applicationTokenManager = applicationTokenManager != null
+                    ? applicationTokenManager
+                    : CDIUtils.get(beanManager, WebsocketTokenManagerApplication.class);
 
-            appTokenBean.registerWebsocketSession(channelToken, metadata);
+            applicationTokenManager.registerWebsocketSession(channelToken, metadata);
         }
         writer.startElement(HTML.SCRIPT_ELEM, component);
         HtmlRendererUtils.renderScriptType(facesContext, writer);
diff --git a/impl/src/main/java/org/apache/myfaces/push/WebsocketConfigurator.java b/impl/src/main/java/org/apache/myfaces/push/WebsocketConfigurator.java
index 55d309803..a247e2507 100644
--- a/impl/src/main/java/org/apache/myfaces/push/WebsocketConfigurator.java
+++ b/impl/src/main/java/org/apache/myfaces/push/WebsocketConfigurator.java
@@ -27,7 +27,7 @@ import jakarta.websocket.server.HandshakeRequest;
 import jakarta.websocket.server.ServerEndpointConfig;
 import org.apache.myfaces.cdi.util.CDIUtils;
 import org.apache.myfaces.config.MyfacesConfig;
-import org.apache.myfaces.push.cdi.WebsocketSessionBean;
+import org.apache.myfaces.push.cdi.WebsocketTokenManagerSession;
 
 public class WebsocketConfigurator extends ServerEndpointConfig.Configurator
 {
@@ -66,20 +66,20 @@ public class WebsocketConfigurator extends ServerEndpointConfig.Configurator
                 channelToken = uri.substring(uri.lastIndexOf('/')+1);
             }
         }
-        
+
         BeanManager beanManager = CDI.current().getBeanManager();
-        WebsocketSessionBean websocketSessionBean = CDIUtils.get(
-                beanManager, WebsocketSessionBean.class, false);
+        WebsocketTokenManagerSession sessionTokenManager =
+                CDIUtils.get(beanManager, WebsocketTokenManagerSession.class, false);
         
-        if (websocketSessionBean != null)
+        if (sessionTokenManager != null)
         {
-            Serializable user = websocketSessionBean.getUserFromChannelToken(channelToken);
+            Serializable user = sessionTokenManager.getUserFromChannelToken(channelToken);
             if (user != null)
             {
                 sec.getUserProperties().put(WEBSOCKET_USER, user);
             }
 
-            sec.getUserProperties().put(WEBSOCKET_VALID, websocketSessionBean.isTokenValid(channelToken));
+            sec.getUserProperties().put(WEBSOCKET_VALID, sessionTokenManager.isTokenValid(channelToken));
         }
         else
         {
diff --git a/impl/src/main/java/org/apache/myfaces/push/cdi/AbstractWebsocketTokenManager.java b/impl/src/main/java/org/apache/myfaces/push/cdi/AbstractWebsocketTokenManager.java
new file mode 100644
index 000000000..ce5e9c249
--- /dev/null
+++ b/impl/src/main/java/org/apache/myfaces/push/cdi/AbstractWebsocketTokenManager.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.push.cdi;
+
+import java.io.Serializable;
+import java.util.List;
+
+public abstract class AbstractWebsocketTokenManager implements Serializable
+{
+    
+    public abstract void registerWebsocketSession(String token, WebsocketChannelMetadata metadata);
+
+    /**
+     * Indicate if the channel mentioned is valid for view scope.
+     * 
+     * A channel is valid if there is at least one token that represents a valid connection to this channel.
+     * 
+     * @param channel
+     * @return 
+     */
+    public abstract boolean isChannelAvailable(String channel);
+
+    public abstract List<String> getChannelTokens(String channel);
+
+    public abstract <S extends Serializable> List<String> getChannelTokens(String channel, S user);
+}
diff --git a/impl/src/main/java/org/apache/myfaces/push/cdi/PushContextCDIExtension.java b/impl/src/main/java/org/apache/myfaces/push/cdi/PushCDIExtension.java
similarity index 82%
rename from impl/src/main/java/org/apache/myfaces/push/cdi/PushContextCDIExtension.java
rename to impl/src/main/java/org/apache/myfaces/push/cdi/PushCDIExtension.java
index 077cdbad7..771625c91 100644
--- a/impl/src/main/java/org/apache/myfaces/push/cdi/PushContextCDIExtension.java
+++ b/impl/src/main/java/org/apache/myfaces/push/cdi/PushCDIExtension.java
@@ -28,22 +28,22 @@ import jakarta.enterprise.inject.spi.Extension;
 /**
  *
  */
-public class PushContextCDIExtension implements Extension
+public class PushCDIExtension implements Extension
 {
     void beforeBeanDiscovery(@Observes final BeforeBeanDiscovery event, BeanManager beanManager)
     {
         // Register PushContextFactoryBean as a bean with CDI annotations, so the system
         // can take it into account, and use it later when necessary.
-        AnnotatedType wcbean = beanManager.createAnnotatedType(WebsocketChannelTokenBuilderBean.class);
-        event.addAnnotatedType(wcbean, wcbean.getJavaClass().getName());
-        
-        AnnotatedType sessionhandlerbean = beanManager.createAnnotatedType(WebsocketSessionBean.class);
+        AnnotatedType tokenBuilder = beanManager.createAnnotatedType(WebsocketChannelTokenBuilder.class);
+        event.addAnnotatedType(tokenBuilder, tokenBuilder.getJavaClass().getName());
+
+        AnnotatedType sessionhandlerbean = beanManager.createAnnotatedType(WebsocketTokenManagerSession.class);
         event.addAnnotatedType(sessionhandlerbean, sessionhandlerbean.getJavaClass().getName());
 
-        AnnotatedType viewTokenBean = beanManager.createAnnotatedType(WebsocketViewBean.class);
+        AnnotatedType viewTokenBean = beanManager.createAnnotatedType(WebsocketTokenManagerView.class);
         event.addAnnotatedType(viewTokenBean, viewTokenBean.getJavaClass().getName());
 
-        AnnotatedType apphandlerbean = beanManager.createAnnotatedType(WebsocketApplicationBean.class);
+        AnnotatedType apphandlerbean = beanManager.createAnnotatedType(WebsocketTokenManagerApplication.class);
         event.addAnnotatedType(apphandlerbean, apphandlerbean.getJavaClass().getName());
     }
 }
diff --git a/impl/src/main/java/org/apache/myfaces/push/cdi/PushContextImpl.java b/impl/src/main/java/org/apache/myfaces/push/cdi/PushContextImpl.java
index 2b1a1df18..028c0d40b 100644
--- a/impl/src/main/java/org/apache/myfaces/push/cdi/PushContextImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/push/cdi/PushContextImpl.java
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.myfaces.push.cdi;
 
 import java.io.Serializable;
@@ -54,24 +53,24 @@ public class PushContextImpl implements PushContext
         //1. locate the channel and define the context
         String channel = getChannel();
 
-        WebsocketApplicationBean appTokenBean = CDIUtils.get(beanManager, 
-                WebsocketApplicationBean.class, false);
-        WebsocketViewBean viewTokenBean = null;
-        WebsocketSessionBean sessionTokenBean = null;
-        
+        WebsocketTokenManagerApplication applicationTokenManager = CDIUtils.get(beanManager, 
+                WebsocketTokenManagerApplication.class, false);
+        WebsocketTokenManagerView viewTokenManager = null;
+        WebsocketTokenManagerSession sessionTokenManager = null;
+
         if (CDIUtils.isRequestScopeActive(beanManager))
         {
             if (CDIUtils.isSessionScopeActive(beanManager))
             {
-                sessionTokenBean = CDIUtils.get(beanManager, WebsocketSessionBean.class, false);
+                sessionTokenManager = CDIUtils.get(beanManager, WebsocketTokenManagerSession.class, false);
                 if (CDIUtils.isViewScopeActive(beanManager))
                 {
-                    viewTokenBean = CDIUtils.get(beanManager, WebsocketViewBean.class, false);
+                    viewTokenManager = CDIUtils.get(beanManager, WebsocketTokenManagerView.class, false);
                 }
             }
         }
-        
-        if (appTokenBean == null)
+
+        if (applicationTokenManager == null)
         {
             // No base bean to push message
             return Collections.emptySet();
@@ -79,20 +78,20 @@ public class PushContextImpl implements PushContext
         
         List<String> channelTokens;
         
-        if (viewTokenBean != null && viewTokenBean.isChannelAvailable(channel))
+        if (viewTokenManager != null && viewTokenManager.isChannelAvailable(channel))
         {
             // Use view scope for context
-            channelTokens = viewTokenBean.getChannelTokensFor(channel);
+            channelTokens = viewTokenManager.getChannelTokens(channel);
         }
-        else if (sessionTokenBean != null && sessionTokenBean.isChannelAvailable(getChannel()))
+        else if (sessionTokenManager != null && sessionTokenManager.isChannelAvailable(getChannel()))
         {
             // Use session scope for context
-            channelTokens = sessionTokenBean.getChannelTokensFor(channel);
+            channelTokens = sessionTokenManager.getChannelTokens(channel);
         }
-        else if (appTokenBean != null && appTokenBean.isChannelAvailable(getChannel()))
+        else if (applicationTokenManager != null && applicationTokenManager.isChannelAvailable(getChannel()))
         {
             // Use application scope for context
-            channelTokens = appTokenBean.getChannelTokensFor(channel);
+            channelTokens = applicationTokenManager.getChannelTokens(channel);
         }
         else
         {
@@ -100,7 +99,6 @@ public class PushContextImpl implements PushContext
         }
         
         //2. send the message
-        
         if (channelTokens != null && !channelTokens.isEmpty())
         {
             Set<Future<Void>> result = null;
@@ -133,50 +131,50 @@ public class PushContextImpl implements PushContext
         //1. locate the channel and define the context
         String channel = getChannel();
 
-        WebsocketApplicationBean appTokenBean = CDIUtils.get(beanManager, 
-                WebsocketApplicationBean.class, false);
-        WebsocketViewBean viewTokenBean = null;
-        WebsocketSessionBean sessionTokenBean = null;
+        WebsocketTokenManagerApplication applicationTokenManager = CDIUtils.get(beanManager, 
+                WebsocketTokenManagerApplication.class, false);
+        WebsocketTokenManagerView viewTokenManager = null;
+        WebsocketTokenManagerSession sessionTokenManager = null;
         
         if (CDIUtils.isSessionScopeActive(beanManager))
         {
-            sessionTokenBean = CDIUtils.get(beanManager, WebsocketSessionBean.class, false);
+            sessionTokenManager = CDIUtils.get(beanManager, WebsocketTokenManagerSession.class, false);
             if (CDIUtils.isViewScopeActive(beanManager))
             {
-                viewTokenBean = CDIUtils.get(beanManager, WebsocketViewBean.class, false);
+                viewTokenManager = CDIUtils.get(beanManager, WebsocketTokenManagerView.class, false);
             }
         }
         
-        if (appTokenBean == null)
+        if (applicationTokenManager == null)
         {
             // No base bean to push message
             return Collections.emptyMap();
         }
 
-        Map<S, Set<Future<Void>>> result = new HashMap<S, Set<Future<Void>>>();
-        
-        if (viewTokenBean != null && viewTokenBean.isChannelAvailable(channel))
+        Map<S, Set<Future<Void>>> result = new HashMap<>();
+
+        if (viewTokenManager != null && viewTokenManager.isChannelAvailable(channel))
         {
             // Use view scope for context
             for (S user : users)
             {
-                result.put(user, send(viewTokenBean.getChannelTokensFor(channel, user), message));
+                result.put(user, send(viewTokenManager.getChannelTokens(channel, user), message));
             }
         }
-        else if (sessionTokenBean != null && sessionTokenBean.isChannelAvailable(getChannel()))
+        else if (sessionTokenManager != null && sessionTokenManager.isChannelAvailable(getChannel()))
         {
             // Use session scope for context
             for (S user : users)
             {
-                result.put(user, send(sessionTokenBean.getChannelTokensFor(channel, user), message));
+                result.put(user, send(sessionTokenManager.getChannelTokens(channel, user), message));
             }
         }
-        else if (appTokenBean != null && appTokenBean.isChannelAvailable(getChannel()))
+        else if (applicationTokenManager != null && applicationTokenManager.isChannelAvailable(getChannel()))
         {
             // Use application scope for context
             for (S user : users)
             {
-                result.put(user, send(appTokenBean.getChannelTokensFor(channel, user), message));
+                result.put(user, send(applicationTokenManager.getChannelTokens(channel, user), message));
             }
         }
         else
diff --git a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketChannelTokenBuilderBean.java b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketChannelTokenBuilder.java
similarity index 96%
rename from impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketChannelTokenBuilderBean.java
rename to impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketChannelTokenBuilder.java
index a93db4e31..269484919 100644
--- a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketChannelTokenBuilderBean.java
+++ b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketChannelTokenBuilder.java
@@ -27,13 +27,13 @@ import org.apache.myfaces.util.token.CsrfSessionTokenFactorySecureRandom;
 import org.apache.myfaces.config.MyfacesConfig;
 
 @ApplicationScoped
-public class WebsocketChannelTokenBuilderBean
+public class WebsocketChannelTokenBuilder
 {
     private CsrfSessionTokenFactory csrfSessionTokenFactory;
     
     private boolean initialized;
     
-    public WebsocketChannelTokenBuilderBean()
+    public WebsocketChannelTokenBuilder()
     {
     }
     
diff --git a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketApplicationBean.java b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerApplication.java
similarity index 77%
rename from impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketApplicationBean.java
rename to impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerApplication.java
index bbb36e632..a2f0004c0 100644
--- a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketApplicationBean.java
+++ b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerApplication.java
@@ -22,43 +22,34 @@ package org.apache.myfaces.push.cdi;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import jakarta.enterprise.context.ApplicationScoped;
+import java.util.concurrent.ConcurrentHashMap;
 
 @ApplicationScoped
-public class WebsocketApplicationBean
+public class WebsocketTokenManagerApplication extends AbstractWebsocketTokenManager
 {
-   
     /**
      * This map has as key the channel and as values a list of websocket channels
      */
-    private Map<String, List<WebsocketChannel>> channelTokenListMap = new HashMap<>(2);
+    private Map<String, List<WebsocketChannel>> channelTokenListMap = new ConcurrentHashMap<>(2);
 
+    @Override
     public void registerWebsocketSession(String token, WebsocketChannelMetadata metadata)
     {
-        if ("application".equals(metadata.getScope()))
-        {
-            channelTokenListMap.putIfAbsent(metadata.getChannel(), new ArrayList<>(1));
-            channelTokenListMap.get(metadata.getChannel()).add(new WebsocketChannel(token, metadata));
-        }
+        channelTokenListMap.putIfAbsent(metadata.getChannel(), new ArrayList<>(1));
+        channelTokenListMap.get(metadata.getChannel()).add(new WebsocketChannel(token, metadata));
     }
-    
-    /**
-     * Indicate if the channel mentioned is valid for view scope.
-     * 
-     * A channel is valid if there is at least one token that represents a valid connection to this channel.
-     * 
-     * @param channel
-     * @return 
-     */
+
+    @Override
     public boolean isChannelAvailable(String channel)
     {
         return channelTokenListMap.containsKey(channel);
     }
     
-    public List<String> getChannelTokensFor(String channel)
+    @Override
+    public List<String> getChannelTokens(String channel)
     {
         List<WebsocketChannel> list = channelTokenListMap.get(channel);
         if (list != null && !list.isEmpty())
@@ -73,7 +64,8 @@ public class WebsocketApplicationBean
         return Collections.emptyList();
     }
     
-    public <S extends Serializable> List<String> getChannelTokensFor(String channel, S user)
+    @Override
+    public <S extends Serializable> List<String> getChannelTokens(String channel, S user)
     {
         List<WebsocketChannel> list = channelTokenListMap.get(channel);
         if (list != null && !list.isEmpty())
diff --git a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketSessionBean.java b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerSession.java
similarity index 86%
rename from impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketSessionBean.java
rename to impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerSession.java
index fa50b9bc6..85ca61d68 100644
--- a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketSessionBean.java
+++ b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerSession.java
@@ -37,14 +37,14 @@ import jakarta.enterprise.context.SessionScoped;
  * 
  */
 @SessionScoped
-public class WebsocketSessionBean implements Serializable
+public class WebsocketTokenManagerSession extends AbstractWebsocketTokenManager implements Serializable
 {
     
     /**
      * This map hold all tokens that are related to the current scope. 
      * This map use as key channel and as value channelTokens
      */
-    private Map<String, List<WebsocketChannel> > channelTokenListMap = new ConcurrentHashMap<>(2);    
+    private Map<String, List<WebsocketChannel>> channelTokenListMap = new ConcurrentHashMap<>(2);    
     
     /**
      * This map holds all tokens related to the current session and its associated metadata, that will
@@ -53,7 +53,7 @@ public class WebsocketSessionBean implements Serializable
      */
     private Map<String, WebsocketChannelMetadata> tokenMap = new ConcurrentHashMap<>();
     
-    public WebsocketSessionBean()
+    public WebsocketTokenManagerSession()
     {
     }
     
@@ -62,15 +62,19 @@ public class WebsocketSessionBean implements Serializable
         tokenMap.put(token, metadata);
     }
 
+    @Override
     public void registerWebsocketSession(String token, WebsocketChannelMetadata metadata)
     {
-        if ("session".equals(metadata.getScope()))
-        {
-            channelTokenListMap.putIfAbsent(metadata.getChannel(), new ArrayList<>(1));
-            channelTokenListMap.get(metadata.getChannel()).add(new WebsocketChannel(token, metadata));
-        }
+        channelTokenListMap.putIfAbsent(metadata.getChannel(), new ArrayList<>(1));
+        channelTokenListMap.get(metadata.getChannel()).add(new WebsocketChannel(token, metadata));
     }
-    
+
+    @Override
+    public boolean isChannelAvailable(String channel)
+    {
+        return channelTokenListMap.containsKey(channel);
+    }
+
     public boolean isTokenValid(String token)
     {
         return tokenMap.containsKey(token);
@@ -88,21 +92,9 @@ public class WebsocketSessionBean implements Serializable
         }
         return null;
     }
-    
-    /**
-     * Indicate if the channel mentioned is valid for view scope.
-     * 
-     * A channel is valid if there is at least one token that represents a valid connection to this channel.
-     * 
-     * @param channel
-     * @return 
-     */
-    public boolean isChannelAvailable(String channel)
-    {
-        return channelTokenListMap.containsKey(channel);
-    }
-    
-    public List<String> getChannelTokensFor(String channel)
+
+    @Override
+    public List<String> getChannelTokens(String channel)
     {
         List<WebsocketChannel> list = channelTokenListMap.get(channel);
         if (list != null && !list.isEmpty())
@@ -117,7 +109,8 @@ public class WebsocketSessionBean implements Serializable
         return Collections.emptyList();
     }
     
-    public <S extends Serializable> List<String> getChannelTokensFor(String channel, S user)
+    @Override
+    public <S extends Serializable> List<String> getChannelTokens(String channel, S user)
     {
         List<WebsocketChannel> list = channelTokenListMap.get(channel);
         if (list != null && !list.isEmpty())
diff --git a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketViewBean.java b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerView.java
similarity index 85%
rename from impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketViewBean.java
rename to impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerView.java
index 1408bd391..13d150a46 100644
--- a/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketViewBean.java
+++ b/impl/src/main/java/org/apache/myfaces/push/cdi/WebsocketTokenManagerView.java
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.myfaces.push.cdi;
 
 import java.io.Serializable;
@@ -35,7 +34,7 @@ import org.apache.myfaces.cdi.util.CDIUtils;
  * is discarded, destroy the websocket sessions associated with the view because they are no longer valid.
  */
 @ViewScoped
-public class WebsocketViewBean implements Serializable
+public class WebsocketTokenManagerView extends AbstractWebsocketTokenManager implements Serializable
 {
     
     /**
@@ -61,30 +60,21 @@ public class WebsocketViewBean implements Serializable
         tokenList.put(token, metadata);
     }
     
+    @Override
     public void registerWebsocketSession(String token, WebsocketChannelMetadata metadata)
     {
-        if ("view".equals(metadata.getScope()))
-        {
-            channelTokenListMap.putIfAbsent(metadata.getChannel(), new ArrayList<>(1));
-            channelTokenListMap.get(metadata.getChannel()).add(new WebsocketChannel(
-                    token, metadata));
-        }
+        channelTokenListMap.putIfAbsent(metadata.getChannel(), new ArrayList<>(1));
+        channelTokenListMap.get(metadata.getChannel()).add(new WebsocketChannel(token, metadata));
     }
 
-    /**
-     * Indicate if the channel mentioned is valid for view scope.
-     * 
-     * A channel is valid if there is at least one token that represents a valid connection to this channel.
-     * 
-     * @param channel
-     * @return 
-     */
+    @Override
     public boolean isChannelAvailable(String channel)
     {
         return channelTokenListMap.containsKey(channel);
     }
     
-    public List<String> getChannelTokensFor(String channel)
+    @Override
+    public List<String> getChannelTokens(String channel)
     {
         List<WebsocketChannel> list = channelTokenListMap.get(channel);
         if (list != null && !list.isEmpty())
@@ -118,7 +108,8 @@ public class WebsocketViewBean implements Serializable
         return token;
     }
     
-    public <S extends Serializable> List<String> getChannelTokensFor(String channel, S user)
+    @Override
+    public <S extends Serializable> List<String> getChannelTokens(String channel, S user)
     {
         List<WebsocketChannel> list = channelTokenListMap.get(channel);
         if (list != null && !list.isEmpty())
@@ -139,8 +130,8 @@ public class WebsocketViewBean implements Serializable
     @PreDestroy
     public void destroy()
     {
-        WebsocketSessionBean sessionHandler = CDIUtils.get(CDI.current().getBeanManager(), 
-                WebsocketSessionBean.class);
+        WebsocketTokenManagerSession sessionHandler = CDIUtils.get(CDI.current().getBeanManager(), 
+                WebsocketTokenManagerSession.class);
         if (sessionHandler != null)
         {
             for (String token : tokenList.keySet())
diff --git a/impl/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension b/impl/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
index c3859db94..982649d00 100644
--- a/impl/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
+++ b/impl/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
@@ -7,6 +7,6 @@ org.apache.myfaces.cdi.model.FacesDataModelExtension
 org.apache.myfaces.cdi.view.ViewScopeExtension
 org.apache.myfaces.cdi.view.ViewTransientScopeExtension
 org.apache.myfaces.config.annotation.CdiAnnotationProviderExtension
-org.apache.myfaces.push.cdi.PushContextCDIExtension
+org.apache.myfaces.push.cdi.PushCDIExtension
 org.apache.myfaces.flow.cdi.FlowScopeExtension
 org.apache.myfaces.cdi.clientwindow.ClientWindowScopeExtension
\ No newline at end of file