[jboss-cvs] JBossAS SVN: r86940 - in branches/Branch_5_x: server/src/etc/conf/default/bootstrap and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Apr 7 22:04:46 EDT 2009


Author: scott.stark at jboss.org
Date: 2009-04-07 22:04:46 -0400 (Tue, 07 Apr 2009)
New Revision: 86940

Added:
   branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/StringObjectNameMetaMapper.java
Modified:
   branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/QueueServiceMO.java
   branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/TopicServiceMO.java
   branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml
   branches/Branch_5_x/system-jmx/src/main/org/jboss/system/ServiceConfigurator.java
   branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/managed/ServiceMetaDataICF.java
   branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JmsDestinationUnitTestCase.java
Log:
JBAS-6688, Update handling of object name attribute values

Modified: branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/QueueServiceMO.java
===================================================================
--- branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/QueueServiceMO.java	2009-04-08 01:54:18 UTC (rev 86939)
+++ branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/QueueServiceMO.java	2009-04-08 02:04:46 UTC (rev 86940)
@@ -38,7 +38,6 @@
 import org.jboss.managed.api.annotation.ManagementProperty;
 import org.jboss.managed.api.annotation.ViewUse;
 import org.jboss.metatype.api.annotations.MetaMapping;
-import org.jboss.metatype.plugins.values.mappers.StringObjectNameMetaMapper;
 import org.w3c.dom.Element;
 
 /**

Added: branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/StringObjectNameMetaMapper.java
===================================================================
--- branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/StringObjectNameMetaMapper.java	                        (rev 0)
+++ branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/StringObjectNameMetaMapper.java	2009-04-08 02:04:46 UTC (rev 86940)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt 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.jms.server.destination;
+
+import java.lang.reflect.Type;
+
+import javax.management.ObjectName;
+
+import org.jboss.metatype.api.types.MetaType;
+import org.jboss.metatype.api.types.SimpleMetaType;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.SimpleValue;
+import org.jboss.metatype.api.values.SimpleValueSupport;
+import org.jboss.metatype.spi.values.MetaMapper;
+
+/**
+ * A mapper for String forms of javax.management.ObjectName values to a
+ * SimpleMetaType.STRING/SimpleValue
+ * 
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 81572 $
+ */
+public class StringObjectNameMetaMapper extends MetaMapper<ObjectName>
+{
+
+   @Override
+   public MetaType getMetaType()
+   {
+      return SimpleMetaType.STRING;
+   }
+   @Override
+   public Type mapToType()
+   {
+      return ObjectName.class;
+   }
+
+   @Override
+   public MetaValue createMetaValue(MetaType metaType, ObjectName object)
+   {
+      if(object == null)
+         return null;
+      String str = object.getCanonicalName();
+      return SimpleValueSupport.wrap(str);
+   }
+
+   @Override
+   public ObjectName unwrapMetaValue(MetaValue metaValue)
+   {
+      SimpleValue sv = (SimpleValue) metaValue;
+      String str = sv.getValue().toString();
+      try
+      {
+         return new ObjectName(str);
+      }
+      catch(Exception e)
+      {
+         throw new IllegalArgumentException(e);
+      }
+   }
+
+}

Modified: branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/TopicServiceMO.java
===================================================================
--- branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/TopicServiceMO.java	2009-04-08 01:54:18 UTC (rev 86939)
+++ branches/Branch_5_x/messaging/src/main/org/jboss/jms/server/destination/TopicServiceMO.java	2009-04-08 02:04:46 UTC (rev 86940)
@@ -36,7 +36,6 @@
 import org.jboss.managed.api.annotation.ManagementProperty;
 import org.jboss.managed.api.annotation.ViewUse;
 import org.jboss.metatype.api.annotations.MetaMapping;
