`
xmarkgogo
  • 浏览: 29524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

openXDS 11个工程关联以及每个工程在XDS.b实现中的作用

 
阅读更多

昨天启动了openXDS提供的registry和repository相关服务,对openXDS的认识也深入了一些。一直困扰我的问题是openXDS提供的11个工程到底有什么联系,各自的作用是什么。从今天开始,要对它们进行梳理和总结。

可以将这11个工程分为三类:

1. iheos工程。源自hieos项目(sourceforge.net/projects/iheos/),起到了很大作用。

2. openXDS开发的API,是整个项目的主体部分,包括9个工程。

3.openxds-web工程,是openXDS提供的web工程,也是最终呈现结果。它提供了一个配置页面和查询页面,配置页面首先装载Actors,然后启动所选的Actors。


下面根据这三个分类阐述各自的作用。


1. iheos工程

openXDS使用这个项目做了哪些工作呢?在\openxds-core\src\main\resources\axis2repository\services这个目录下可以看到iheos.aar,里面只有一个文件“services.xml”,这个文件是发布的服务列表。根据官网提供的项目部署步骤(https://www.projects.openhealthtools.org/sf/go/page1120)进行部署后,可以看到http://localhost:8020/axis2/services/和http://localhost:8020/axis2/services/两个服务列表。XDS.b的事务是以web service服务的形式提供,理论上应该是下面的结果:

Document Submission (ITI-41): http://localhost:8020/axis2/services/xdsrepositoryb
Document Stored Query (ITI-18): http://localhost:8010/axis2/services/xdsregistryb
Document Retrieval (ITI-43): http://localhost:8020/axis2/services/xdsrepositoryb

但是,从运行出来的两个服务列表来看,内容是一模一样的,因为它们都使用了前面提到的service.xml文件。不过它们都包含了所有服务,所以整体上没有影响。

从上面的分析可以看出来,iheos的作用就是提供事务服务,下面是service.xml文件的一小部分:

  <service name="xdsrepositoryb">
		<description> XDS.b Repository Interface</description>

        <parameter name="ServiceClass" locked="false">gov.nist.registry.ws.serviceclasses.RepositoryB</parameter>

        <operation name="ProvideAndRegisterDocumentSetRequest">
            <messageReceiver class="gov.nist.registry.common2.service.XDSRawXMLInOutMessageReceiver"/>
			<actionMapping>urn:ihe:iti:2007:ProvideAndRegisterDocumentSet-b</actionMapping>
			<parameter name="enableMTOM">true</parameter>
        </operation>

        <operation name="RetrieveDocumentSetRequest">
            <messageReceiver class="gov.nist.registry.common2.service.XDSRawXMLInOutMessageReceiver"/>
			<actionMapping>urn:ihe:iti:2007:RetrieveDocumentSet</actionMapping>
			<parameter name="enableMTOM">true</parameter>
        </operation>
	</service>


服务名叫xdsrepositoryb,提供了两个接口,也就是实现了ITI-41和ITI-43两个事务。接口分别是:ProvideAndRegisterDocumentSetRequest和RetrieveDocumentSetRequest,在实现的时候,客户端调用这两个接口即可。在parameter element的内容中,对应的实现类是gov.nist.registry.ws.serviceclasses.RepositoryB,这是Iheos工程中的类,从这里也可以看出,iheos的作用是提供服务。那么openXDS的API做了什么工作呢?



2.OpenXDS API

前面说这是openXDS的主体,这里的“主体”可能有点说不过去,因为人家hieos已经把大部分活都干了,所以说这里的主体需要理解为“主体架构”,它使用了hieos作为提供基础服务的模块。

openXDS API包含的9个工程的作用主要是两个,一个是提供IHE Actors(包括四个,详见上篇blog的角色类图),每一个角色都提供相应的服务,也就是IHE事务;另外一个作用是提供XCA、XUA等支持。(这种说法可能不准确,待弄清之后再行编辑)

2.1common-utils

2.2common-ws

openXDS工作的流程是,首先加载Actors配置文件,选择需要启动的Actors,创建相应的服务(HTTP servers)。common-ws这个工程的作用就是生成IHE HTTP Server。它只包含四个类:IheConnectionListener、IheHttpFactory、IheHTTPServer和SimpleHttpServer。其中,IheHttpFactory是产生IheServer的工厂类,工厂类只生产SimpleHttpServer,而不是IheHTTPServer。

IheHTTPServer采用了SimpleHttpServer作为其具体实现,IheConnectionListener主要包括Server的参数信息,如port等等。下图是简化了的类图,主要标注四个类之间的关系。


2.3 openxds-aip

2.4 openxds-config

2.5 openxds-core

2.6 openxds-log

记录OpenXDS工程的日志信息。

2.7openxds-registry-adapter-omar

2.8openxds-registry-patient-lightweight

每个病人在一个Affinity Domain中需要有一个全局id,patient lightweight这个工程的作用是对Affinity Domain中的病人生命周期(lifecycle)进行管理,包括createPatient(Patient, RegistryPatientContext)、updatePatient(Patient, RegistryPatientContext)、mergePatients(Patient, Patient, RegistryPatientContext)、unmergePatients(Patient, Patient, RegistryPatientContext)。下面是整个工程所有类的类图。



2.9openxds-repository

3.openxds-web工程

这是openxds提供的web工程(只支持IE),界面如下:


configuration是装载Actors,Actors.xml文件的路径是webapps\openxds-web\WEB-INF\classes\conf\actors,装载之后结果如下


勾选需要启动的Actors,点start即可。


总结:

随着对Openxds的研究时间增加,对它也算是逐渐认识了吧,下一步是把自己的文档在XDS流程中跑一遍,然后深入研究一下实现代码。现在遇到的问题是编码系统,我的CDA文档是UTF-8,但是在提交的过程中还是要乱码,不晓得咋回事。






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics