[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.technology.ohf] Re: XCA on the bridge

Hey Jesse,

Ummm, I think "highly experimental" is probably the way to put it right now. Basically it was never tested, although I think Sage might've tried to use it @ HIMSS. So much of our testing is dependent on IBM infrastructure systems and the IBM XCA gateways didn't end up happening, so as a result we never got a chance to fully test out our XCA implementation. We also never had a chance to test it @ Connectathon either.


Let me explain XCA in OHF first and that'll answer a couple of your questions:


1. Straight from the XDS.b Consumer: It *SHOULD* work without a problem. There is the requirement of the "copy over" of the homeId / homeCommunityId into queries and retrieves, which is up to the implementor to handle. The general rule should be - if you see a homeCommunityId come back from a query response, all further query responses relating to that document ID should contain it. Also, any retrieves on that document ID should contain it.

The XDS.b Consumer's retrieveDocumentSet method contains an algorithm to determine "where" to send each retrieve request and aggregate the responses. The way the algorithm works is.. in the first condition, if a RetrieveDocumentRequest contains a homeCommunityId, it *ALWAYS* will get sent to the initiating gateway set in the XDS Consumer - setInitiatingGateway(java.net.URI). The base assumption is you only have 1 initiating gateway per affinity domain and I think it's safe to assume that.

2. The Bridge, at least in the fully untested world, implements this paradigm directly. In the Retrieve Document Set Bridge method, the Bridge calls Consumer.setInitiatingGatewayURI(java.net.URI) from the RHIO's XCA Gateway. The key again (as with the XDS Consumer) is that when you get a query response from the Bridge, if a homeCommunityId value is present in the XDSDocType, you must copy it over the XDSDocType [] sent in the RetrieveDocumentSetRequestType.


Now, specifically for your questions: > 1. If I do a provide and register, then it will go to the repository > named "XDS-B-Facade". What is this facade thing btw?

That is correct. P&R goes to the repository id set for the RHIO. Your discovery that it checks all repository unique ids is actually new as-of after Connectathon. Previously you had to define each repository in the list of repositories for a RHIO but that was cumbersome. The XDS.b Repository Facade was/is a simple Axis2 Web service I wrote early last fall to semantically check our XDS.b Consumer/Source implementation while the IBM XDS.b Repository was still under development. It just blindly accepted and acknowledged the request with a list :)

> 2.  If I do a document query I can pass a boolean to use XCA or not.  If
> I pass false, then the query will go to the registry named
> "XDS-B-Facade".  If I pass true, then the query will go to the gateway
> named "GATEWAY_IBM".

This is true. If "useXCA" is true, then the XDS Consumer uses the <storedQueryUrl> from the RHIO's <xcaGateway>. Otherwise it uses <storedQueryUrl> from the RHIO's <registry>.

> The part I'm confused about is when I want to
> do the "retrieve document set" operation.  There is no boolean parameter
> to say whether I want to use the repository in my rhio to do the
> retrieve or whether I want to use the gateway.

See 1 and 2 from me above. This is because of the built-in controls in the XDS Consumer. We had some go-arounds with IHE regarding the semantics of splitting requests up and having a retrieve document set request with mixed destinations (different repository unique ids, different home community ids, etc). Based on RHIO paradigms and assumptions set out by the author of XCA (from IBM), we decided that the "routing policy" that the XDS Consumer uses is that the home community id takes precedence...and if it is set in the request, then the request, regardless of repositoryUniqueId, gets routed through the initiating gateway.

For the Bridge, this very explicitly means... if you set homeCommunityId in one of the XDSDocType items sent to retrieveDocumentSet, then that specific request will get routed to the <retrieveDocumentSet> URL set in the RHIO's <xcaGateway>. If there is no <xcaGateway> set for the RHIO, it will throw an error (or it'll give a partial success / failure). If homeCommunityId is not set, it'll iterate through the list of all XDS.b repositories in rhioConfig.xml in an attempt to resolve the repositoryUniqueId => URL mapping.


> So, if I had to guess, I would think that if the document query returned > a homeCommunityId and I faithfully passed that homeCommunityId along to > the "retrieve document set" command that the bridge would see that field > is not blank AND that I have a gateway specified in my rhio's > configuration. Therefore the bridge would know to issue the "retrieve > document set" to the gateway instead of to one of my repositories. Is > that true or am I way off?

Yep! That's exactly how it works. If you read XCA, you actually see that it is part of XDS - it is embedded and, essentially, XDS support implies XCA support. Much to our chagrin, to fully internalize support for XCA (and obfuscate it from the implementor) would require a greater level of intelligence on the Consumer's part and a level of statefulness that we do not want to introduce in the Bridge. As a result, it's dependent on a "copy over" paradigm where - if you see something (in this case, the homeCommunityId) - you must copy it over into further requests regarding that document.

Hope this helps! The reason this never got documented all that well / acknowledged / tested really centers on the fact that IBM never built their XCA gateway. We'll be at EU Connectathon in a couple weeks, hopefully I'll get a chance to test XCA support further then.

Thanks,
-Matt



Jesse Pangburn wrote:
Hi,
I'm wondering how XCA works with the bridge. Is it highly experimental at this stage or you guys think it basically works? I've checked the wiki and found nothing on how to use it, I've checked the javadoc and gotten some hints from the API, and I've checked the rhioConfig.xml and gotten some more hints.


Here's what I believe to be true with respect to the following rhio definition:
<rhio>
<name>XDS.b RHIO</name>
<publicHealthcareAffinityDomain>false</publicHealthcareAffinityDomain>
<config>
<registryId>XDS-B-Facade</registryId>
<repositoryId>XDS-B-Facade</repositoryId>
<xcaGatewayId>GATEWAY_IBM</xcaGatewayId>
<pixId>lswin10</pixId>
<auditId>lswin10</auditId>
</config>
</rhio>
1. If I do a provide and register, then it will go to the repository named "XDS-B-Facade". What is this facade thing btw?
2. If I do a document query I can pass a boolean to use XCA or not. If I pass false, then the query will go to the registry named "XDS-B-Facade". If I pass true, then the query will go to the gateway named "GATEWAY_IBM".


Those are the items I am reasonably sure of given what I've seen, correct me if I'm wrong. The part I'm confused about is when I want to do the "retrieve document set" operation. There is no boolean parameter to say whether I want to use the repository in my rhio to do the retrieve or whether I want to use the gateway. One thing I know about this from XDS.b is that when I do "retrieve document set", the bridge uses the "repository unique id" parameter to search the entire rhioConfig.xml (regardless of if the repository is defined in my rhio or not) and if it find such a repository with that id, it then issues the retrieve command to the url specified in that repository configuration.

So, if I had to guess, I would think that if the document query returned a homeCommunityId and I faithfully passed that homeCommunityId along to the "retrieve document set" command that the bridge would see that field is not blank AND that I have a gateway specified in my rhio's configuration. Therefore the bridge would know to issue the "retrieve document set" to the gateway instead of to one of my repositories. Is that true or am I way off?

thanks,
Jesse