Return-Path: Delivered-To: apmail-qpid-commits-archive@www.apache.org Received: (qmail 33697 invoked from network); 26 Feb 2009 13:53:12 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 26 Feb 2009 13:53:12 -0000 Received: (qmail 23340 invoked by uid 500); 26 Feb 2009 13:53:12 -0000 Delivered-To: apmail-qpid-commits-archive@qpid.apache.org Received: (qmail 23299 invoked by uid 500); 26 Feb 2009 13:53:12 -0000 Mailing-List: contact commits-help@qpid.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@qpid.apache.org Delivered-To: mailing list commits@qpid.apache.org Received: (qmail 23290 invoked by uid 99); 26 Feb 2009 13:53:12 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Feb 2009 05:53:12 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Feb 2009 13:52:58 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 0CD3A2388999; Thu, 26 Feb 2009 13:52:37 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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... Date: Thu, 26 Feb 2009 13:52:35 -0000 To: commits@qpid.apache.org From: agazzarini@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090226135237.0CD3A2388999@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 @@ - @@ -49,7 +48,6 @@ - @@ -59,6 +57,8 @@ + + @@ -195,7 +195,7 @@ - + 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 @@ org.apache.qpid.management.wsdm.muse.serializer.DateSerializer - org.apache.muse.core.routing.SimpleResourceRouter + org.apache.muse.ws.resource.impl.WsResourceRouter log/muse.log SEVERE 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 = " : Operation Invocation failure for operation."; String QMAN_100038_UNABLE_TO_SEND_WS_NOTIFICATION = " : Unable to send notification."; String QMAN_100039_UNABLE_TO_CONFIGURE_PROPERLY_WORKER_MANAGER = " : Unable to properly configure WorkManager. A malformed property (NaN) was given as input parameter."; - + String QMAN_100040_UNABLE_TO_LOCATE_WSRP_PROPERTIES = " : 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 managementClients = new ArrayList(); 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 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 getManagementClients() - { - return managementClients; - } + private void configureWorkManager() + { + Configuration configuration = Configuration.getInstance(); + _workManager = new ThreadPoolExecutor( + configuration.getWorkerManagerPoolSize(), + configuration.getWorkerManagerMaxPoolSize(), + configuration.getWorkerManagerKeepAliveTime(), + TimeUnit.MILLISECONDS, + new ArrayBlockingQueue(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 arrayTypesAlreadyDeclared = new HashMap(); + 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 { - /* - - - - - - - - - - - - - - -*/ - 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); - } -/* - - - - - - - - - - - - - - - - - - - - - -*/ - 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 @@ */ + try { - // // Element methodRequestElement= _document.createElement("xsd:element"); @@ -361,13 +195,13 @@ methodRequestElement.setAttribute("type", "qman:"+methodNameRequest); // - 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); /* @@ -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); - /* @@ -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 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ - + 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. - * - *
precondition : the requested type already exist on the configuration. - *
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. - * - *
precondition : the requested access mode already exist on the configuration. - *
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. + * + *
precondition : a ws resource exists and is registered. + *
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. + * + *
precondition : the GetMultipleResourceProperties request contains an unknwon resource. + *
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. + * + *
precondition : a ws resource exists and is registered. + *
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