You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ag...@apache.org on 2009/02/26 14:52:35 UTC

svn commit: r748154 [1/2] - in /qpid/trunk/qpid/java/management/client: ./ src/example/org/apache/qpid/management/example/ src/main/java/ src/main/java/org/apache/qpid/management/ src/main/java/org/apache/qpid/management/configuration/ src/main/java/or...

Author: agazzarini
Date: Thu Feb 26 13:52:33 2009
New Revision: 748154

URL: http://svn.apache.org/viewvc?rev=748154&view=rev
Log:
QPID-1579 : Instead of having one huge WSDM test case now WS-DM Adapter test is a suite that contains different test cases ( one for each interface)

Added:
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/BaseWsDmAdapterTestCase.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/GetMultipleResourcePropertiesTestCase.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/GetResourcePropertyDocumentTestCase.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/MetadataExchangeInterfaceTestCase.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/OperationInvocationInterfaceTestCase.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/SetResourcePropertiesTestCase.java
Removed:
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/AccessModeMapping.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/TypeMapping.java
Modified:
    qpid/trunk/qpid/java/management/client/   (props changed)
    qpid/trunk/qpid/java/management/client/build.xml
    qpid/trunk/qpid/java/management/client/src/example/org/apache/qpid/management/example/ConsumerAndProducerExample.java
    qpid/trunk/qpid/java/management/client/src/main/java/muse.xml
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java
    qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java
    qpid/trunk/qpid/java/management/client/src/main/java/wsdl/QManWsResource.wsdl
    qpid/trunk/qpid/java/management/client/src/main/java/wsdl/WS-ServiceGroupEntry-1_2.wsdl
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/TestConstants.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/configuration/ConfigurationTest.java
    qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/WsDmAdapterTest.java

Propchange: qpid/trunk/qpid/java/management/client/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb 26 13:52:33 2009
@@ -0,0 +1,2 @@
+compile
+release

Modified: qpid/trunk/qpid/java/management/client/build.xml
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/build.xml?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/build.xml (original)
+++ qpid/trunk/qpid/java/management/client/build.xml Thu Feb 26 13:52:33 2009
@@ -25,7 +25,6 @@
 	
 	<import file="../../module.xml"/>
 
-	<property name="war.name" value="qman.war"/>
     <property name="build.root" value="${module.build}"/>
     <property name="web.module" value="${module.build}${file.separator}wsdm-module"/>	
     <property name="web-inf.folder" value="${web.module}${file.separator}WEB-INF"/>
@@ -49,7 +48,6 @@
 	    </copy>
 	</target>
 
-	
 	<target name="libs-release" description="copy dependencies into module release">
 	    <copy todir="${module.release}${file.separator}" failonerror="true" verbose="true">
 	    	<fileset dir="${build}" casesensitive="yes" includes="${module.libs}">
@@ -59,6 +57,8 @@
 	    		<not><filename name="**/*xalan*"/></not>	    		
 	    		<not><filename name="**/*wsdl*"/></not>	    		
 	    		<not><filename name="**/*muse*"/></not>
+	    		<not><filename name="**/*jsp*"/></not>
+		    		<not><filename name="**/*core-3.1.1.jar*"/></not>
 	    	</fileset>
 	    </copy>
 		<copy todir="${module.release}${file.separator}lib" failonerror="true">
@@ -195,7 +195,7 @@
 
 			<batchtest fork="${test.fork}" todir="${module.results}">
 	        	<fileset dir="${module.test.src}" excludes="${module.test.excludes}">
-					<include name="**/${test}.java"/>
+					<include name="**/${test}.java"/>	        		
 	        	</fileset>
 			</batchtest>
 		</junit>

Modified: qpid/trunk/qpid/java/management/client/src/example/org/apache/qpid/management/example/ConsumerAndProducerExample.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/example/org/apache/qpid/management/example/ConsumerAndProducerExample.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/example/org/apache/qpid/management/example/ConsumerAndProducerExample.java (original)
+++ qpid/trunk/qpid/java/management/client/src/example/org/apache/qpid/management/example/ConsumerAndProducerExample.java Thu Feb 26 13:52:33 2009
@@ -26,7 +26,9 @@
 import org.apache.muse.util.xml.XPathUtils;
 import org.apache.muse.ws.addressing.EndpointReference;
 import org.apache.muse.ws.addressing.soap.SoapFault;
+import org.apache.muse.ws.notification.impl.FilterCollection;
 import org.apache.muse.ws.notification.impl.MessagePatternFilter;
+import org.apache.muse.ws.notification.impl.ProducerPropertiesFilter;
 import org.apache.muse.ws.notification.impl.TopicFilter;
 import org.apache.muse.ws.notification.remote.NotificationProducerClient;
 import org.apache.qpid.management.Names;
@@ -93,8 +95,11 @@
         // Example 6: a MessageFilter is installed in order to listen only for connection events 
         // (connections created or removed). The subscription will expire in 10 seconds.
         allMessagesWithMessageFilterAndTerminationTime(producerEPR,consumerEPR);
+		
+		// Example 7 : a subscription with more than one filter.
+		complexSubscription(producerEPR, consumerEPR);
 	}	
-	
+
 	/**
 	 * Makes a subscription on all topics / all messages without an expiry date.
 	 * 
@@ -223,6 +228,41 @@
         		new Date(System.currentTimeMillis() + 10000));	// Termination Time 
 	}
 	
+	/**
+	 * Makes a subscription on a specifc topic with an expiry date.
+	 * Only messages published on the given topic will be delivered to the given consumer.
+	 * The subscription will end after 10 seconds
+	 * 
+	 * @param producer the producer endpoint reference.
+	 * @param consumer the consumer endpoint reference .
+	 * @throws SoapFault when the subscription cannot be made.
+	 */
+	private void complexSubscription(EndpointReference producer, EndpointReference consumer) throws SoapFault
+	{
+		NotificationProducerClient producerClient = new NotificationProducerClient(producer);
+        producerClient.setTrace(true);
+
+        FilterCollection filter = new FilterCollection();
+        
+		TopicFilter topicFilter = new TopicFilter(Names.EVENTS_LIFECYLE_TOPIC_NAME);
+        MessagePatternFilter messageFilter= new MessagePatternFilter(
+        		"/wsnt:NotificationMessage/wsnt:Message/qman:LifeCycleEvent/qman:Resource/qman:Name/text()='connection'", // expression (XPath)
+        		XPathUtils.NAMESPACE_URI); // Dialect : the only supported dialect is XPath 1.0
+
+        ProducerPropertiesFilter producerFilter = new ProducerPropertiesFilter(
+        		"boolean(/*/MgtPubInterval > 100 and /*/MsgTotalEnqueues > 56272)",
+        		XPathUtils.NAMESPACE_URI);
+        
+        filter.addFilter(topicFilter);
+        filter.addFilter(messageFilter);
+        filter.addFilter(producerFilter);
+		
+        producerClient.subscribe(
+        		consumer,	// Consumer Endpoint reference
+        		filter,			// Topic Filter
+        		new Date(System.currentTimeMillis() + 10000));	// Termination Time 
+	}
+	
 	@Override
 	void printOutExampleDescription()
 	{
@@ -245,4 +285,9 @@
 		System.out.println("A subscription with a termination time will have a predefined expiry"); 
 		System.out.println("date while if there's no termination the subscription will never expire.");
 	}
+	
+	public static void main(String[] args)
+	{
+		new ConsumerAndProducerExample().execute(new String[]{"localhost","8080"});
+	}
 }

Modified: qpid/trunk/qpid/java/management/client/src/main/java/muse.xml
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/muse.xml?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/muse.xml (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/muse.xml Thu Feb 26 13:52:33 2009
@@ -29,7 +29,7 @@
    		<java-serializer-class>org.apache.qpid.management.wsdm.muse.serializer.DateSerializer</java-serializer-class>
 	</custom-serializer>
 	<router>
-		<java-router-class>org.apache.muse.core.routing.SimpleResourceRouter</java-router-class>
+		<java-router-class>org.apache.muse.ws.resource.impl.WsResourceRouter</java-router-class>
 		<logging>
 			<log-file>log/muse.log</log-file>
 			<log-level>SEVERE</log-level>

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java Thu Feb 26 13:52:33 2009
@@ -170,6 +170,6 @@
 	String QMAN_100037_INVOKE_OPERATION_FAILURE = "<QMAN-100037> : Operation Invocation failure for operation.";	
 	String QMAN_100038_UNABLE_TO_SEND_WS_NOTIFICATION = "<QMAN-100038> : Unable to send notification.";	
 	String QMAN_100039_UNABLE_TO_CONFIGURE_PROPERLY_WORKER_MANAGER = "<QMAN-100039> : Unable to properly configure WorkManager. A malformed property (NaN) was given as input parameter.";	
-	
+	String QMAN_100040_UNABLE_TO_LOCATE_WSRP_PROPERTIES = "<QMAN-100040> : Unable to evaluate the WSRP XPath expression on resource WSDL.";	
 	
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java Thu Feb 26 13:52:33 2009
@@ -45,7 +45,7 @@
     public static String CLASS = "class";
     public static String EVENT = "event";
     public static String OBJECT_ID="objectId";    
-    public static String BROKER_ID = "brokerID";
+    public static String BROKER_ID = "brokerId";
     public static String DOMAIN_NAME = "Q-MAN";
         
     public static String ARG_COUNT_PARAM_NAME = "argCount";
@@ -86,7 +86,7 @@
 	    			new StringBuilder()
 	    				.append(DOMAIN_NAME)
 	    				.append(':')
-	    				.append("Type=Service")
+	    				.append("Name=QMan,Type=Service")
 	    				.toString());
 	    } catch(Exception exception)
 	    {

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java Thu Feb 26 13:52:33 2009
@@ -30,7 +30,16 @@
 import org.apache.qpid.management.Names;
 import org.apache.qpid.management.domain.handler.base.IMessageHandler;
 import org.apache.qpid.management.domain.model.AccessMode;
+import org.apache.qpid.management.domain.model.type.AbsTime;
+import org.apache.qpid.management.domain.model.type.DeltaTime;
+import org.apache.qpid.management.domain.model.type.ObjectReference;
+import org.apache.qpid.management.domain.model.type.Str16;
+import org.apache.qpid.management.domain.model.type.Str8;
 import org.apache.qpid.management.domain.model.type.Type;
+import org.apache.qpid.management.domain.model.type.Uint16;
+import org.apache.qpid.management.domain.model.type.Uint32;
+import org.apache.qpid.management.domain.model.type.Uint64;
+import org.apache.qpid.management.domain.model.type.Uint8;
 import org.apache.qpid.transport.DeliveryProperties;
 import org.apache.qpid.transport.Header;
 import org.apache.qpid.transport.MessageProperties;
@@ -71,7 +80,12 @@
     private Configuration()
     {
         defineQueueNames();
+        
         createHeaderForCommandMessages();
+        
+        addAccessModeMappings();
+        
+        addTypeMappings();
     }
 
     void clean()
@@ -90,9 +104,11 @@
     }  
     
     /**
-     * Returns true if this configuration has at least one broker connection data.
+     * Returns true if this configuration has at least 
+     * one broker configured.
      * 
-     * @return true if this configuration has at least one broker connection data.
+     * @return true if this configuration has at least one 
+     * 				broker configured.
      */
     public boolean hasOneOrMoreBrokersDefined()
     {
@@ -245,26 +261,46 @@
     /**
      * Adds a new type mapping to this configuration.
      * 
-     * @param mapping the type mapping that will be added.
+     * @param code the code that will be associated with the declared type.
+     * @param type the type.
+     * @param vailidatorClassName the FQN of the validator class that will be 
+     * 				associated with the given type.
      */
-    void addTypeMapping(TypeMapping mapping) {
-        int code = mapping.getCode();
-        Type type = mapping.getType();
-        String validatorClassName = mapping.getValidatorClassName();
-        _typeMappings.put(code, type);
+    void addTypeMapping(int code, Type type, String validatorClassName) {
+    	_typeMappings.put(code, type);
         _validators.put(type, validatorClassName);
         
-        LOGGER.info(Messages.QMAN_000005_TYPE_MAPPING_CONFIGURED, code,type,validatorClassName);
+        LOGGER.info(
+        		Messages.QMAN_000005_TYPE_MAPPING_CONFIGURED, 
+        		code,
+        		type,
+        		validatorClassName);
     }
-    
+
+
+    /**
+     * Adds a new type mapping to this configuration.
+     * 
+     * @param code the code that will be associated with the declared type.
+     * @param type the type.
+     */
+    void addTypeMapping(int code, Type type) {
+        _typeMappings.put(code, type);
+        
+        LOGGER.info(
+        		Messages.QMAN_000005_TYPE_MAPPING_CONFIGURED, 
+        		code,
+        		type,
+        		"not configured for this type.");
+    }
+
     /**
      * Adds a new access mode mapping to this configuration.
      * 
-     * @param mapping the mapping that will be added.
+     * @param code the code that will be associated with the access mode,
+     * @param accessMode the accessMode.
      */
-    void addAccessModeMapping(AccessModeMapping mapping){
-        int code = mapping.getCode();
-        AccessMode accessMode = mapping.getAccessMode();
+    void addAccessModeMapping(int code, AccessMode accessMode){
         _accessModes.put(code, accessMode);
         
         LOGGER.info(Messages.QMAN_000006_ACCESS_MODE_MAPPING_CONFIGURED, code,accessMode);        
@@ -420,4 +456,34 @@
 	{
 		this._keepAliveTime = keepAliveTime;
 	}
+	
+	/**
+     * Configures access mode mappings.
+     * An access mode mapping is an association between a code and an access mode.
+     */
+    private void addAccessModeMappings() {
+    	addAccessModeMapping(1,AccessMode.RC);
+    	addAccessModeMapping(2,AccessMode.RW);
+    	addAccessModeMapping(3,AccessMode.RO);
+	}	
+    
+	/**
+     * Configures type mappings.
+     * A type mapping is an association between a code and a management type.
+     */
+    private void addTypeMappings()
+    {
+    	addTypeMapping(1,new Uint8(),Names.NUMBER_VALIDATOR);
+    	addTypeMapping(2,new Uint16(),Names.NUMBER_VALIDATOR);
+    	addTypeMapping(3,new Uint32(),Names.NUMBER_VALIDATOR);
+    	addTypeMapping(4,new Uint64(),Names.NUMBER_VALIDATOR);
+    	addTypeMapping(6,new Str8(),Names.STRING_VALIDATOR);
+    	addTypeMapping(7,new Str16(),Names.STRING_VALIDATOR);
+    	addTypeMapping(8,new AbsTime());
+    	addTypeMapping(9,new DeltaTime());
+    	addTypeMapping(10,new ObjectReference());
+    	addTypeMapping(11,new org.apache.qpid.management.domain.model.type.Boolean());
+    	addTypeMapping(14,new org.apache.qpid.management.domain.model.type.Uuid());
+    	addTypeMapping(15,new org.apache.qpid.management.domain.model.type.Map());
+    }        
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java Thu Feb 26 13:52:33 2009
@@ -38,16 +38,6 @@
 import org.apache.qpid.management.domain.handler.impl.InstrumentationMessageHandler;
 import org.apache.qpid.management.domain.handler.impl.MethodResponseMessageHandler;
 import org.apache.qpid.management.domain.handler.impl.SchemaResponseMessageHandler;
-import org.apache.qpid.management.domain.model.AccessMode;
-import org.apache.qpid.management.domain.model.type.AbsTime;
-import org.apache.qpid.management.domain.model.type.DeltaTime;
-import org.apache.qpid.management.domain.model.type.ObjectReference;
-import org.apache.qpid.management.domain.model.type.Str16;
-import org.apache.qpid.management.domain.model.type.Str8;
-import org.apache.qpid.management.domain.model.type.Uint16;
-import org.apache.qpid.management.domain.model.type.Uint32;
-import org.apache.qpid.management.domain.model.type.Uint64;
-import org.apache.qpid.management.domain.model.type.Uint8;
 import org.apache.qpid.transport.util.Logger;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -148,9 +138,6 @@
         		}
         	}
             
-            addTypeMappings();
-            addAccessModeMappings();
-            
             addMandatoryManagementMessageHandlers();
             addMandatoryMethodReplyMessageHandlers();                        
         } catch (Exception exception)
@@ -209,38 +196,6 @@
     	return data;
     }
     
