[jboss-cvs] JBossAS SVN: r107425 - branches/infinispan-int/tomcat/src/main/java/org/jboss/web/tomcat/service/sso.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Aug 4 22:42:00 EDT 2010


Author: pferraro
Date: 2010-08-04 22:42:00 -0400 (Wed, 04 Aug 2010)
New Revision: 107425

Modified:
   branches/infinispan-int/tomcat/src/main/java/org/jboss/web/tomcat/service/sso/ClusteredSingleSignOn.java
Log:
Remove clusterManagerClass default value.  Configure via service loader if no clusterManagerClass was specified.

Modified: branches/infinispan-int/tomcat/src/main/java/org/jboss/web/tomcat/service/sso/ClusteredSingleSignOn.java
===================================================================
--- branches/infinispan-int/tomcat/src/main/java/org/jboss/web/tomcat/service/sso/ClusteredSingleSignOn.java	2010-08-05 02:39:37 UTC (rev 107424)
+++ branches/infinispan-int/tomcat/src/main/java/org/jboss/web/tomcat/service/sso/ClusteredSingleSignOn.java	2010-08-05 02:42:00 UTC (rev 107425)
@@ -22,6 +22,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.ServiceLoader;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -82,7 +83,6 @@
    /** The default JBoss Cache to use for storing SSO entries */
    public static final String DEFAULT_CACHE_NAME = "clustered-sso";
    public static final String LEGACY_CACHE_NAME = "jboss.cache:service=TomcatClusteringCache";
-   public static final String DEFAULT_CLUSTER_MANAGER_CLASS = "org.jboss.web.tomcat.service.sso.jbc.JBossCacheSSOClusterManager";
    
    // Override the superclass value
    static
@@ -98,7 +98,7 @@
     * {@link SSOClusterManager SSOClusterManager} that will be used
     * to manage SSOs across a cluster.
     */
-   private String clusterManagerClass = DEFAULT_CLUSTER_MANAGER_CLASS;
+   private String clusterManagerClass;
 
    /**
     * Object used to provide cross-cluster support for single sign on.
@@ -138,7 +138,7 @@
     * Map<String, Long> containing the ids of SSOs with no active sessions
     * and the time at which they entered that state
     */
-   private Map emptySSOs = new ConcurrentHashMap();
+   private Map<String, Long> emptySSOs = new ConcurrentHashMap<String, Long>();
    
    /** Used for sync locking of processExpires runs */
    private final Object mutex = new Object();
@@ -415,7 +415,7 @@
       }
 
       // Attempt to create an SSOClusterManager
-      createClusterManager(getClusterManagerClass());
+      createClusterManager(this.clusterManagerClass);
 
       lifecycle.fireLifecycleEvent(START_EVENT, null);
       started = true;
@@ -1270,7 +1270,7 @@
          {
             ClassLoader tcl =
                Thread.currentThread().getContextClassLoader();
-            Class clazz = tcl.loadClass(className);
+            Class<?> clazz = tcl.loadClass(className);
             mgr = (SSOClusterManager) clazz.newInstance();
             mgr.setSSOLocalManager(this);
             ssoClusterManager = mgr;
@@ -1282,23 +1282,35 @@
                "SSOClusterManager using " +
                className, t);
          }
+      }
+      else
+      {
+         Iterator<SSOClusterManager> managers = ServiceLoader.load(SSOClusterManager.class).iterator();
+         
+         if (!managers.hasNext())
+         {
+            throw new LifecycleException("No service provider found: " + SSOClusterManager.class.getName());
+         }
 
-         if (started)
+         this.ssoClusterManager = managers.next();
+         this.clusterManagerClass = this.ssoClusterManager.getClass().getName();
+      }
+
+      if (started)
+      {
+         try
          {
-            try
-            {
-               ssoClusterManager.start();
-            }
-            catch (LifecycleException e)
-            {
-               throw e;
-            }
-            catch (Exception e)
-            {
-               throw new LifecycleException("Caught exception stopping " + 
-                     ssoClusterManager.getClass().getSimpleName(), e);
-            }
+            ssoClusterManager.start();
          }
+         catch (LifecycleException e)
+         {
+            throw e;
+         }
+         catch (Exception e)
+         {
+            throw new LifecycleException("Caught exception stopping " + 
+                  ssoClusterManager.getClass().getSimpleName(), e);
+         }
       }
    }
    



More information about the jboss-cvs-commits mailing list