Hi devs, I'm fighting with the WS-DM adapter for QMan and I must say that it's a very interesting topic... Just a simple mail to inform you about the status of the work. A first version of the Adapter / Connector is already done (you can see two examples below). The QMan WebService is implementig the following operation :
- getMetadata() : this operation comes from WS-DM specs and returns the WSDL (that is, the metadata of a manageable resource); - getResourceProperty(propertyName) : this operation comes from WS-DM specs and returns the value of the requested property. Note that the property is supposed to be part of the QMan web service definition and it isn't a property of a managed object instance. QMan at the moment has only two properties : 1. connectedBrokerCount : how many brokers QMan is connected with; 2. managedInstanceCount : how many manageable instances (that is : mbeans) are registered under the Q-MAN domain; - getResourcePropertyDocument() : this operation comes from WS-DM specs and returns an XML containing all the properties of the manageable resource (QMan); - getMultipleResourceProperties(propNames []) : this operation comes from WS-DM specs and returns an array containing the values of the requested properties; - queryNames (jmxQuery): returns an array containings the name of the mbean(s) registered under the Q-MAN domain and matching the given jmx query; For example, if you call this operation with "*" as jmx query, it will return all the mbeans registered under the Q-MAN domain; if you use "*,class=queue" you will obtain all the queue instances; - getManagedEntityAttributeValue(objectName, attributeName) : this is the operation that should be invoked in order to get the value of an attribute of a managed instance (mbean) - invoke(objectName, operationName, arguments[]) : invokes a method on the given mbean instance using the given set of arguments. This is a void method so if the invocation succeeds there's no return value (see the example 1 below). Otherwise, if there's an error, a soap fault is generated on the response and sent back to the client (see example 2 below) Example 1 : successfull invocation of purge(int) on a queue instance This is the WS-DM SOAP request for invoking the "invoke" method on QMan (and therefore on the specified managed object instance). In the example below I'm using the "Invoke" operation of the QMan Web Service in order to invoke the purge(int) method on a queue instance. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <wsa:To xmlns:wsa="http://www.w3.org/2005/08/addressing"> http://127.0.0.1:8080/bridge/services/QMan</wsa:To> <wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing"> http://amqp.apache.org/qpid/management/qman/Invoke</wsa:Action> <wsa:MessageID xmlns:wsa="http://www.w3.org/2005/08/addressing"> uuid:fe27279e-7426-98f9-a5b4-1ce404014eab</wsa:MessageID> <wsa:From xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:Address>http://www.w3.org/2005/08/addressing/role/anonymous </wsa:Address> </wsa:From> </soap:Header> <soap:Body> <pfx0:Invoke xmlns:pfx0="http://amqp.apache.org/qpid/management/qman " xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"> <pfx0:AttributesPart> brokerID=ds23321q-7422-98f1-b5b4-1ci404014cdb,type=Object,package=org.apache.qpid.broker,class=queue,objectID=s24958q-9981-77f1-b5b1-1ci818188cdb </pfx0:AttributesPart> <pfx0:OperationName>purge</pfx0:OperationName> <pfx0:Arguments> <pfx0:Arguments xsi:type="xsd:int">1</pfx0:Arguments> </pfx0:Arguments> </pfx0:Invoke> </soap:Body> </soap:Envelope> ...and this is the response from QMan! Operation purge was successfully executed. <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing"> <soapenv:Header> <wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To> <wsa:ReplyTo> <wsa:Address>http://www.w3.org/2005/08/addressing/none </wsa:Address> </wsa:ReplyTo> <wsa:MessageID>urn:uuid:231D56A39DAB615D1F12277783589102 </wsa:MessageID> <wsa:Action>http://amqp.apache.org/qpid/management/qman/Invoke </wsa:Action> <wsa:RelatesTo wsa:RelationshipType=" http://www.w3.org/2005/08/addressing/reply"> uuid:2461e21c-0190-108c-2810-1e6d4acd2644</wsa:RelatesTo> </soapenv:Header> <soapenv:Body> <muse-op:InvokeResponse xmlns:muse-op="http://amqp.apache.org/qpid/management/qman" xmlns:tns="http://qman.management.qpid.apache.org" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"/> </soapenv:Body> </soapenv:Envelope> Example 2 : invocation of resetLifespan() on a session instance with exception The request : <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <wsa:To xmlns:wsa="http://www.w3.org/2005/08/addressing"> http://127.0.0.1:8080/bridge/services/QMan</wsa:To> <wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing"> http://amqp.apache.org/qpid/management/qman/Invoke</wsa:Action> <wsa:MessageID xmlns:wsa="http://www.w3.org/2005/08/addressing"> uuid:rt82921e-7192-09f2-a3b4-1ce862664ijs</wsa:MessageID> <wsa:From xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:Address>http://www.w3.org/2005/08/addressing/role/anonymous </wsa:Address> </wsa:From> </soap:Header> <soap:Body> <pfx0:Invoke xmlns:pfx0="http://amqp.apache.org/qpid/management/qman " xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"> <pfx0:AttributesPart> brokerID=ds23321q-7422-98f1-b5b4-1ci404014cdb,type=Object,package=org.apache.qpid.broker,class=session,objectID=k99282e-6251-12f4-r631-2ci991922cdb </pfx0:AttributesPart> <pfx0:OperationName>resetLifeSpan</pfx0:OperationName> <pfx0:Arguments/> </pfx0:Invoke> </soap:Body> </soap:Envelope> ...and the corresponding response when you can see the thrown Soap Fault: <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing"> <soapenv:Header> <wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To> <wsa:ReplyTo> <wsa:Address>http://www.w3.org/2005/08/addressing/none </wsa:Address> </wsa:ReplyTo> <wsa:MessageID>urn:uuid:BAB241AD57E917253C12277792998902 </wsa:MessageID> <wsa:Action>http://amqp.apache.org/qpid/management/qman/Invoke </wsa:Action> <wsa:RelatesTo wsa:RelationshipType=" http://www.w3.org/2005/08/addressing/reply"> uuid:e5544f59-4cf3-4564-1daf-8fe550fa7dba</wsa:RelatesTo> </soapenv:Header> <soapenv:Body> <soap:Fault xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tns="http://qman.management.qpid.apache.org" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"> <soap:Code xmlns:qman=" http://amqp.apache.org/qpid/management/qman"> <soap:Value>qman:Service</soap:Value> </soap:Code> <soap:Reason> <soap:Text>UnknownObject</soap:Text> </soap:Reason> <soap:Detail> <qman:OperationInvocationFault xmlns:qman=" http://amqp.apache.org/qpid/management/qman"> <wsrf-bf:Timestamp xmlns:wsrf-bf=" http://docs.oasis-open.org/wsrf/bf-2 ">2008-11-27T10:48:21+01:00</wsrf-bf:Timestamp> <wsrf-bf:OriginatorReference xmlns:wsrf-bf=" http://docs.oasis-open.org/wsrf/bf-2"> <wsa:ReferenceParameters/> <wsa:Address> http://192.168.197.51:8080/bridge/services/QMan</wsa:Address> </wsrf-bf:OriginatorReference> <wsrf-bf:ErrorCode Dialect=" http://amqp.apache.org/qpid/management/errno" xmlns:wsrf-bf=" http://docs.oasis-open.org/wsrf/bf-2"> <qman:StatusCode>1</qman:StatusCode> </wsrf-bf:ErrorCode> </qman:OperationInvocationFault> </soap:Detail> </soap:Fault> </soapenv:Body> </soapenv:Envelope> Any comments would be appreciated. Regards, Andrea