-	/**
-     * Configures access mode mappings.
-     * An access mode mapping is an association between a code and an access mode.
-     */
-    private void addAccessModeMappings() {
-    	Configuration configuration = Configuration.getInstance();
-    	configuration.addAccessModeMapping(new AccessModeMapping(1,AccessMode.RC));
-    	configuration.addAccessModeMapping(new AccessModeMapping(2,AccessMode.RW));
-    	configuration.addAccessModeMapping(new AccessModeMapping(3,AccessMode.RO));
-	}
-
-	/**
-     * Configures type mappings.
-     * A type mapping is an association between a code and a management type.
-     */
-    private void addTypeMappings()
-    {
-    	Configuration configuration = Configuration.getInstance();
-    	configuration.addTypeMapping(new TypeMapping(1,new Uint8(),Names.NUMBER_VALIDATOR));
-    	configuration.addTypeMapping(new TypeMapping(2,new Uint16(),Names.NUMBER_VALIDATOR));
-    	configuration.addTypeMapping(new TypeMapping(3,new Uint32(),Names.NUMBER_VALIDATOR));
-    	configuration.addTypeMapping(new TypeMapping(4,new Uint64(),Names.NUMBER_VALIDATOR));
-    	configuration.addTypeMapping(new TypeMapping(6,new Str8(),Names.STRING_VALIDATOR));
-    	configuration.addTypeMapping(new TypeMapping(7,new Str16(),Names.STRING_VALIDATOR));
-    	configuration.addTypeMapping(new TypeMapping(8,new AbsTime()));
-    	configuration.addTypeMapping(new TypeMapping(9,new DeltaTime()));
-    	configuration.addTypeMapping(new TypeMapping(10,new ObjectReference()));
-    	configuration.addTypeMapping(new TypeMapping(11,new org.apache.qpid.management.domain.model.type.Boolean()));
-    	configuration.addTypeMapping(new TypeMapping(14,new org.apache.qpid.management.domain.model.type.Uuid()));
-    	configuration.addTypeMapping(new TypeMapping(15,new org.apache.qpid.management.domain.model.type.Map()));
-    }
-    
     /**
      * Configures the mandatory management message handlers.
      */

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java Thu Feb 26 13:52:33 2009
@@ -54,11 +54,10 @@
      */
     public void registerQManService(QMan qman) throws MBeanException 
     {
-    	ObjectName name = createQManName();
-    	if (!_mxServer.isRegistered(name))
+    	if (!_mxServer.isRegistered(Names.QMAN_OBJECT_NAME))
     	{
     		try {
-				_mxServer.registerMBean(qman, name);
+				_mxServer.registerMBean(qman, Names.QMAN_OBJECT_NAME);
 			} catch (Exception exception) {
 				throw new MBeanException(exception);
 			}
@@ -358,27 +357,6 @@
             throw new RuntimeException(exception);
         } 
     }        
-    
-    /**
-     * Creates the QMan object name.
-     * 
-     * @return the QMan object name.
-     */
-    private ObjectName createQManName() 
-    {
-        String asString = new StringBuilder()
-            .append(Names.DOMAIN_NAME)
-            .append(':')
-            .append("Type=Service")
-            .toString();
-        try
-        {
-            return new ObjectName(asString);
-        } catch (MalformedObjectNameException exception)
-        {
-            throw new RuntimeException(exception);
-        } 
-    }
 
     ObjectName createEntityDefinitionName(String packageName, String className, String type) 
     {
@@ -407,7 +385,7 @@
 		{
 			if (!_mxServer.isRegistered(name))
 				_mxServer.registerMBean(entity, name);
-				_mxServer.addNotificationListener(name, createQManName(), null, null);
+				_mxServer.addNotificationListener(name, Names.QMAN_OBJECT_NAME, null, null);
 		} catch(Exception exception)  
 		{
 			throw new RuntimeException(exception);

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java Thu Feb 26 13:52:33 2009
@@ -26,6 +26,9 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 import javax.management.Attribute;
 import javax.management.AttributeList;
@@ -45,6 +48,7 @@
 import org.apache.qpid.management.configuration.BrokerAlreadyConnectedException;
 import org.apache.qpid.management.configuration.BrokerConnectionData;
 import org.apache.qpid.management.configuration.BrokerConnectionException;
+import org.apache.qpid.management.configuration.Configuration;
 import org.apache.qpid.management.configuration.Configurator;
 import org.apache.qpid.management.domain.model.JmxService;
 import org.apache.qpid.transport.util.Logger;
@@ -58,6 +62,7 @@
     private final List<ManagementClient> managementClients = new ArrayList<ManagementClient>();
     
     private Configurator _configurator = new Configurator();
+    private ThreadPoolExecutor _workManager;
     
     /**
      * Starts QMan.
@@ -74,6 +79,8 @@
         	 
             _configurator.configure();            
             
+            configureWorkManager();
+            
             LOGGER.info(Messages.QMAN_000019_QMAN_STARTED);
        } catch(Exception exception) {
             LOGGER.error(exception,Messages.QMAN_100018_UNABLE_TO_STARTUP_CORRECTLY );
@@ -143,6 +150,36 @@
         LOGGER.info(Messages.QMAN_000021_SHUT_DOWN);                    	
     }
     
+	/**
+     * Creates a management client using the given data.
+     * 
+     * @param brokerId the broker identifier.
+     * @param data the broker connection data.
+     */
+    public void createManagementClient(UUID brokerId, BrokerConnectionData data)
+    {
+        try 
+        {
+            ManagementClient client = new ManagementClient(brokerId,data);
+            client.estabilishFirstConnectionWithBroker();
+            managementClients.add(client);
+            
+            LOGGER.info(Messages.QMAN_000004_MANAGEMENT_CLIENT_CONNECTED,brokerId);
+        } catch(StartupFailureException exception) {
+            LOGGER.error(exception, Messages.QMAN_100017_UNABLE_TO_CONNECT,brokerId,data);
+        }
+    }    
+    
+    /**
+     * Returns the list of management clients currently handled by QMan.
+     * 
+     * @return the list of management clients currently handled by QMan.
+     */
+    public List<ManagementClient> getManagementClients()
+    {
+    	return managementClients;
+    }
+    
     /**
      * Injects the configurator on this QMan instance.
      * That configutator later will be responsible to manage the configuration.
@@ -330,13 +367,20 @@
 
 	/**
 	 * Simply dispatches the incoming notification to registered listeners.
+	 * Consider that the notification is sent asynchronously so the QMan current thread is not 
+	 * waiting for completion of receiver task.
 	 * 
 	 * @param notification the incoming notification.
 	 * @param handback the context associated to this notification.
 	 */
-	public void handleNotification(Notification notification, Object handback) 
+	public void handleNotification(final Notification notification, Object handback) 
 	{
-		sendNotification(notification);
+		_workManager.execute(new Runnable(){
+			public void run()
+			{
+				sendNotification(notification);
+			}
+		});
 	}	
 	
     /**
@@ -352,33 +396,17 @@
     	LOGGER.info(Messages.QMAN_000023_QMAN_REGISTERED_AS_MBEAN);
 	}
     
-	/**
-     * Creates a management client using the given data.
-     * 
-     * @param brokerId the broker identifier.
-     * @param data the broker connection data.
-     */
-    public void createManagementClient(UUID brokerId, BrokerConnectionData data)
-    {
-        try 
-        {
-            ManagementClient client = new ManagementClient(brokerId,data);
-            client.estabilishFirstConnectionWithBroker();
-            managementClients.add(client);
-            
-            LOGGER.info(Messages.QMAN_000004_MANAGEMENT_CLIENT_CONNECTED,brokerId);
-        } catch(StartupFailureException exception) {
-            LOGGER.error(exception, Messages.QMAN_100017_UNABLE_TO_CONNECT,brokerId,data);
-        }
-    }    
-    
     /**
-     * Returns the list of management clients currently handled by QMan.
-     * 
-     * @return the list of management clients currently handled by QMan.
+     * Configures work manager component. 
      */
-    public List<ManagementClient> getManagementClients()
-    {
-    	return managementClients;
-    }
+	private void configureWorkManager()
+	{
+		Configuration configuration = Configuration.getInstance();
+		_workManager = new ThreadPoolExecutor(
+				configuration.getWorkerManagerPoolSize(),
+				configuration.getWorkerManagerMaxPoolSize(),
+				configuration.getWorkerManagerKeepAliveTime(),
+				TimeUnit.MILLISECONDS,
+				new ArrayBlockingQueue<Runnable>(30));
+	}
 }

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java Thu Feb 26 13:52:33 2009
@@ -57,7 +57,9 @@
     				Names.QPID_EMULATOR_OBJECT_NAME);
 		} catch(Exception exception)
 		{
-			LOGGER.warn(exception,Messages.QMAN_300005_QEMU_INITIALIZATION_FAILURE);
+			LOGGER.warn(
+					exception,
+					Messages.QMAN_300005_QEMU_INITIALIZATION_FAILURE);
 			throw new ServletException(exception);
 		}
 	}
@@ -84,8 +86,8 @@
 	{
 		try 
 		{
-			ManagementFactory.getPlatformMBeanServer()
-				.unregisterMBean(Names.QPID_EMULATOR_OBJECT_NAME);
+			ManagementFactory.getPlatformMBeanServer().unregisterMBean(
+					Names.QPID_EMULATOR_OBJECT_NAME);
 		} catch (Exception exception) 
 		{
 		}

Added: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java?rev=748154&view=auto
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java (added)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java Thu Feb 26 13:52:33 2009
@@ -0,0 +1,44 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.management.wsdm.capabilities;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+
+public interface Constants
+{
+	String WSRP_PROPERTIES_XPATH =	"/wsdl:definitions/wsdl:types/xsd:schema[" +
+																"@targetNamespace='http://amqp.apache.org/qpid/management/qman']" +
+																"/xsd:element[@name='QManWsResourceProperties']/xsd:complexType/xsd:sequence";
+	
+	String SERVICE_LOCATION_XPATH = "/wsdl:definitions/wsdl:service/wsdl:port/wsdl-soap:address/@location";
+	String QMAN_SCHEMA_XPATH = "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://amqp.apache.org/qpid/management/qman']";
+	
+	String MIN_OCCURS = "minOccurs";
+	String REF_ATTRIBUTE = "ref";
+	String NAME_ATTRIBUTE = "name";
+	String TYPE_ATTRIBUTE  ="type";
+	
+	QName XSD_ELEMENT_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"element","xsd");
+	QName XSD_COMPLEX_TYPE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"complexType","xsd");
+	QName XSD_SEQUENCE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"sequence","xsd");
+
+}
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java Thu Feb 26 13:52:33 2009
@@ -29,6 +29,8 @@
 
 /**
  * WS-Notifications consumer capability.
+ * At the moment QMan is not a consumer of itself so this capability is here only
+ * for test purposes.
  * 
  * @author Andrea Gazzarini
  */

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java Thu Feb 26 13:52:33 2009
@@ -29,32 +29,57 @@
 /**
  * Dummy capability builder used for avoid duplicated builds for the 
  * same class.
+ * Basically it acts likes a Null Object when the target capability class has been 
+ * already built.
  * 
  * @author Andrea Gazzarini
  */
 public class DummyCapabilityBuilder implements IArtifactBuilder
 {
-
-	public void begin(ObjectName objectName) throws BuilderException
+	/**
+	 * Director callback.
+	 * Do nothing here (see class comments above.)
+	 */
+	public void begin(ObjectName objectName)
 	{
 	}
 
-	public void endAttributes() throws BuilderException
+	/**
+	 * Director callback.
+	 * Do nothing here (see class comments above.)
+	 */
+	public void endAttributes()
 	{
 	}
 
-	public void endOperations() throws BuilderException
+	/**
+	 * Director callback.
+	 * Do nothing here (see class comments above.)
+	 */
+	public void endOperations()
 	{
 	}
 
-	public void onAttribute(MBeanAttributeInfo attributeMetadata) throws BuilderException
+	/**
+	 * Director callback.
+	 * Do nothing here (see class comments above.)
+	 */
+	public void onAttribute(MBeanAttributeInfo attributeMetadata) 
 	{
 	}
 
-	public void onOperation(MBeanOperationInfo operationMetadata) throws BuilderException
+	/**
+	 * Director callback.
+	 * Do nothing here (see class comments above.)
+	 */
+	public void onOperation(MBeanOperationInfo operationMetadata)
 	{
 	}
 
+	/**
+	 * Director callback.
+	 * Do nothing here (see class comments above.)
+	 */
 	public void setEnvironment(Environment environment)
 	{
 	}

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java Thu Feb 26 13:52:33 2009
@@ -179,12 +179,11 @@
 						params, 
 						signature);
 			
-			Result result = new Result(
+		return new Result(
 					output.getReturnCode(),
 					output.getStatusText(),
 					output.getOutputSection());
-			
-			return result;
+
 		} catch (InstanceNotFoundException exception)
 		{
 			throw new EntityInstanceNotFoundFault(

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java Thu Feb 26 13:52:33 2009
@@ -178,6 +178,14 @@
 			} 
 		}
 
+		/**
+		 * Director callback. 
+		 * All attributes have been notified.
+		 * 
+		 * This builder is using this callback in order to create the initial 
+		 * properties QNames declaration.
+		 * 
+		 */
 		public void endAttributes() throws BuilderException
 		{
 			_endAttributeHandler.endAttributes();

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java Thu Feb 26 13:52:33 2009
@@ -21,6 +21,10 @@
 package org.apache.qpid.management.wsdm.capabilities;
 
 import org.apache.muse.util.xml.XmlUtils;
+import org.apache.muse.ws.metadata.WsxConstants;
+import org.apache.muse.ws.resource.WsResource;
+import org.apache.muse.ws.resource.metadata.MetadataDescriptor;
+import org.apache.muse.ws.resource.metadata.WsrmdConstants;
 import org.apache.muse.ws.resource.metadata.ext.WsrfMetadataExchange;
 import org.apache.muse.ws.wsdl.WsdlUtils;
 import org.apache.qpid.management.wsdm.muse.resources.QManWsResource;
@@ -60,4 +64,36 @@
         
         return wsdl;
 	}
+	
+	/**
+	 * Returns the resource metadata descriptor associated with the owenr 
+	 * resource of thi capability.
+	 * 
+	 * @return the resource metadata descriptor. 
+	 */
+	protected Element getResourceMetadataDescriptor()
+	{
+        WsResource resource = (WsResource)getResource();
+        MetadataDescriptor metadataDescriptor = resource.getPropertyCollection().getMetadata();
+        return metadataDescriptor.toXML();		
+	}
+	
+    public Element[] getMetadata(String dialect)
+    {  
+    	if (dialect == null)
+    	{
+    		return new Element[]{
+    				getResourceMetadataDescriptor(),
+    				getWSDL()};
+    	} else {
+    		if (WsrmdConstants.NAMESPACE_URI.equals(dialect))
+    		{
+    			return new Element[]{getResourceMetadataDescriptor()};
+    		} else if (WsxConstants.WSDL_DIALECT.equals(dialect))
+    		{
+    			return new Element[]{getWSDL()};
+    		}
+    	}
+    	return super.getMetadata(dialect);
+    }
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java Thu Feb 26 13:52:33 2009
@@ -128,7 +128,8 @@
 	 */
 	public Element[] getResourceMetadataDescriptor() 
 	{
-		Element [] properties = _metadataDescriptor.toArray(new Element[0]);
+		Element [] properties = _metadataDescriptor.toArray(
+				new Element[_metadataDescriptor.size()]);
 		return properties;
 	}
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java Thu Feb 26 13:52:33 2009
@@ -35,7 +35,7 @@
  * 
  * @author Andrea Gazzarini
  */
-class WSDMArtifactsDirector 
+final class WSDMArtifactsDirector 
 {
 	private final ObjectName _eventSourceObjectName;
 	private final MBeanInfo _metadata;
@@ -189,7 +189,8 @@
 	 * 
 	 * @param resource the ws resource.
 	 */
-	public void setResource(Resource resource) {
+	public void setResource(Resource resource) 
+	{
 		_wsdlBuilder.setWsdlPath(resource.getWsdlPath());
 	}
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java Thu Feb 26 13:52:33 2009
@@ -105,13 +105,18 @@
 				
 				_cache.put(searchKey, result);
 
-				LOGGER.debug(Messages.QMAN_200040_WS_ARTIFACTS_CACHED,searchKey);
+				LOGGER.debug(
+						Messages.QMAN_200040_WS_ARTIFACTS_CACHED,
+						searchKey);
 			}
 			
 			return result;
 		} catch(Exception exception)
 		{
-			throw new ArtifactsNotAvailableException(result,exception,objectName);
+			throw new ArtifactsNotAvailableException(
+					result,
+					exception,
+					objectName);
 		}
 	}
 	

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java Thu Feb 26 13:52:33 2009
@@ -23,20 +23,22 @@
 import java.net.InetAddress;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 import javax.management.MBeanAttributeInfo;
 import javax.management.MBeanOperationInfo;
 import javax.management.MBeanParameterInfo;
 import javax.management.ObjectName;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerException;
 
 import org.apache.muse.core.Environment;
+import org.apache.muse.core.serializer.SerializerRegistry;
 import org.apache.muse.util.ReflectUtils;
 import org.apache.muse.util.xml.XmlUtils;
 import org.apache.muse.ws.wsdl.WsdlUtils;
 import org.apache.qpid.management.Messages;
 import org.apache.qpid.management.Names;
+import org.apache.qpid.management.wsdm.muse.engine.WSDMAdapterEnvironment;
 import org.apache.qpid.management.wsdm.muse.serializer.ObjectSerializer;
 import org.apache.qpid.qman.debug.WsdlDebugger;
 import org.apache.qpid.transport.util.Logger;
@@ -49,126 +51,61 @@
  * 
  * @author Andrea Gazzarini
  */
