[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