[jboss-cvs] JBossAS SVN: r87673 - branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 22 09:33:48 EDT 2009


Author: emuckenhuber
Date: 2009-04-22 09:33:48 -0400 (Wed, 22 Apr 2009)
New Revision: 87673

Modified:
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/DelegatingComponentDispatcherImpl.java
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/KernelBusRuntimeComponentDispatcher.java
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagedOperationProxyFactory.java
   branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
Log:
fix managed operation invocation

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/DelegatingComponentDispatcherImpl.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/DelegatingComponentDispatcherImpl.java	2009-04-22 13:33:29 UTC (rev 87672)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/DelegatingComponentDispatcherImpl.java	2009-04-22 13:33:48 UTC (rev 87673)
@@ -21,10 +21,6 @@
  */
 package org.jboss.profileservice.management;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.WeakHashMap;
-
 import org.jboss.deployers.spi.management.DelegatingComponentDispatcher;
 import org.jboss.deployers.spi.management.RuntimeComponentDispatcher;
 import org.jboss.managed.api.ManagedOperation;
@@ -42,37 +38,31 @@
 public class DelegatingComponentDispatcherImpl
    implements DelegatingComponentDispatcher
 {
-   private static Map<Long, ManagedProperty> properties = new HashMap<Long, ManagedProperty>();
-   private static Map<Long, ManagedOperation> operations = new HashMap<Long, ManagedOperation>();
-   
+  
    private RuntimeComponentDispatcher dispatcher;
+   private ProxyRegistry registry;
 
-   public static void addManagedProperty(Long id, ManagedProperty mp)
+   public DelegatingComponentDispatcherImpl(ProxyRegistry registry, RuntimeComponentDispatcher dispatcher)
    {
-      properties.put(id, mp);
-   }
-   public static void addManagedOperation(Long id, ManagedOperation op)
-   {
-      operations.put(id, op);
-   }
-
-   public DelegatingComponentDispatcherImpl(RuntimeComponentDispatcher dispatcher)
-   {
+      this.registry = registry;
       this.dispatcher = dispatcher;
    }
 
    public MetaValue get(Long propID, Object componentName, String propertyName)
    {
-      ManagedProperty mp = properties.get(propID);
+      ManagedProperty mp = this.registry.getManagedProperty(propID);
       AbstractRuntimeComponentDispatcher.setActiveProperty(mp);
       return dispatcher.get(componentName, propertyName);
    }
 
    public MetaValue invoke(Long opID, Object componentName, String methodName, MetaValue... param)
    {
-      ManagedOperation op = operations.get(opID);
+      ManagedOperation op = this.registry.getManagedOperation(opID);
       AbstractRuntimeComponentDispatcher.setActiveOperation(op);
 
+      if(param == null)
+         param = new MetaValue[0];
+      
       MetaValue result = null;
       if (componentName != null)
       {
@@ -81,4 +71,12 @@
       return result; 
    }
 
+   public static interface ProxyRegistry
+   {
+    
+      ManagedProperty getManagedProperty(Long propID);
+      ManagedOperation getManagedOperation(Long opID);
+
+   }
+   
 }

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/KernelBusRuntimeComponentDispatcher.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/KernelBusRuntimeComponentDispatcher.java	2009-04-22 13:33:29 UTC (rev 87672)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/KernelBusRuntimeComponentDispatcher.java	2009-04-22 13:33:48 UTC (rev 87673)
@@ -135,23 +135,38 @@
       try
       {
          ManagedOperation op = AbstractRuntimeComponentDispatcher.getActiveOperation();
-         ManagedParameter[] params = op.getParameters();
-         String[] sig;
+         String[] sig = new String[param.length];
          Object[] args = new Object[param.length];
-         for(int i=0; i < param.length; i++)
+         if(op != null)
          {
-            if(params != null && params.length < i)
+            ManagedParameter[] params = op.getParameters();
+            if(params != null &&  params.length == param.length)
             {
-               ManagedParameter mp = params[i];
-               MetaMapper mapper = mp.getTransientAttachment(MetaMapper.class);
-               if(mapper != null)
-                  args[i] = mapper.unwrapMetaValue(param[i]);
+               for(int i=0; i < param.length; i++)
+               {
+                  ManagedParameter mp = params[i];
+                  MetaMapper<?> mapper = mp.getTransientAttachment(MetaMapper.class);
+                  if(mapper != null)
+                     args[i] = mapper.unwrapMetaValue(param[i]);
+                  else
+                     args[i] = unwrap(param[i]);
+                  //
+                  sig[i] = mp.getMetaType().getTypeName();
+               }               
             }
             else
-               args[i] = unwrap(param[i]);
+            {
+               args = toArguments(param);
+               sig = toSignature(param);
+            }
          }
-
-         Object value = bus.invoke(componentName, methodName, toArguments(param), toSignature(param));
+         else
+         {
+            args = toArguments(param);
+            sig = toSignature(param);
+         }
+         // Invoke
+         Object value = bus.invoke(componentName, methodName, args, sig);
          MetaValue mvalue = null;
          if (value != null)
          {

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagedOperationProxyFactory.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagedOperationProxyFactory.java	2009-04-22 13:33:29 UTC (rev 87672)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagedOperationProxyFactory.java	2009-04-22 13:33:48 UTC (rev 87673)
@@ -24,7 +24,9 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.jboss.aop.Dispatcher;
@@ -36,12 +38,8 @@
 import org.jboss.deployers.spi.management.DelegatingComponentDispatcher;
 import org.jboss.deployers.spi.management.RuntimeComponentDispatcher;
 import org.jboss.managed.api.ManagedOperation;
-import org.jboss.managed.api.ManagedParameter;
 import org.jboss.managed.api.ManagedProperty;
-import org.jboss.metatype.api.types.MetaType;
-import org.jboss.metatype.api.values.MetaValue;
-import org.jboss.metatype.api.values.MetaValueFactory;
-import org.jboss.metatype.spi.values.MetaMapper;
+import org.jboss.profileservice.management.DelegatingComponentDispatcherImpl.ProxyRegistry;
 import org.jboss.remoting.InvokerLocator;
 
 /**
@@ -51,15 +49,16 @@
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */
-public class ManagedOperationProxyFactory implements Serializable
+public class ManagedOperationProxyFactory implements Serializable, ProxyRegistry
 {
    /** The serialVersionUID */
    private static final long serialVersionUID = 1343224268002757169L;
    private AtomicLong operationID = new AtomicLong(0);
    private AtomicLong propertyID = new AtomicLong(0);
    private transient RuntimeComponentDispatcher dispatcher;
-   private transient MetaValueFactory metaValueFactory = MetaValueFactory.getInstance();
    private transient InvokerLocator locator;
+   private transient Map<Long, ManagedProperty> properties = new ConcurrentHashMap<Long, ManagedProperty>();
+   private transient Map<Long, ManagedOperation> operations = new ConcurrentHashMap<Long, ManagedOperation>();
 
    /** The runtime component dispatcher proxy. */
    private DelegatingComponentDispatcher dispatcherProxy;
@@ -97,6 +96,28 @@
       
       this.dispatcherProxy = createDispatcherProxy();
    }
+   
+   public synchronized void clear()
+   {
+      this.properties.clear();
+      this.operations.clear();
+   }
+   
+   public ManagedOperation getManagedOperation(Long opID)
+   {
+      ManagedOperation op = this.operations.get(opID);
+      if(op == null)
+         throw new IllegalStateException("operation not found for id " + opID);
+      return op;
+   }
+   
+   public ManagedProperty getManagedProperty(Long propID)
+   {
+      ManagedProperty prop = this.properties.get(propID);
+      if(prop == null)
+         throw new IllegalStateException("property not found for id " + propID);
+      return prop;
+   }
 
    /**
     * Create a delegating managed property. This is used for ViewUse.STATISTIC properties,
@@ -110,7 +131,7 @@
    {
       long propID = propertyID.incrementAndGet();
       ManagedPropertyDelegate proxy = new ManagedPropertyDelegate(propID, delegate, componentName, dispatcherProxy);
-      DelegatingComponentDispatcherImpl.addManagedProperty(propID, proxy);
+      this.properties.put(propID, proxy);
       return proxy;
    }
 
@@ -131,7 +152,7 @@
       {
          long opID = operationID.incrementAndGet();
          ManagedOperationDelegate proxy = new ManagedOperationDelegate(opID, op, componentName, dispatcherProxy);
-         DelegatingComponentDispatcherImpl.addManagedOperation(opID, proxy);
+         this.operations.put(opID, proxy);
          opProxies.add(proxy);
       }
       return opProxies;
@@ -154,10 +175,10 @@
       String dispatchName = "ProfileService.DelegatingComponentDispatcher";
       Class<?>[] ifaces = {DelegatingComponentDispatcher.class};
       
-      DelegatingComponentDispatcher delegate = new DelegatingComponentDispatcherImpl(this.dispatcher);
+      DelegatingComponentDispatcher delegate = new DelegatingComponentDispatcherImpl(this, this.dispatcher);
       Dispatcher.singleton.registerTarget(dispatchName, delegate);
       return (DelegatingComponentDispatcher) Remoting.createRemoteProxy(dispatchName,
             getClass().getClassLoader(), ifaces, locator, interceptors, "ProfileService");
    }
-   
+
 }

Modified: branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java
===================================================================
--- branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2009-04-22 13:33:29 UTC (rev 87672)
+++ branches/Branch_5_x/profileservice/src/main/org/jboss/profileservice/management/ManagementViewImpl.java	2009-04-22 13:33:48 UTC (rev 87673)
@@ -22,7 +22,6 @@
 package org.jboss.profileservice.management;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -72,16 +71,13 @@
 import org.jboss.managed.plugins.jmx.ManagementFactoryUtils;
 import org.jboss.metatype.api.types.ArrayMetaType;
 import org.jboss.metatype.api.types.CollectionMetaType;
-import org.jboss.metatype.api.types.GenericMetaType;
 import org.jboss.metatype.api.types.MetaType;
 import org.jboss.metatype.api.values.ArrayValue;
 import org.jboss.metatype.api.values.CollectionValue;
 import org.jboss.metatype.api.values.GenericValue;
-import org.jboss.metatype.api.values.GenericValueSupport;
 import org.jboss.metatype.api.values.MetaValue;
 import org.jboss.metatype.api.values.MetaValueFactory;
 import org.jboss.metatype.api.values.SimpleValue;
-import org.jboss.metatype.spi.values.MetaMapper;
 import org.jboss.profileservice.spi.NoSuchDeploymentException;
 import org.jboss.profileservice.spi.NoSuchProfileException;
 import org.jboss.profileservice.spi.Profile;
@@ -292,6 +288,9 @@
       this.unresolvedRefs.clear();
       this.lastModified.clear();
       this.rootDeployments.clear();
+      // Cleanup delegate operations
+      this.proxyFactory.clear();
+      
    }
    
    protected void loadProfiles(boolean trace)
@@ -1199,21 +1198,7 @@
          
          if (componentName != null && policy.equals(ActivationPolicy.IMMEDIATE))
          {
-            // FIXME the MetaMapper unwrapping should be handled by the RuntimeDispatcher
-            MetaMapper mapper = ctxProp.getTransientAttachment(MetaMapper.class);
-            if(mapper != null)
-            {
-               Object o = mapper.unwrapMetaValue(metaValue);
-               GenericMetaType generic = new GenericMetaType(metaValue.getMetaType().getTypeName(), "generic value wrapper");
-               if(o == null)
-               {
-                  metaValue = new GenericValueSupport(generic, null);
-               }
-               else if(o instanceof Serializable)
-               {
-                  metaValue = new GenericValueSupport(generic, (Serializable) o);
-               }
-            }
+            AbstractRuntimeComponentDispatcher.setActiveProperty(ctxProp);
             dispatcher.set(componentName, ctxProp.getName(), metaValue);
          }
       }




More information about the jboss-cvs-commits mailing list