-class WsdlBuilder implements IArtifactBuilder {
+class WsdlBuilder implements IArtifactBuilder,Constants {
 
 	private final static Logger LOGGER = Logger.get(WsdlBuilder.class);
 	
-	private Environment _environment;
+	private WSDMAdapterEnvironment _environment;
 	private Document _document;
 	private Element schema;
-	
-	private ObjectSerializer serializer = new ObjectSerializer();
-
+	private Element _wsrpProperties;
+	private ObjectSerializer _serializer;
 	private ObjectName _objectName;
-	
-	private boolean mapTypeHasBeenDeclared;
-	private boolean uuidTypeHasBeenDeclared;
 	private Map<String, String> arrayTypesAlreadyDeclared = new HashMap<String, String>();
 	
+	private Element _arrayComplexType;
+	private Element _nestedArrayType;
+	
+	/**
+	 * For each attibute the corresponding xml type definition must be inserted on the QMan
+	 * schema related section.
+	 * After that, a reference to that definition must be declared on the wsrp element .
+	 * 
+	 * @param attributeMetadata the attribute metadata.
+	 * @throws BuilderException only if this builder wasn't able to get a reference (via XPath) 
+	 * 				to QMan schema section.
+	 */
 	public void onAttribute(MBeanAttributeInfo attributeMetadata) throws BuilderException  
 	{
 		try 
 		{
-	/*
-			<xs:element name='accountAttributes'>
-	        <xs:complexType>
-	         <xs:sequence>
-	          <xs:element maxOccurs='unbounded' minOccurs='0' name='entry'>
-	           <xs:complexType>
-	            <xs:sequence>
-	             <xs:element minOccurs='0' name='key' type='xs:string'/>
-	             <xs:element minOccurs='0' name='value' type='xs:anyType'/>
-	            </xs:sequence>
-	           </xs:complexType>
-	          </xs:element>
-	         </xs:sequence>
-	        </xs:complexType>
-	       </xs:element>
-*/			
-			schema.appendChild(defineSchemaFor(attributeMetadata.getType(), attributeMetadata.getName()));				
-			Element wsrpProperties = (Element) XPathAPI.selectSingleNode(
-					_document, 
-					"/wsdl:definitions/wsdl:types/xsd:schema[" +
-					"@targetNamespace='http://amqp.apache.org/qpid/management/qman']" +
-					"/xsd:element[@name='QManWsResourceProperties']/xsd:complexType/xsd:sequence");
+			String attributeName = attributeMetadata.getName();
+			schema.appendChild(defineSchemaFor(attributeMetadata.getType(), attributeName));				
 
 			Element propertyRef= XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
+			propertyRef.setAttribute(MIN_OCCURS, "0");		
 			propertyRef.setAttribute(
-					"ref", 
-					Names.PREFIX+":"+attributeMetadata.getName());
-			propertyRef.setAttribute("minOccurs", "0");		
-			wsrpProperties.appendChild(propertyRef);
-			
+					REF_ATTRIBUTE, 
+					Names.PREFIX+":"+attributeName);
+
+			_wsrpProperties.appendChild(propertyRef);
 		} catch(Exception exception)
 		{
 			throw new BuilderException(exception);
 		}
 	}
 	
-	private final static QName XSD_ELEMENT_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"element","xsd");
-	private final static QName XSD_COMPLEX_TYPE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"complexType","xsd");
-	private final static QName XSD_SEQUENCE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"sequence","xsd");
-	
 	@SuppressWarnings("unchecked")
 	private Element defineSchemaFor(String type, String attributeName) throws Exception
 	{
-		if (type.equals("java.util.Map")) 
-		{
-			if (!mapTypeHasBeenDeclared)
-			{				
-					Element complexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
-					complexType.setAttribute("name","map");
-						Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
-	
-						Element entry = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-						entry.setAttribute("name", "entry");
-						entry.setAttribute("minOccurs", "0");
-						entry.setAttribute("maxOccurs", "unbounded");
-	
-						Element complexType2 = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
-						Element sequence2 = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
-	
-							Element key = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-							key.setAttribute("name", "key");
-							key.setAttribute("type", "xsd:string");
-	
-							Element value = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-							value.setAttribute("name", "value");
-							value.setAttribute("type", "xsd:anyType");
-			
-							sequence2.appendChild(key);
-							sequence2.appendChild(value);
-							complexType2.appendChild(sequence2);
-							entry.appendChild(complexType2);
-							sequence.appendChild(entry);
-							complexType.appendChild(sequence);
-							schema.appendChild(complexType);			
-							mapTypeHasBeenDeclared = true;
-			} 
-			Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-			propertyDeclaration.setAttribute("name",attributeName);
-			propertyDeclaration.setAttribute("type", "qman:map");
-			return propertyDeclaration;
-			
-		} else if ("java.util.UUID".equals(type)) 
-		{
-			if (!uuidTypeHasBeenDeclared)
-			{
-					Element complexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
-					complexType.setAttribute("name", "uuid");
-						Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
-							Element uuid = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-							uuid.setAttribute("name", "uuid");
-							uuid.setAttribute("type", "xsd:string");						
-				sequence.appendChild(uuid);
-				complexType.appendChild(sequence);
-				schema.appendChild(complexType);
-				uuidTypeHasBeenDeclared = true;
-			}
-			Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-			propertyDeclaration.setAttribute("name",attributeName);
-			propertyDeclaration.setAttribute("type", "qman:uuid");
-			return propertyDeclaration;
+		Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
+		String xmlType = null;
+		if (type.equals(Map.class.getName())) 
+		{
+			xmlType="qman:map";
+		} else if (UUID.class.getName().equals(type)) 
+		{			
+			xmlType = "qman:uuid";
 		} else if (type.startsWith("["))
 		{
 			Class arrayClass =  Class.forName(type);
@@ -177,143 +114,40 @@
 			arrayType = Character.toUpperCase(arrayType.charAt(0))+arrayType.substring(1);
 			if (!arrayTypesAlreadyDeclared.containsKey(type))
 			{
-					Element complexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
-					complexType.setAttribute("name", "arrayOf"+arrayType);
-						Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
-							Element entry = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-							entry.setAttribute("name", "entry");
-							entry.setAttribute("type", serializer.getXmlType(clazz));						
-				sequence.appendChild(entry);
-				complexType.appendChild(sequence);
-				schema.appendChild(complexType);
+				_arrayComplexType.setAttribute(NAME_ATTRIBUTE, "arrayOf"+arrayType);
+				_nestedArrayType.setAttribute(TYPE_ATTRIBUTE, _serializer.getXmlType(clazz));
+				schema.appendChild(_arrayComplexType);
 				arrayTypesAlreadyDeclared.put(type, arrayType);
 			}
-			Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-			propertyDeclaration.setAttribute("name",attributeName);
-			propertyDeclaration.setAttribute("type", "qman:arrayOf"+arrayTypesAlreadyDeclared.get(type));
-			return propertyDeclaration;
+			xmlType = "qman:arrayOf"+arrayTypesAlreadyDeclared.get(type);
 		}
-		else {			
-			Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
-			propertyDeclaration.setAttribute("name",attributeName);
-			propertyDeclaration.setAttribute("type", serializer.getXmlType(Class.forName(type)));
-				
-			return propertyDeclaration;
+		else 
+		{			
+			xmlType = _serializer.getXmlType(Class.forName(type));
 		}			
+		propertyDeclaration.setAttribute(NAME_ATTRIBUTE,attributeName);
+		propertyDeclaration.setAttribute(TYPE_ATTRIBUTE, xmlType);
+		return propertyDeclaration;
 	}
-	
+
+	/**
+	 * Initializes this builder.
+	 * 
+	 * @param objectName the name of the current JMX entity.
+	 * @throws BuilderException when it's not possible to proceed with the initialization.
+	 */
 	public void begin(ObjectName objectName) throws BuilderException
 	{
 		this._objectName = objectName;
-		try 
-		{
-			Attr location = (Attr) XPathAPI.selectSingleNode(
-					_document, 
-					"/wsdl:definitions/wsdl:service/wsdl:port/wsdl-soap:address/@location");
-					
-			StringBuilder builder = new StringBuilder("http://")
-				.append(InetAddress.getLocalHost().getHostName())
-				.append(':')
-				.append(System.getProperty(Names.ADAPTER_PORT_PROPERTY_NAME,"8080"))
-				.append('/')
-				.append("qman")
-				.append('/')
-				.append("services/QManWsResource");
-			location.setValue(builder.toString());
-		} catch(Exception exception)
-		{
-			LOGGER.error(
-					exception,
-					Messages.QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE);
-			throw new BuilderException(exception);
-		}
-		
-		try 
-		{
-			schema = (Element) XPathAPI.selectSingleNode(
-					_document.getDocumentElement(),
-				"/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://amqp.apache.org/qpid/management/qman']");
-		} catch(Exception exception)
-		{
-			LOGGER.error(
-					exception,
-					Messages.QMAN_100034_WSDL_SCHEMA_SECTION_NOT_FOUND);
-			throw new BuilderException(exception);
-		}
-/*
-		<xs:complexType name='InvocationResult'>
-			<xs:sequence>
-				<xs:element name='statusCode' type="xsd:long" />
-				<xs:element name='statusText' type="xsd:string" />
-				<xs:element name='outputParameters'>
-		        	<xs:complexType>
-		         		<xs:sequence>
-		         		
-		          			<xs:element maxOccurs='unbounded' minOccurs='0' name='entry'>
-		          			
-		           				<xs:complexType>
-		            				<xs:sequence>
-		             					<xs:element minOccurs='0' name="name' type='xs:string'/>
-		             					<xs:element minOccurs='0' name="value" type='xs:anyType'/>
-		            				</xs:sequence>
-		           				</xs:complexType>
-		          			</xs:element>
-		         		</xs:sequence>
-		        	</xs:complexType>
-		       </xs:element>
-		</xs:sequence>
-	</xs:complexType>
-*/
-		Element complexTypeResult = _document.createElement("xsd:complexType");
-		complexTypeResult.setAttribute("name", "result");
-		Element sequence = _document.createElement("xsd:sequence");
-		complexTypeResult.appendChild(sequence);
-		
-		Element statusCode = _document.createElement("xsd:element");
-		statusCode.setAttribute("name", "statusCode");
-		statusCode.setAttribute("type", "xsd:long");
-
-		Element statusText = _document.createElement("xsd:element");
-		statusText.setAttribute("name", "statusText");
-		statusText.setAttribute("type", "xsd:string");
-		
-		sequence.appendChild(statusCode);
-		sequence.appendChild(statusText);
-		
-		Element outputParams = _document.createElement("xsd:complexType");
-		outputParams.setAttribute("name", "outputParameters");
-		sequence.appendChild(outputParams);		
-		
-		Element complexTypeOutput = _document.createElement("xsd:complexType");
-		Element outputSequence = _document.createElement("xsd:sequence");
-		
-		outputParams.appendChild(complexTypeOutput);
-		complexTypeOutput.appendChild(outputSequence);
-		
-		Element entry = _document.createElement("xsd:element");
-		entry.setAttribute("maxOccurs", "unbounded");
-		entry.setAttribute("minOccurs", "0");
-		entry.setAttribute("name", "entry");
-		
-		outputSequence.appendChild(entry);
+		this._serializer = (ObjectSerializer) SerializerRegistry.getInstance().getSerializer(Object.class);
 		
-		Element entryComplexType = _document.createElement("xsd:complexType");
-		Element entrySequence = _document.createElement("xsd:sequence");
-		entryComplexType.appendChild(entrySequence);
-		entry.appendChild(entryComplexType);
+		createWsrpPropertiesElement();
 		
-		Element name = _document.createElement("xsd:name");
-		name.setAttribute("name", "key");
-		name.setAttribute("type", "xsd:string");
+		createReusableArrayComplextType();
 		
-		Element value = _document.createElement("xsd:element");
-		value.setAttribute("name", "value");
-		value.setAttribute("type", "xsd:anyType");
+		replaceDummyServiceLocationOnWsdl();
 		
-		entrySequence.appendChild(name);
-		entrySequence.appendChild(value);		
-		
-		schema.appendChild(complexTypeResult);
+		createSchemaElement();
 	}
 	
 	public void onOperation(MBeanOperationInfo operationMetadata) throws BuilderException
@@ -350,9 +184,9 @@
 				<xs:sequence />
 			</xs:complexType>
 		 */
+		
 		try 
 		{
-			// <xs:element name='purgeRequest' type='qman:purgeRequest' />
 			// <xsd:element xmlns="" name="purgeRequest" type="qman:purgeRequest"/>
 			
 			Element methodRequestElement= _document.createElement("xsd:element");		
@@ -361,13 +195,13 @@
 			methodRequestElement.setAttribute("type", "qman:"+methodNameRequest);
 			
 			// <xs:element name='purgeResponse' type='qman:purgeResponse' />
-			Element methodResponseElement= _document.createElement("xsd:element");		
+//			Element methodResponseElement= _document.createElement("xsd:element");		
 			String methodNameResponse= operationMetadata.getName()+"Response";
-			methodResponseElement.setAttribute("name", methodNameResponse);
-			methodResponseElement.setAttribute("type", "qman:"+methodNameResponse);
+//			methodResponseElement.setAttribute("name", methodNameResponse);
+//			methodResponseElement.setAttribute("type", "qman:result");//+methodNameResponse);
 			
 			schema.appendChild(methodRequestElement);
-			schema.appendChild(methodResponseElement);
+//			schema.appendChild(methodResponseElement);
 	
 			/*
 				<xs:complexType name='purgeRequest'>
@@ -391,19 +225,6 @@
 			methodNameRequestComplexType.appendChild(methodNameRequestComplexTypeSequence);
 			schema.appendChild(methodNameRequestComplexType);
 			
-			Element methodNameResponseComplexType =  _document.createElement("xsd:complexType");
-			methodNameResponseComplexType.setAttribute("name", methodNameResponse);
-			
-			Element methodNameResponseSequence = _document.createElement("xsd:sequence");
-			methodNameResponseComplexType.appendChild(methodNameResponseSequence);
-			
-			Element result = _document.createElement("xsd:element");
-			result.setAttribute("name", "result");
-			result.setAttribute("type", "qman:result");
-			methodNameResponseSequence.appendChild(result);
-			
-			schema.appendChild(methodNameResponseComplexType);
-			
 			/*
 		<message name="purgeResponseMessage">
 			<part element='qman:purgeResponse' name='purgeResponse'></part>
@@ -428,7 +249,7 @@
 			Element responseMessage = _document.createElement("wsdl:message");
 			responseMessage.setAttribute("name", responseMessageName);
 			Element responsePart = _document.createElement("wsdl:part");
-			responsePart.setAttribute("element", "qman:"+methodNameResponse);
+			responsePart.setAttribute("element", "qman:result");//+methodNameResponse);
 			responsePart.setAttribute("name", methodNameResponse);
 			responseMessage.appendChild(responsePart);
 			
@@ -506,29 +327,134 @@
 		}
 	}
 
+	/**
+	 * Director callback : all attributes have been notified.
+	 * Nothing to do here.
+	 */
 	public void endAttributes() 
 	{
 		// N.A.
 	}
 
+	/**
+	 * Director callback : all operations have been notified.
+	 * Nothing to do here.
+	 */
 	public void endOperations() 
 	{
-
+		// N.A.
 	}
 
+	/**
+	 * Returns the WSDL built by this builder.
+	 * 
+	 * @return the WSDL built by this builder.
+	 */
 	public Document getWsdl() 
 	{
 		WsdlDebugger.debug(_objectName,_document);
 		return _document;
 	}
 
+	/**
+	 * Injects the application context environment 
+	 * on this builder.
+	 * 
+	 * @param environment the application context environment.
+	 */
 	public void setEnvironment(Environment environment) 
 	{
-		this._environment = environment;
+		this._environment = (WSDMAdapterEnvironment)environment;
 	}
 	
+	/**
+	 * Injects the path of the wsdl document.
+	 * 
+	 * @param wsdlPath the path of the wsdl document.
+	 */
 	public void setWsdlPath(String wsdlPath)
 	{
 		_document = WsdlUtils.createWSDL(_environment, wsdlPath, true);
 	}
-}
+	
+	/**
+	 * Create a reference to the WSRP properties element. 
+	 * 
+	 * @throws BuilderException in case of XPath evaluation problem. 
+	 */
+	private void createWsrpPropertiesElement() throws BuilderException 
+	{
+		try
+		{
+			_wsrpProperties = (Element) XPathAPI.selectSingleNode(
+					_document, 
+					WSRP_PROPERTIES_XPATH);
+		} catch (TransformerException exception)
+		{
+			LOGGER.error(Messages.QMAN_100040_UNABLE_TO_LOCATE_WSRP_PROPERTIES);
+			throw new BuilderException(exception);
+		}		
+	}
+
+	/**
+	 * Creates a template element that will be used for array 
+	 * type schema declaration(s). 
+	 */
+	private void createReusableArrayComplextType()
+	{
+		_arrayComplexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
+		Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
+		_nestedArrayType = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
+		_nestedArrayType.setAttribute(NAME_ATTRIBUTE, "entry");
+		sequence.appendChild(_nestedArrayType);
+		_arrayComplexType.appendChild(sequence);
+	}
+	
+	private void createSchemaElement() throws BuilderException
+	{
+		try 
+		{
+			schema = (Element) XPathAPI.selectSingleNode(
+					_document.getDocumentElement(),
+					QMAN_SCHEMA_XPATH);
+		} catch(Exception exception)
+		{
+			LOGGER.error(
+					exception,
+					Messages.QMAN_100034_WSDL_SCHEMA_SECTION_NOT_FOUND);
+			throw new BuilderException(exception);
+		}		
+	}
+	
+	/**
+	 * The template WSDL contains a dummy URL as service location that 
+	 * needs to be replaced with the real service address.
+	 * 
+	 * @throws BuilderException when replacement fails (XPath problem).
+	 */
+	private void replaceDummyServiceLocationOnWsdl() throws BuilderException
+	{
+		try 
+		{
+			Attr location = (Attr) XPathAPI.selectSingleNode(
+					_document, 
+					SERVICE_LOCATION_XPATH);
+			
+			StringBuilder builder = new StringBuilder("http://")
+				.append(InetAddress.getLocalHost().getHostName())
+				.append(':')
+				.append(System.getProperty(Names.ADAPTER_PORT_PROPERTY_NAME,"8080"))
+				.append('/')
+				.append(_environment.getContextPath())
+				.append('/')
+				.append("services/QManWsResource");
+			location.setValue(builder.toString());
+		} catch(Exception exception)
+		{
+			LOGGER.error(
+					exception,
+					Messages.QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE);
+			throw new BuilderException(exception);
+		}
+	}	
+}
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java Thu Feb 26 13:52:33 2009
@@ -50,6 +50,9 @@
 	 */
 	public EntityInstanceNotFoundFault(EndpointReference endpointReference, ObjectName targetEntityName) 
 	{
-		super(endpointReference,EXCEPTION_QNAME, targetEntityName.getCanonicalName());
+		super(
+				endpointReference,
+				EXCEPTION_QNAME, 
+				targetEntityName.getCanonicalName());
 	}
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java Thu Feb 26 13:52:33 2009
@@ -25,7 +25,6 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-
 /**
  * Thread-scoped session.
  * 
@@ -35,7 +34,8 @@
 {	
 	private ObjectName _objectName;
 	private Document _wsdl;
-	private Element [] additionalProperties;
+	private Element [] _wsrmdProperties;
+	
 	/**
 	 * Empty constructor.
 	 */
@@ -90,7 +90,7 @@
 	 */
 	public Element[] getResourceMetadataDescriptor() 
 	{
-		return additionalProperties;
+		return _wsrmdProperties;
 	}
 	
 	/**
@@ -100,6 +100,6 @@
 	 */
 	public void setResourceMetadataDescriptor(Element[] rmd) 
 	{
-		this.additionalProperties = rmd;
+		this._wsrmdProperties = rmd;
 	}	
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java Thu Feb 26 13:52:33 2009
@@ -64,6 +64,11 @@
         return _realDirectory;
     }
     
