Hello Ruwan,

see my comments inline.

Ruwan Linton schrieb:
Jens,

Jens Goldhammer wrote:
Hello,

as point out ealier I have some knowledge about the ibm websphere registry and repository. There is a really nice feature in it- a search function based on xpath to get e.g. several endpoints of services which implement the same wsdl interface (porttype). This function can be used dynamiccal inside the websphere esb to have an endpoint lookup. To have a good performance in runtime, the developers shredder the wsdl-file after uploading and hold all artifacts in a database to get back results quickly.
I am sorry, can you please explain this a bit more in detail?
Ok, I think you are interested in the shreddering-part. As far as I know, the uploaded wsdl-file will be parsed and all relevant metadata like wsdl:types, wsdl:interfaces, wsdl:messages and so on will be extracted from it, so that you have several database tables which hold fragments of the wsdl-file . The developers have coded a complete object hierachy where all entries in the registry are a baseObject and become specific objects depending on their type (wsdl, xsd, policy etc.). For more information look at : http://publib.boulder.ibm.com/infocenter/sr/v6r1/index.jsp?topic=/com.ibm.sr.doc/programguide06.html

Code-sample of wsrr-api to query it: graphQuery.setQueryExpression("/WSRR/[EMAIL PROTECTED]'http://com.ibm.wsrr.samples/']");
       List results = serviceRegistry.executeQuery(graphQuery);

If you specifies the xpath-expression like /WSRR/[EMAIL PROTECTED]"http://com.ibm.wsrr.samples";'], you will get all wsdl documents which have this namespace. I don´t know the implementation details, but I think, they will make a reference in database which wsdl-documents have this certain namespace and you will get a java list of objects which represent the wsdl documents.

I have following use case in my mind: You want to get all soap 1.1 endpoints which implemented a certain porttype to send them a copy via the clone-mediator. In WSRR you can get all wsdl services by typing /WSRR/WSDLService[portType="StockQuotePortType"]... Maybe this can be enhanced by having endpoint at the end of the xpath expression. query: #/WSRR/WSDLService[portType="StockQuotePortType"]/endpoint[type=soap1.1]# and you will get a list of soap 1.1 endpoints which implement this portType.

By having the possibility to import parts of a wsdl into another, you can have an abstract wsdl-document with types, messages and portTypes and two or more definite wsdl-document which import the abstract one and provide different endpoints and bindings.

example:
*StockquoteInterface.wsdl:*

<?xml version="1.0"?>
<definitions name="StockQuote" targetNamespace="http://com.ibm.wsrr.samples/";
       xmlns:tns="http://com.ibm.wsrr.samples/";
       xmlns:xsd1="http://com.ibm.wsrr.samples/";
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
       xmlns="http://schemas.xmlsoap.org/wsdl/";>

   <types>
       <schema targetNamespace="http://com.ibm.wsrr.samples/";
               xmlns="http://www.w3.org/2001/XMLSchema";>
           <element name="TradePriceRequest">
               <complexType>
                   <all>
                       <element name="tickerSymbol" type="string"/>
                   </all>
               </complexType>
           </element>
           <element name="TradePrice">
               <complexType>
                   <all>
                       <element name="price" type="float"/>
                   </all>
               </complexType>
           </element>
       </schema>
   </types>

   <message name="GetLastTradePriceInput">
       <part name="body" element="xsd1:TradePriceRequest"/>
   </message>

   <message name="GetLastTradePriceOutput">
       <part name="body" element="xsd1:TradePrice"/>
   </message>

   <portType name="StockQuotePortType">
       <operation name="GetLastTradePrice">
           <input message="tns:GetLastTradePriceInput"/>
           <output message="tns:GetLastTradePriceOutput"/>
       </operation>
   </portType>

</definitions>

*StockQuoteBinding.wsdl:*

<?xml version="1.0"?>
<definitions name="StockQuote" targetNamespace="http://com.ibm.wsrr.samples/";
       xmlns:tns="http://com.ibm.wsrr.samples/";
       xmlns:xsd1="http://com.ibm.wsrr.samples/";
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
       xmlns="http://schemas.xmlsoap.org/wsdl/";>

<import namespace="http://com.ibm.wsrr.samples/"; location="StockQuoteInterface.wsdl"/>

   <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
       <operation name="GetLastTradePrice">
<soap:operation soapAction="http://com.ibm.serviceregisty.samples/GetLastTradePrice"/>
               <input>
                   <soap:body use="literal"/>
               </input>
               <output>
                   <soap:body use="literal"/>
               </output>
           </operation>
   </binding>

</definitions>

*StockQuoteService.wsdl:*

<?xml version="1.0"?>
<definitions name="StockQuote" targetNamespace="http://com.ibm.wsrr.samples/";
       xmlns:tns="http://com.ibm.wsrr.samples/";
       xmlns:xsd1="http://com.ibm.wsrr.samples/";
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
       xmlns="http://schemas.xmlsoap.org/wsdl/";>

<import namespace="http://com.ibm.wsrr.samples/"; location="StockQuoteBinding.wsdl"/>

   <service name="StockQuoteService">
       <documentation>My first service</documentation>
       <port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
<soap:address location="http://com.ibm.wsrr.samples/stockquote"/>
       </port>
   </service>

</definitions>

In this case you can have several StockQuoteServices which only import The StockQuoteBinding and provide different endpoints. Maybe this is completly unnecessary because you can completly include this into one wsdl-file. But you can insert more endpoints later without changing something. In case you have one wsdl document you have to insert the endpoint. The problem indeed is the same: How can I effiently search in the wsdl-files to get several endpoints back depending on my needs? I think, the wsrr makes this in a very good way. In Synapse you have the wsdl-endpoint which parses the wsdl document and return an endpoint for a certain port and servicename.

I think, a clone-mediator only makes sense to send messages to endpoints which understand the soap message by implementing the same wsdl interface (portType in 1.1). So I think the approach above would scope that. This is only one side of having a dynamic recipient list. Another point is to let the services register dynamically on the esb. I have seen that in JBOSS Esb where started services register on the esb with a config message after deploying them. Do you have any idea to this? Does this makes sense? You have thought of extending the atom-mediator. Any update for this?

I hope, my sentences are clearer now.

Your rest interface seems to be very good (I haven´t tested it yet), but this implies to know the real url of a ressource, e.g. an endpoint for a service and the numbers of endpoints. For a more dynamic use I would prefer these search functions. Additionally, this would help to implement the dynamic recipient list where synapse can dynamically get the recipients for the clone-mediator....
This seems cool, actually we had a requirement on specifying the targets for the clone mediator dynamically and I think this would address that. Thanks for the information.

The user only provides the xpath-expression and Synapse takes the rest.
Again, are you referring to the clone mediator case here? if not can you please explain what you exactly meant here?
Yes, I thought of the clone mediator.

Thanks,
Jens

Thanks,
Ruwan
Good idea or not?

Thanks,
Jens

_______________________________________________
Esb-java-user mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/esb-java-user



_______________________________________________
Esb-java-user mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/esb-java-user

Reply via email to