-import org.jboss.metatype.plugins.values.mappers.StringObjectNameMetaMapper;
 import org.w3c.dom.Element;
 
 /**

Modified: branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml
===================================================================
--- branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml	2009-04-08 01:54:18 UTC (rev 86939)
+++ branches/Branch_5_x/server/src/etc/conf/default/bootstrap/deployers.xml	2009-04-08 02:04:46 UTC (rev 86940)
@@ -226,6 +226,7 @@
    <!-- JMX Deployment -->
    <bean name="ServiceMetaDataICF" class="org.jboss.system.deployers.managed.ServiceMetaDataICF">
       <property name="mbeanServer"><inject bean="JMXKernel" property="mbeanServer"/></property>
+      <property name="controller"><inject bean="JMXKernel" property="serviceController"/></property>
    </bean>
    <bean name="SARDeployer" class="org.jboss.system.deployers.SARDeployer"/>
    <bean name="ServiceClassLoaderDeployer" class="org.jboss.system.deployers.ServiceClassLoaderDeployer"/>

Modified: branches/Branch_5_x/system-jmx/src/main/org/jboss/system/ServiceConfigurator.java
===================================================================
--- branches/Branch_5_x/system-jmx/src/main/org/jboss/system/ServiceConfigurator.java	2009-04-08 01:54:18 UTC (rev 86939)
+++ branches/Branch_5_x/system-jmx/src/main/org/jboss/system/ServiceConfigurator.java	2009-04-08 02:04:46 UTC (rev 86940)
@@ -198,7 +198,7 @@
     * @return a map of attribute name to attribute info
     * @throws Exception for any error
     */
-   private static HashMap<String, MBeanAttributeInfo> getAttributeMap(MBeanServer server, ObjectName objectName) throws Exception
+   public static HashMap<String, MBeanAttributeInfo> getAttributeMap(MBeanServer server, ObjectName objectName) throws Exception
    {
       MBeanInfo info;
       try

Modified: branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/managed/ServiceMetaDataICF.java
===================================================================
--- branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/managed/ServiceMetaDataICF.java	2009-04-08 01:54:18 UTC (rev 86939)
+++ branches/Branch_5_x/system-jmx/src/main/org/jboss/system/deployers/managed/ServiceMetaDataICF.java	2009-04-08 02:04:46 UTC (rev 86940)
@@ -22,10 +22,12 @@
 package org.jboss.system.deployers.managed;
 
 import java.io.Serializable;
+import java.util.HashMap;
 import java.util.List;
 
 import javax.management.AttributeNotFoundException;
 import javax.management.InstanceNotFoundException;
+import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -39,12 +41,15 @@
 import org.jboss.metatype.api.values.MetaValue;
 import org.jboss.metatype.api.values.MetaValueFactory;
 import org.jboss.metatype.spi.values.MetaMapper;
+import org.jboss.system.ServiceConfigurator;
+import org.jboss.system.ServiceController;
 import org.jboss.system.metadata.ServiceAnnotationMetaData;
 import org.jboss.system.metadata.ServiceAttributeMetaData;
 import org.jboss.system.metadata.ServiceDependencyValueMetaData;
 import org.jboss.system.metadata.ServiceElementValueMetaData;
 import org.jboss.system.metadata.ServiceMetaData;
 import org.jboss.system.metadata.ServiceTextValueMetaData;
+import org.jboss.system.metadata.ServiceValueContext;
 import org.jboss.system.metadata.ServiceValueMetaData;
 import org.w3c.dom.Element;
 
@@ -60,9 +65,11 @@
    private static final Logger log = Logger.getLogger(ServiceMetaDataICF.class);
 
    private static final String MOCLASS_ANNOTATION = '@' + ManagementObjectClass.class.getName();
-   
+   //private static final ThreadLocal<> attributeMap;
+
    private MBeanServer mbeanServer;
-   
+   private ServiceController controller;
+
    /** The meta value factory */
    private MetaValueFactory metaValueFactory = MetaValueFactory.getInstance(); 
 
@@ -76,6 +83,15 @@
       this.mbeanServer = mbeanServer;
    }
 