+    /**
+     * Returns the default endpoint reference URI.
+     * 
+     * @return the default endpoint reference URI.
+     */
     public String getDefaultURIPrefix()
     {
         return new StringBuilder()
@@ -79,4 +84,14 @@
     		.append("/services/")
     		.toString();    	
     }
+    
+    /**
+     * Returns the context path name of QMan application.
+     * 
+     * @return the context path name of QMan application.
+     */
+    public String getContextPath()
+    {
+    	return _servletContext.getContextPath();
+    }
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/main/java/wsdl/QManWsResource.wsdl
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/wsdl/QManWsResource.wsdl?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/wsdl/QManWsResource.wsdl (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/wsdl/QManWsResource.wsdl Thu Feb 26 13:52:33 2009
@@ -93,7 +93,35 @@
 					</xsd:complexContent>
 				</xsd:complexType>
 			</xsd:element>
-		</xsd:schema>
+						
+			<xsd:complexType name="uuid">
+				<xsd:sequence>
+					<xsd:element name="uuid" type="xsd:string"/>
+				</xsd:sequence>
+			</xsd:complexType>	
+						
+			<xsd:complexType name="map">
+				<xsd:sequence>
+			 		<xsd:element name="entry" minOccurs="0" maxOccurs="unbounded">
+			 			<xsd:complexType>
+			 				<xsd:sequence>
+			 					<xsd:element name="key" type="xsd:string"/>
+			 					<xsd:element name="value" type="xsd:anyType"/>
+			 				</xsd:sequence>	
+			 			</xsd:complexType>
+			 		</xsd:element>
+			 	</xsd:sequence>
+			 </xsd:complexType>
+
+			<xsd:complexType name="result">
+				<xsd:sequence>
+					<xsd:element name="statusCode" type="xsd:long" />
+					<xsd:element name="statusText" type="xsd:string" />
+					<xsd:element name="outputParameters" type="qman:map"/>
+				</xsd:sequence>
+			</xsd:complexType>
+			
+		</xsd:schema>	
 	</wsdl:types>
 	<wsdl:message name="GetMetadataMsg">
   		<wsdl:part name="GetMetadataMsg" element="wsx:GetMetadata" />

Modified: qpid/trunk/qpid/java/management/client/src/main/java/wsdl/WS-ServiceGroupEntry-1_2.wsdl
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/main/java/wsdl/WS-ServiceGroupEntry-1_2.wsdl?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/main/java/wsdl/WS-ServiceGroupEntry-1_2.wsdl (original)
+++ qpid/trunk/qpid/java/management/client/src/main/java/wsdl/WS-ServiceGroupEntry-1_2.wsdl Thu Feb 26 13:52:33 2009
@@ -200,7 +200,7 @@
     </wsdl:binding>
 	<wsdl:service name="ServiceGroupEntryService">
     	<wsdl:port name="ServiceGroupEntryPort" binding="tns:ServiceGroupEntryBinding">
-    		<wsdl-soap:address location="http://romagazzarini:8080/wsrf/services/ServiceGroupEntry"/>
+    		<wsdl-soap:address location="http://localhost:8080/wsrf/services/ServiceGroupEntry"/>
     	</wsdl:port>
 	</wsdl:service>
 </wsdl:definitions>

Modified: qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/TestConstants.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/TestConstants.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/TestConstants.java (original)
+++ qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/TestConstants.java Thu Feb 26 13:52:33 2009
@@ -63,5 +63,5 @@
 	int SAMPLE_ACCESS_CODE = 1;
 	String YEARS = "years";
 	int SAMPLE_MIN_VALUE = 1;
-	int SAMPLE_MAX_VALUE = 120;	
+	int SAMPLE_MAX_VALUE = 120;		
 }
