Hi everyoneAs part of my project, I'm working on a way to make Taverna look up service addresses at workflow enactment, and I could do with some advice on the best way to do it. I'm asking here because I think the answers are likely to be useful for other people too.
The situation:Our project is assembling a number of services that fit abstract profiles (according to what WSDL porttype they support and what dataset they are bound to). However, we do not have stable instances of any of these services for various reasons (we've experienced problems with developers being unable to pick a fixed address, and we've also had trouble with some service providers suffering catastrophic failures of both power and disks). To work around this, we have a registry service that provides a map from abstract service identifiers to instances of that service; if one knows which abstract service one wants, one can quickly find where to go at the moment. There's a library under development which will wrap up the details and provide a simple interface (abstractURI -> ordered concreteURI sequence) so I won't have to deal with the details of that part. Note that in a number of cases, we have services that are conceptually different despite having the same porttype, due to being bound to a different dataset (the interface is independent of the database that it services).
However, it's not entirely clear what is the best way to connect this to Taverna. I know that we don't want to just do discovery at workflow design time; we particularly *do not want to bind concrete service instance addresses into saved workflows*, precisely because we know those are not stable. (We do, however, want to have the concrete address reported as part of the provenance data produced by a workflow run.) I believe it is acceptable to repeat the lookup multiple times during a workflow run; I (or the provider of the lookup library) can implement a cache easily enough if necessary. For various reasons, the other project partners do not want to implement a redirect service; for one thing, that would imply having that redirect service in a stable location which we've so far found to be impractical (alas).
All the services support SOAP interfaces, though there is also a plan to add REST interfaces to some of them as well[*]. I'd rather not have to write a lot of plugins, for obvious reasons. It is entirely acceptable to have a fake set of WSDL documents for the abstract services involved. It is also possible to handle location of the registry by having a list of locations on a web page. We can place those pages (abstract APIs, registry locations) on a standard replicated high-availability website since they're documents that will not be changing frequently.
So... What's the best way forward? I've heard that it is possible to insert something in the dispatch stack, which sounds (from a position of incomplete knowledge) like the right sort of point to intercept, but the developers' trails don't seem to explain how (or I missed it).
(I think that covers the essentials of my situation, but if anyone thinks I've missed something critical, just ask!)
Donal.[* I need a solution for SOAP/WSDL; REST can be handled through other mechanisms if necessary. I also don't need REST as soon as SOAP/WSDL. ]
<<attachment: donal_k_fellows.vcf>>
------------------------------------------------------------------------------
_______________________________________________ taverna-hackers mailing list [email protected] Web site: http://www.taverna.org.uk Mailing lists: http://www.taverna.org.uk/about/contact-us/ Developers Guide: http://www.taverna.org.uk/developers/