+   public ServiceController getController()
+   {
+      return controller;
+   }
+   public void setController(ServiceController controller)
+   {
+      this.controller = controller;
+   }
+
    public Class<ServiceMetaData> getType()
    {
       return ServiceMetaData.class;
@@ -133,6 +149,9 @@
       ClassLoader prevLoader = SecurityActions.getContextClassLoader();
       Object value = null;
       MetaValue mvalue = null;
+      ObjectName mbean = md.getObjectName();
+      String attrName = null;
+
       try
       {
          ClassLoader loader = getServiceMetaDataCL(md);
@@ -146,13 +165,13 @@
             if (amd.getName().equalsIgnoreCase(name))
             {
                value = amd.getValue();
+               attrName = amd.getName();
                break;
             }
          }
          // If the value is null, look to mbean for the value
          if (value == null)
          {
-            ObjectName mbean = md.getObjectName();
             try
             {
                if(getMbeanServer() != null)
@@ -182,27 +201,40 @@
          }
    
          // Unwrap the ServiceValueMetaData types
-         if (value instanceof ServiceTextValueMetaData)
+         try
          {
-            ServiceTextValueMetaData text = (ServiceTextValueMetaData) value;
-            value = text.getText();
+            if (value instanceof ServiceTextValueMetaData)
+            {
+               ServiceTextValueMetaData text = (ServiceTextValueMetaData) value;
+               // TODO: cache this somehow
+               HashMap<String, MBeanAttributeInfo> attrs = ServiceConfigurator.getAttributeMap(mbeanServer, mbean);
+               MBeanAttributeInfo mbi = attrs.get(attrName);
+               ServiceValueContext svc = new ServiceValueContext(mbeanServer, controller, mbi, loader);
+               value = text.getValue(svc);
+            }
+            else if (value instanceof ServiceDependencyValueMetaData)
+            {
+               ServiceDependencyValueMetaData depends = (ServiceDependencyValueMetaData) value;
+               value = depends.getDependency();
+            }
+            else if (value instanceof ServiceElementValueMetaData)
+            {
+               value = ((ServiceElementValueMetaData)value).getElement();
+            }
+            // TODO: unwrap other ServiceValueMetaData types
          }
-         else if (value instanceof ServiceDependencyValueMetaData)
+         catch(Exception e)
          {
-            ServiceDependencyValueMetaData depends = (ServiceDependencyValueMetaData) value;
-            value = depends.getDependency();
+            log.debug("Failed to get value from mbean for: "+name, e);
          }
-         else if (value instanceof ServiceElementValueMetaData)
-         {
-            value = ((ServiceElementValueMetaData)value).getElement();
-         }
-         // TODO: unwrap other ServiceValueMetaData types
    
          PropertyInfo propertyInfo = beanInfo.getProperty(name);
          MetaMapper metaMapper = property.getTransientAttachment(MetaMapper.class);
          try
          {
-            if(metaMapper != null)
+            Class<?> valueClass = value.getClass();
+            Class<?> mapToType = metaMapper != null ? (Class<?>) metaMapper.mapToType() : null;
+            if(metaMapper != null && valueClass.isAssignableFrom(mapToType))
             {
                mvalue = metaMapper.createMetaValue(property.getMetaType(), value);
             }

Modified: branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JmsDestinationUnitTestCase.java
===================================================================
--- branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JmsDestinationUnitTestCase.java	2009-04-08 01:54:18 UTC (rev 86939)
+++ branches/Branch_5_x/testsuite/src/main/org/jboss/test/profileservice/test/JmsDestinationUnitTestCase.java	2009-04-08 02:04:46 UTC (rev 86940)
@@ -25,7 +25,18 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.Topic;
+import javax.jms.TopicConnection;
+import javax.jms.TopicConnectionFactory;
+import javax.jms.TopicSession;
+import javax.naming.InitialContext;
+
 import javax.jms.Queue;
 import javax.jms.QueueConnection;
 import javax.jms.QueueConnectionFactory;
@@ -112,6 +123,8 @@
       suite.addTest(new JmsDestinationUnitTestCase("testRemoveTopic"));
       suite.addTest(new JmsDestinationUnitTestCase("testCreateSecureQueue"));
       suite.addTest(new JmsDestinationUnitTestCase("testRemoveSecureQueue"));
+      suite.addTest(new JmsDestinationUnitTestCase("testCreateQueueWithNullDLQ"));
+      suite.addTest(new JmsDestinationUnitTestCase("testRemoveQueueWithNullDLQ"));
 
       return suite;
    }  
@@ -173,12 +186,29 @@
       String jndiName = getName();
       propValues.put("JNDIName", SimpleValueSupport.wrap(jndiName));
       propValues.put("downCacheSize", SimpleValueSupport.wrap(1999));
-      createComponentTest("QueueTemplate", propValues, getName(), QueueType, jndiName);
-      ManagedComponent queue = activeView.getComponent("testCreateQueue", QueueType);
+      propValues.put("DLQ", SimpleValueSupport.wrap("jboss.messaging.destination:name=DLQ,service=Queue"));
+      propValues.put("expiryQueue", SimpleValueSupport.wrap("jboss.messaging.destination:name=ExpiryQueue,service=Queue"));
+      
+      ComponentType type = KnownComponentTypes.JMSDestination.Queue.getType();
+      createComponentTest("QueueTemplate", propValues, getName(), type, jndiName);
+      ManagedComponent queue = activeView.getComponent("testCreateQueue", type);
       assertNotNull(queue);
       assertEquals("testCreateQueue", queue.getName());
       log.info(queue.getProperties().keySet());
       assertEquals("downCacheSize", queue.getProperty("downCacheSize").getValue(), new SimpleValueSupport(SimpleMetaType.INTEGER_PRIMITIVE, 1999));
+
+      ManagedProperty serverPeer = queue.getProperty("serverPeer");
+      assertNotNull(serverPeer);
+      MetaType serverPeerType = serverPeer.getMetaType();
+      assertEquals(SimpleMetaType.STRING, serverPeerType);
+      ManagedProperty dlq = queue.getProperty("DLQ");
+      assertNotNull(dlq);
+      MetaType dlqType = dlq.getMetaType();
+      assertEquals(SimpleMetaType.STRING, dlqType);
+      ManagedProperty expiryQueue = queue.getProperty("expiryQueue");
+      assertNotNull(expiryQueue);
+      MetaType expiryQueueType = serverPeer.getMetaType();
+      assertEquals(SimpleMetaType.STRING, expiryQueueType);
    }
    
    public void testQueueMetrics() throws Exception
@@ -303,7 +333,55 @@
       ManagedComponent topic = activeView.getComponent("testCreateTopic", TopicType);
       assertNotNull(topic);
       assertEquals("testCreateTopic", topic.getName());
+
+      
    }