\ No newline at end of file

Modified: qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/configuration/ConfigurationTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/configuration/ConfigurationTest.java?rev=748154&r1=748153&r2=748154&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/configuration/ConfigurationTest.java (original)
+++ qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/configuration/ConfigurationTest.java Thu Feb 26 13:52:33 2009
@@ -23,16 +23,13 @@
 import java.util.Map;
 import java.util.UUID;
 
+import junit.framework.TestCase;
+
 import org.apache.qpid.management.TestConstants;
 import org.apache.qpid.management.domain.handler.base.IMessageHandler;
 import org.apache.qpid.management.domain.handler.impl.ConfigurationMessageHandler;
 import org.apache.qpid.management.domain.handler.impl.InstrumentationMessageHandler;
 import org.apache.qpid.management.domain.handler.impl.SchemaResponseMessageHandler;
-import org.apache.qpid.management.domain.model.AccessMode;
-import org.apache.qpid.management.domain.model.type.Type;
-import org.apache.qpid.management.domain.model.type.Uint8;
-
-import junit.framework.TestCase;
 
 /**
  * Test case for Configuration singleton.
@@ -46,22 +43,7 @@
     {
         assertSame(Configuration.getInstance(),Configuration.getInstance());
     }
-    
-    /**
-     * Tests the execution of getType() method when a valid code is supplied.
-     * 
-     * <br>precondition : the requested type already exist on the configuration.
-     * <br>postcondition : the requested type is returned and no exception is thrown.
-     */
-    public void testGetTypeOk() throws UnknownTypeCodeException 
-    {
-        TypeMapping mapping = new TypeMapping(TestConstants.VALID_CODE,new Uint8());
-        Configuration.getInstance().addTypeMapping(mapping);
-        Type type = Configuration.getInstance().getType(TestConstants.VALID_CODE);
         
-        assertTrue(type instanceof Uint8);
-    }
-    
     /**
      * Tests the execution of getType() method when a unknown code is supplied.
      * 
@@ -79,22 +61,7 @@
             assertEquals(TestConstants.VALID_CODE*10001,expected.getCode());
         }        
     }
-    
-    /**
-     * Tests the execution of getAccessMode() method when a valid code is supplied.
-     * 
-     * <br>precondition : the requested access mode already exist on the configuration.
-     * <br>postcondition : the requested access mode is returned and no exception is thrown.
-     */
-    public void testGetAccessModeOk() throws UnknownAccessCodeException
-    {
-        AccessModeMapping mapping = new AccessModeMapping(TestConstants.VALID_CODE,AccessMode.RW);
-        Configuration.getInstance().addAccessModeMapping(mapping);
-        AccessMode accessMode = Configuration.getInstance().getAccessMode(TestConstants.VALID_CODE);
-
-        assertSame(AccessMode.RW,accessMode);
-    }
-    
+        
     /**
      * Tests the execution of getAccessMode() method when a unknown code is supplied.
      * 

Added: qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/BaseWsDmAdapterTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/BaseWsDmAdapterTestCase.java?rev=748154&view=auto
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/BaseWsDmAdapterTestCase.java (added)
+++ qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/BaseWsDmAdapterTestCase.java Thu Feb 26 13:52:33 2009
@@ -0,0 +1,185 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.management.wsdm;
+
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.Array;
+import java.net.URI;
+import java.util.UUID;
+
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.muse.ws.addressing.EndpointReference;
+import org.apache.muse.ws.resource.remote.WsResourceClient;
+import org.apache.muse.ws.resource.sg.remote.ServiceGroupClient;
+import org.apache.qpid.management.Names;
+import org.apache.qpid.management.Protocol;
+import org.apache.qpid.management.TestConstants;
+
+/**
+ * Test case for WS-Resource lifecycle management.
+ * 
+ * @author Andrea Gazzarini
+ */
+public abstract class BaseWsDmAdapterTestCase extends TestCase implements TestConstants{
+	
+	protected MBeanServer _managementServer;
+	protected ObjectName _resourceObjectName;
+		
+	protected WsResourceClient _resourceClient;
+	protected MBeanInfo _mbeanInfo;
+	
+	/**
+	 * Set up fixture for this test case.
+	 * 
+	 * @throws Exception when the test case intialization fails.
+	 */
+	protected void setUp() throws Exception 
+	{		
+		_managementServer = ManagementFactory.getPlatformMBeanServer();
+		
+        ServiceGroupClient serviceGroup = getServiceGroupClient();
+        WsResourceClient [] members = serviceGroup.getMembers();
+        
+        assertEquals(
+        		"No resource has been yet created so how is " +
+        			"it possible that service group children list is not empty?",
+        		0,
+        		members.length);
+
+        _managementServer.invoke(
+        		Names.QPID_EMULATOR_OBJECT_NAME, 
+        		"createQueue", 
+        		new Object[]{_resourceObjectName = createResourceName()}, 
+        		new String[]{ObjectName.class.getName()});
+                
+        members = serviceGroup.getMembers();
+        assertEquals(
+        		"One resource has just been created so " +
+        			"I expect to find it on service group children list...",
+        		1,
+        		members.length);
+        
+        _resourceClient = members[0];
+        _mbeanInfo = _managementServer.getMBeanInfo(_resourceObjectName);
+	}
+
+	/**
+	 * Shutdown procedure for this test case.
+	 * 
+	 * @throws Exception when either the server or some resource fails to shutdown.
+	 */
+	@Override
+	protected void tearDown() throws Exception
+	{
+        ServiceGroupClient serviceGroup = getServiceGroupClient();
+        WsResourceClient [] members = serviceGroup.getMembers();
+
+		_managementServer.invoke(
+				Names.QPID_EMULATOR_OBJECT_NAME,
+				"unregister",
+				new Object[]{_resourceObjectName},
+				new String[]{ObjectName.class.getName()});
+
+      	members = serviceGroup.getMembers();
+
+      	assertEquals(
+      			"No resource has been yet created so how is it possible that service group children list is not empty?",
+      			0,
+      			members.length);
+	}
+	
+	/**
+	 * Test the WS-RP GetResourceProperty interface of the WS-DM adapter.
+	 * 
+	 * <br>precondition : a ws resource exists and is registered. 
+	 * <br>postcondition : property values coming from WS-DM resource are the same of the JMX interface.
+	 */
+	public void testGetResourcePropertiesOK() throws Exception
+	{
+		MBeanAttributeInfo [] attributesMetadata = _mbeanInfo.getAttributes();
+		for (MBeanAttributeInfo attributeMetadata : attributesMetadata)
+		{
+			String name = attributeMetadata.getName();
+			Object propertyValues = _resourceClient.getPropertyAsObject(
+					new QName(
+							Names.NAMESPACE_URI,
+							name,
+							Names.PREFIX),
+					Class.forName(attributeMetadata.getType()));
+			
+			int length = Array.getLength(propertyValues);
+			if (length != 0)
+			{
+				Object propertyValue = Array.get(propertyValues, 0);
+				
+				assertEquals(
+						"Comparison failed for property "+name,
+						_managementServer.getAttribute(_resourceObjectName,name),
+						propertyValue);
+			} else {
+				assertNull(
+						String.format(
+								"\"%s\" property value shouldn't be null. Its value is %s",
+								name,
+								_managementServer.getAttribute(_resourceObjectName,name)),
+								_managementServer.getAttribute(_resourceObjectName,name));
+			}
+		}
+	}
+			
+	/**
+	 * Creates a service group client reference.
+	 * 
+	 * @return a service group client reference.
+	 */
+	private ServiceGroupClient getServiceGroupClient()
+	{
+		URI address = URI.create(
+				Protocol.DEFAULT_ENDPOINT_URI.replaceFirst("8080",System.getProperty(Names.ADAPTER_PORT_PROPERTY_NAME)));
+		return new ServiceGroupClient(new EndpointReference(address));
+	}
+	
+	/**
+	 * In order to test the behaviour of the WS-DM adapter, at 
+	 * least one resource must be created. This is the method that 
+	 * returns the name (ObjectName on JMX side, Resource-ID on WSDM side)
+	 * of that resource
+	 * 
+	 * @return the name of the MBean instance that will be created.
+	 * @throws Exception when the name if malformed. Practically never.
+	 */
+	private ObjectName createResourceName() throws Exception
+	{
+		return new ObjectName(
+				"Q-MAN:objectId="+UUID.randomUUID()+
+				", brokerID="+UUID.randomUUID()+
+				",class=queue"+
+				",package=org.apache.qpid"+
+				",name="+System.currentTimeMillis());
+	}
+}
\ No newline at end of file

