[jboss-cvs] JBossAS SVN: r96758 - in projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins: tracker and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 23 16:17:05 EST 2009


Author: alesj
Date: 2009-11-23 16:17:04 -0500 (Mon, 23 Nov 2009)
New Revision: 96758

Added:
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java
Modified:
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java
Log:
No need to boolean flag.

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java	2009-11-23 20:29:30 UTC (rev 96757)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractControllerContext.java	2009-11-23 21:17:04 UTC (rev 96758)
@@ -38,6 +38,7 @@
 import org.jboss.dependency.spi.ScopeInfo;
 import org.jboss.dependency.spi.tracker.ContextTracker;
 import org.jboss.dependency.spi.tracker.ContextTracking;
+import static org.jboss.dependency.plugins.tracker.TrackerConstants.FLAG;
 import org.jboss.metadata.spi.MetaData;
 import org.jboss.metadata.spi.scope.CommonLevels;
 import org.jboss.metadata.spi.scope.CommonLevelsUtil;
@@ -91,11 +92,8 @@
    private Throwable error;
 
    /** The context tracker */
-   private ContextTracker tracker;
+   private volatile ContextTracker tracker;
 
-   /** the in use flag */
-   private boolean inUse;
-
    /**
     * Create a new AbstractControllerContext.
     * 
@@ -367,11 +365,20 @@
 
    public ContextTracker getContextTracker()
    {
-      if (tracker == null && inUse == false)
+      if (tracker == null || tracker == FLAG)
       {
-         inUse = true; // else we can go into loop
-         try
+         synchronized (FLAG)
          {
+            // since we got through, we must be the same caller
+            if (tracker == FLAG)
+               return null;
+
+            // we waited, got through, but it's now changed
+            if (tracker != null && tracker != FLAG)
+               return tracker;
+
+            tracker = FLAG; // mark that we're initializing
+
             MetaData metaData = scopeInfo.getMetaData();
             if (metaData != null)
             {
@@ -390,10 +397,6 @@
                tracker = ct; // should we care if it's still null?
             }
          }
-         finally
-         {
-            inUse = false;
-         }
       }
       return tracker;
    }

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java	2009-11-23 20:29:30 UTC (rev 96757)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextTracker.java	2009-11-23 21:17:04 UTC (rev 96758)
@@ -23,13 +23,12 @@
 
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.HashSet;
 
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.tracker.ContextTracker;
-import org.jboss.dependency.plugins.AbstractControllerContext;
 
 /**
  * Abstract context tracker
@@ -38,9 +37,6 @@
  */
 public class AbstractContextTracker extends AbstractLockHolder implements ContextTracker
 {
-   /** The dummy */
-   private static final ControllerContext DUMMY = new AbstractControllerContext("DUMMY", null);
-
    /** The mapping */
    private Map<ControllerContext, Map<ControllerContext, Integer>> map = new HashMap<ControllerContext, Map<ControllerContext, Integer>>();
 
@@ -69,7 +65,7 @@
 
    public void addUsing(ControllerContext used)
    {
-      addInUseContext(DUMMY, used);
+      addInUseContext(TrackerConstants.DUMMY, used);
    }
 
    public void removeInUseContext(ControllerContext target, ControllerContext used)
@@ -102,7 +98,7 @@
 
    public void removeUsing(ControllerContext used)
    {
-      removeInUseContext(DUMMY, used);
+      removeInUseContext(TrackerConstants.DUMMY, used);
    }
 
    public boolean isContextInUse(ControllerContext used)
@@ -128,7 +124,7 @@
          {
             Set<ControllerContext> contexts = counter.keySet();
             Set<ControllerContext> copy = new HashSet<ControllerContext>(contexts);
-            copy.remove(DUMMY);
+            copy.remove(TrackerConstants.DUMMY);
             return copy;
          }
          else

Added: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java	                        (rev 0)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/TrackerConstants.java	2009-11-23 21:17:04 UTC (rev 96758)
@@ -0,0 +1,180 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.dependency.plugins.tracker;
+
+import java.util.Set;
+
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.dependency.spi.ErrorHandlingMode;
+import org.jboss.dependency.spi.ScopeInfo;
+import org.jboss.dependency.spi.tracker.ContextTracker;
+import org.jboss.util.JBossStringBuilder;
+
+/**
+ * Tracker constants.
+ * Externalized due to cycle dependency.
+ *
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public abstract class TrackerConstants
+{
+   /** The context dummy */
+   static final ControllerContext DUMMY = new ControllerContext()
+   {
+      public Object getName()
+      {
+         return null;
+      }
+
+      public Set<Object> getAliases()
+      {
+         return null;
+      }
+
+      public DependencyInfo getDependencyInfo()
+      {
+         return null;
+      }
+
+      public ScopeInfo getScopeInfo()
+      {
+         return null;
+      }
+
+      public Object getTarget()
+      {
+         return null;
+      }
+
+      public Controller getController()
+      {
+         return null;
+      }
+
+      public void setController(Controller controller)
+      {
+      }
+
+      public void install(ControllerState fromState, ControllerState toState) throws Throwable
+      {
+      }
+
+      public void uninstall(ControllerState fromState, ControllerState toState)
+      {
+      }
+
+      public ControllerState getState()
+      {
+         return null;
+      }
+
+      public void setState(ControllerState state)
+      {
+      }
+
+      public ControllerState getRequiredState()
+      {
+         return null;
+      }
+
+      public void setRequiredState(ControllerState state)
+      {
+      }
+
+      public ControllerMode getMode()
+      {
+         return null;
+      }
+
+      public void setMode(ControllerMode mode)
+      {
+      }
+
+      public ErrorHandlingMode getErrorHandlingMode()
+      {
+         return null;
+      }
+
+      public Throwable getError()
+      {
+         return null;
+      }
+
+      public void setError(Throwable error)
+      {
+      }
+
+      @SuppressWarnings({"CloneDoesntCallSuperClone"})
+      public Object clone()
+      {
+         return null;
+      }
+
+      public String toShortString()
+      {
+         return "DUMMY";
+      }
+
+      public void toShortString(JBossStringBuilder buffer)
+      {
+      }
+   };
+
+   /** Dummy anchor tracker */
+   public static final ContextTracker FLAG = new ContextTracker()
+   {
+      public void addInUseContext(ControllerContext target, ControllerContext used)
+      {
+      }
+
+      public void addUsing(ControllerContext used)
+      {
+      }
+
+      public void removeInUseContext(ControllerContext target, ControllerContext used)
+      {
+      }
+
+      public void removeUsing(ControllerContext used)
+      {
+      }
+
+      public boolean isContextInUse(ControllerContext used)
+      {
+         return false;
+      }
+
+      public Set<ControllerContext> getUsingContexts(ControllerContext used)
+      {
+         return null;
+      }
+
+      public Set<ControllerContext> getUsedContexts()
+      {
+         return null;
+      }
+   };
+}




More information about the jboss-cvs-commits mailing list