+
+   /**
+    * Run after testCreateTopic to validate the 
+    */
+   public void testTopicSubscriptions()
+      throws Exception
+   {
+      ComponentType type = KnownComponentTypes.JMSDestination.Topic.getType();
+      ManagementView managementView = getManagementView();
+      ManagedComponent topic = managementView.getComponent("testCreateTopic", type);
+      assertNotNull(topic);
+
+      // Subscribe to a topic and validate the subscription shows up in the list op
+      InitialContext ctx = super.getInitialContext();
+      Topic topicDest = (Topic) ctx.lookup("testCreateTopic");
+      TopicConnectionFactory tcf = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");
+      TopicConnection tc = tcf.createTopicConnection();
+      tc.start();
+      TopicSession ts = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
+      MessageConsumer mc = ts.createConsumer(topicDest);
+      MessageProducer mp = ts.createProducer(topicDest);
+      Message helloMsg = ts.createTextMessage("Hello from testCreateTopic");
+      mp.send(helloMsg);
+      log.info("Producer sent: "+helloMsg);
+      Message response = mc.receive();
+      log.info("Consumer saw: "+response);
+
+      // Check some stats
+      log.info(topic.getProperties().keySet());
+      ManagedProperty NonDurableSubscriptionsCount = topic.getProperty("nonDurableSubscriptionsCount");
+      assertNotNull(NonDurableSubscriptionsCount);
+      log.info(NonDurableSubscriptionsCount);
+      SimpleValue NonDurableSubscriptionsCountMV = (SimpleValue) NonDurableSubscriptionsCount.getValue();
+      log.info(NonDurableSubscriptionsCountMV);
+      assertTrue(NonDurableSubscriptionsCountMV.compareTo(SimpleValueSupport.wrap(0)) > 0);
+
+      Set<ManagedOperation> ops = topic.getOperations();
+      log.info("Topic ops: "+ops);
+      Map<String, ManagedOperation> opsByName = new HashMap<String, ManagedOperation>();
+      for(ManagedOperation op : ops)
+         opsByName.put(op.getName(), op);
+      ManagedOperation listNonDurableSubscriptions = opsByName.get("listNonDurableSubscriptions");
+      assertNotNull(listNonDurableSubscriptions);
+      MetaValue subscriptions = listNonDurableSubscriptions.invoke();
+      log.info(subscriptions);
+   }
    
 
    public void testTopicMetrics() throws Exception