Added: qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/GetMultipleResourcePropertiesTestCase.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/GetMultipleResourcePropertiesTestCase.java?rev=748154&view=auto
==============================================================================
--- qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/GetMultipleResourcePropertiesTestCase.java (added)
+++ qpid/trunk/qpid/java/management/client/src/test/java/org/apache/qpid/management/wsdm/GetMultipleResourcePropertiesTestCase.java Thu Feb 26 13:52:33 2009
@@ -0,0 +1,126 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.management.wsdm;
+
+import java.util.Date;
+import java.util.UUID;
+
+import javax.management.MBeanAttributeInfo;
+import javax.xml.namespace.QName;
+
+import org.apache.muse.ws.addressing.soap.SoapFault;
+import org.apache.muse.ws.resource.WsrfConstants;
+import org.apache.qpid.management.Names;
+import org.w3c.dom.Element;
+
+/**
+ * Test case for Web Service Resource Properties interfaces.
+ * Those interfaces are defined on http://docs.oasis-open.org/wsrf/wsrf-ws_resource_properties-1.2-spec-os.pdf
+ * (Web Services Resource Properties 1.2 - (WS-ResourceProperties).
+ * For a better explanation see chapter 5 of the specification above.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class GetMultipleResourcePropertiesTestCase extends BaseWsDmAdapterTestCase
+{
+	/**
+	 * Tests the GetMultipleResourceProperties interface when the request contains 
+	 * an unknwon target resource.
+	 * 
+	 * <br>precondition : the GetMultipleResourceProperties request contains an unknwon resource.
+	 * <br>postcondition : a SoapFault is thrown and the corresponding detail contains an 
+	 * 								UnknownResourceFault element.
+	 */
+	public void testGetMultipleResourcePropertiesKO_WithUnknownResourceFault() throws Exception
+	{
+		try 
+		{
+			_resourceClient.getEndpointReference().removeParameter(Names.RESOURCE_ID_QNAME);
+			_resourceClient.getEndpointReference().addParameter(Names.RESOURCE_ID_QNAME,"lablabalbal");
+			_resourceClient.setTrace(true);
+			
+			_resourceClient.getMultipleResourceProperties(new QName[]{});
+		} catch(SoapFault expected)
+		{
+			assertEquals(
+					WsrfConstants.RESOURCE_UNKNOWN_QNAME.getLocalPart(),
+					expected.getDetail().getLocalName());
+		}
+	}
+	
+	/**
+	 * Test the WS-RP GetResourceProperties interface of the WS-DM adapter.
+	 * 
+	 * <br>precondition : a ws resource exists and is registered. 
+	 * <br>postcondition : Properties are correctly returned according to WSRP interface and they (their value)
+	 * 								are matching with corresponding MBean properties.
+	 */
+	public void testGetMultipleResourcePropertiesOK() throws Exception
+	{
+		MBeanAttributeInfo [] attributesMetadata = _mbeanInfo.getAttributes();
+		QName[] names = new QName[attributesMetadata.length];
+		
+		int index = 0;
+		for (MBeanAttributeInfo attributeMetadata : _mbeanInfo.getAttributes())
+		{
+			QName qname = new QName(Names.NAMESPACE_URI,attributeMetadata.getName(),Names.PREFIX);
+			names[index++] = qname;
+		}
+		
+		Element[] properties =_resourceClient.getMultipleResourceProperties(names);
+		for (Element element : properties)
+		{
+			String name = element.getLocalName();
+			Object value = _managementServer.getAttribute(_resourceObjectName, name);
+			if ("Name".equals(name))
+			{
+				assertEquals(
+						value,
+						element.getTextContent());
+			} else if ("Durable".equals(name))
+			{
+				assertEquals(
+						value,
+						Boolean.valueOf(element.getTextContent()));				
+			} else if ("ExpireTime".equals(name))
+			{
+				assertEquals(
+						value,
+						new Date(Long.valueOf(element.getTextContent())));								
+			} else if ("MsgTotalEnqueues".equals(name))
+			{
+				assertEquals(
+						value,
+						Long.valueOf(element.getTextContent()));								
+			} else if ("ConsumerCount".equals(name))
+			{
+				assertEquals(
+						value,
+						Integer.valueOf(element.getTextContent()));								
+			}else if ("VhostRef".equals(name))
+			{
+				assertEquals(
+						value,
+						UUID.fromString(element.getTextContent()));								
+			}
+		}
+	}
+}



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org