@@ -396,7 +474,49 @@
              ManagedComponent queue = getManagementView().getComponent("testCreateSecureQueue", QueueType);
       assertNull("queue should be removed" + queue, queue);
    }
-   
+
+   /**
+    * Validate creating a queue with a null ObjectName value for the DLQ
+    * and Expiry
+    * @throws Exception
+    */
+   public void testCreateQueueWithNullDLQ() throws Exception
+   {
+      Map<String, MetaValue> propValues = new HashMap<String, MetaValue>();
+      String jndiName = getName();
+      propValues.put("JNDIName", SimpleValueSupport.wrap(jndiName));
+      propValues.put("downCacheSize", SimpleValueSupport.wrap(1999));
+      propValues.put("DLQ", SimpleValueSupport.wrap((String)null));
+      propValues.put("expiryQueue", null);
+      
+      ComponentType type = KnownComponentTypes.JMSDestination.Queue.getType();
+      createComponentTest("QueueTemplate", propValues, getName(), type, jndiName);
+      ManagedComponent queue = activeView.getComponent("testCreateQueueWithNullDLQ", type);
+      assertNotNull(queue);
+      assertEquals("testCreateQueueWithNullDLQ", queue.getName());
+      log.info(queue.getProperties().keySet());
+      assertEquals("downCacheSize", queue.getProperty("downCacheSize").getValue(), new SimpleValueSupport(SimpleMetaType.INTEGER_PRIMITIVE, 1999));
+
+      ManagedProperty serverPeer = queue.getProperty("serverPeer");
+      assertNotNull(serverPeer);
+      MetaType serverPeerType = serverPeer.getMetaType();
+      assertEquals(SimpleMetaType.STRING, serverPeerType);
+      ManagedProperty dlq = queue.getProperty("DLQ");
+      assertNotNull(dlq);
+      MetaType dlqType = dlq.getMetaType();
+      assertEquals(SimpleMetaType.STRING, dlqType);
+      ManagedProperty expiryQueue = queue.getProperty("expiryQueue");
+      assertNotNull(expiryQueue);
+      MetaType expiryQueueType = serverPeer.getMetaType();
+      assertEquals(SimpleMetaType.STRING, expiryQueueType);
+   }
+   public void testRemoveQueueWithNullDLQ() throws Exception
+   {
+      removeDeployment("testCreateQueueWithNullDLQ-service.xml");
+      ManagedComponent queue = getManagementView().getComponent("testCreateQueueWithNullDLQ", QueueType);
+      assertNull("queue should be removed" + queue, queue);
+   }
+
    protected ManagedOperation getOperation(ManagedComponent comp, String name, String[] signature)
    {
       assertNotNull(comp);




More information about the jboss-cvs-commits mailing list