DICOM:开源DICOM服务框架DCM4CHE 构建

背景:

前一篇博文DICOM:开源DICOM服务框架DCM4CHE
安装
中介绍了一款开源DICOM服务框架DCM4CHE,对于开源项目学习的流程是先下载二进制可执行包安装,然后使用测试。在熟悉了大致的功能服务后,从官网下载源代码进行本地构建(Build),进而从根本上了解开源项目的底层框架设计,为后续修复、扩展做准备。本博文是继DCM4CHE安装后的续篇,讲解如何在本地构建DCM4CHE开源项目,文中尽量做到全面,但是由于刚开始接触J2EE领域,且多半都是自学,因此博文中还留有部分未解问题,如有熟悉的博友还望不吝赐教。

构建环境搭建:

DICOM:开源DICOM服务框架DCM4CHE 安装所述,dcm4chee整体包含多个模块,各模块编译、连接会用到各种第三方工具。因此在构建dcm4chee之前需要下载并安装所需的工具,现总结各工具包配置表如下,

工具 版本 下载链接 安装 配置 备注
Ant 最新版 http://ant.apache.org/ 下载安装包后,直接解压到同一安装路径下即可,例如本机路径设置为:

c:\dcm4chee\thirdlibrary\apache-ant-1.9.3

要想在系统中运行ant,需要进行环境变量配置。例如本机Win7 64位系统环境变量配置方式为:

1)右键“计算机”

2)选择“属性”

3)选择“高级系统设置”

4)高级标签页,选择“环境变量”

5)系统变量栏目下,“新建”,输入:

变量名:ANT_HOME

变量值:c:\dcm4chee\thirdlibrary\apache-ant-1.9.3.

最后确定即可。

编辑Path变量,添加%ANT_HOME%\bin

在设置环境变量时需要注意:ANT_HOME变量值最后不能有“\"(Windows系统),或者"/"(Unix/Linux系统)。
XDoclet 最新版 http://xdoclet.sourceforge.net/xdoclet/install.html 下载安装包后,直接解压到同一安装路径下即可,例如本机路径设置为:

c:\dcm4chee\thirdlibrary\xdoclet-1.2.3

ApacheFOP 0.95 http://www.apache.org/dyn/closer.cgi/xmlgraphics/fop http://xmlgraphics.apache.org/fop/quickstartguide.html

官方文档中提到了Download、Install、Configuration等步骤,这里只需要下载二进制安装包,解压即可,本机目录为:

c:\dcm4chee\thirdlibrary\fop-0.95

按照上述步骤添加FOP_HOME环境变量,

变量名:FOP_HOME

变量值:

c:\dcm4chee\thirdlibrary\fop-0.95

编辑Path变量,添加%FOP_HOME%\bin

1)目前Apache FOP官方镜像网站很难找到FOP0.95老版本,可在CSDN中下载:

http://download.csdn.net/detail/wssmao/663634

2)同上,FOP_HOME变量值中最后不能附带”/"或"\"

Jakarta Cactus 最新版 http://archive.apache.org/dist/jakarta/cactus/binaries/ 直接解压到指定路径即可,

c:\dcm4chee\thirdlibrary\cactus-1.8.0-bin

添加环境变量,

变量名:CACTUS_HOME

变量值:

c:\dcm4chee\thirdlibrary\cactus-1.8.0-bin

编辑Path变量,添加%CACTUS_HOME%\bin

cactus只在编译dcm4jboss-ejb测试用例时使用过,构建dcm4chee过程中其实用不到。
JBoss 4.2.3GA http://sourceforge.net/projects/jboss/files/JBoss/JBoss-4.2.3.GA/ 直接解压缩,例如本机目录

c:\dcm4chee\thirdlibrary\ jboss-4.2.3.GA

设置环境变量,

变量名:JBOSS_HOME

变量值:

c:\dcm4chee\thirdlibrary\ jboss-4.2.3.GA

编辑Path变量,添加%JBOSS_HOME%\bin

dcm4chee是托管在JBoss AS应用服务器中的应用,因此run.bat脚本需要依赖于JBoss运行时文件,在后续具体构建过程中需要运行install_jboss.bat(Windows系统)或install_jboss.sh(Unix/Linux系统)
Maven 最新版 http://maven.apache.org/download.cgi 直接解压,例如本机目录

c:\dcm4chee\thirdlibrary\apache-maven-2.2.1

设置环境变量

变量名:M2_HOME

变量值:

c:\dcm4chee\thirdlibrary\apache-maven-2.2.1

变量名:M2

变量值:%M2_HOME%\bin

编辑Path变量,添加%M2%

 
dcm4che14 1.4 svn checkout svn://svn.code.sf.net/p/dcm4che/svn/ dcm4che-svn

最好现在dcm4che14源码,在本机进行构建    
JDK SE 6 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html 双击运行。 设置环境变量,

变量名:JAVA_HOME

变量值:C:\Program Files\Java\jdk1.6.0_45,默认安装路径。

编辑Path变量,添加%JAVA_HOME%\bin

 

【备注1】:按照官方文档的建议,将上述第三方工具统一安装部署到同一文件夹下,方便管理和配置。例如本文中我设置的统一安装路径为:c:\dcm4chee\thirdlibrary。路径中不能有空格,否则会引起JDK异常。

【备注2】:在修改Path变量时要注意两个问题,第一两个不同的路径之间用英文半角“;”隔开;第二,各个环境变量结尾处同样不应有"\"或"/"

构建开始:

【注意事项】:dcm4chee和maven的配置文件中都会依赖于${user.home},例如在dcm4chee顶级目录中存在Build.property配置文件,maven中conf目录下的setting.xml文件,两者其中都存在${user.home},在windows系统下为了避免出现问题,最简单的方式就是讲两者统一设置成绝对路径。搜索dcm4jboss-all目录下所有文件,包含${user.home}的文件有16个,总共出现67次该变量。

(1)构建dcm4che14:

正如准备环境中的备注所述,dcm4che14不能用Java7进行构建。【注】:具体原因是dcm4che14中使用的dcm2jpg实例用到了com.sun.image.codec.jpeg包,该包在JDK6中开始弃用,到JDK7就完全剥离了。所以无法使用Java7编译,只能使用JDK5或JDK6。一种解决方案就是用JAI
ImageIO重写dcm2jpg
工具。

(2)构建dcm4chee-arr:

计入dcm4chee-arr,输入mvn install -Ddb=mysql.(mvn install -Ddb=<database>,database应该替换成自己选择的数据库,例如我的是mysql)

【官方说明指出】:”第一次构建dcm4chee-arr时会提示失败,缺少avax.transaction./jta/1.0.1B/jta-1.0.1B.jar包,一种折中解决方法是先编译dcm4chee-web,然后再编译dcm4chee-arr,因为dcm4chee-web中会下载avax.transaction./jta/1.0.1B/jta-1.0.1B.jar包。“

【对于Mysql类型的dcm4chee-arr】:在创建arrdb时会失败,尤其是对于MySQL5.5,因为构建脚本ddl中的type=语法已经被弃用,应该改成engine=。修改的文件位置是:dcm4chee-arr/dcm4chee-arr-entities/target/hibernate3/sql/dcm4chee-arr-mysql.ddl

在具体安装过程中,经过多次测试dcm4chee-arr模块编译时并未出现过任何错误。

(3)构建dcm4chee-audit:

进入dcm4chee-audit目录下,输入mvn install即可编译通过。

(4)构建dcm4chee-docstore

进入dcm4chee-docstore,输入mvn install即可编译通过。

(5)构建dcm4chee-xds-infoset

进入dcm4chee-xds-infoset,输入mvn install即可编译通过。

(6)构建dcm4chee-web

进入dcm4chee-web,输入mvn -Pall -Ddb=mysql install。

【备注1】:dcm4chee-web模块依赖于dcm4chee-arc3-entities, dcm4chee-icons, dcm4chee-web-common, dcm4chee-dashboard, dcm4chee-usr五个模块,要确保以上五个模块与dcm4chee-web目录处在同一目录下。

【备注2】:dcm4chee-web在真实编译过程中会弹出格式各样的错误,诸如缺少jar文件,如下图所示:

【解决方案】:对于该类错误的解决方案如下,手动从http://www.dcm4che.org/maven2/下载相应的jar、sar包,手动安装到mvn本地库中。(可以利用mvn
install:install-file命令行参数或者直接在.ms\repository\下建立对应目录直接将包拷贝进入即可)。

【备注3】:在解决了缺少依赖包的错误后,又会出现编译错误。如下图所示:

【解决方案】:对于该类错误,经过了几个周末的尝试我还未找到解决方案。在官方说明文档详细版中有如下提示,

如果dcm4chee-web未构建成功,后续的dcm4jboss-all中的dcm4jboss-sar模块无法通过编译,会出现下文中提到的错误。上图中的提示指出,可以进入dcm4chee-web-dist子目录构建单独的dcm4chee-web包文件,确保后续的dcm4jboss-all能够顺利通过。

(7)构建dcm4chee-jboss-all

dcm4chee-jboss-all目录下有多级子目录,包括:dcm4jboss-build, dcm4jboss-ejb, dcm4jboss-hl7, dcm4jboss-rid, dcm4jboss-sar, dcm4jboss-wado, and dcm4jboss-web。所有该目录下的工程需要使用Ant进行构建,dcm4jboss-build中不包含任何Java源代码,只是起到启动Ant编译的作用,该目录下的是整个dcm4jboss-all的主构建脚本。

【官方说明】:Ant在构建时会搜索两个属性文件,即dcm4jboss-all\build.properties以及dcm4jboss-all\各级子目录\build.properties,第一个属性文件对所有子文件有效。在配置该类属性文档时,主要是告知Ant各种工具包的目录,以及版本号,注意即使使用的是JDK6,也保留配置文档中的javac.source和javac.target为1.5.

为了更清楚的说明(6)和(7)两部分的关系,以表格形式列出其各子模块之间的关系。

项目 依赖 各模块描述
dcm4chee-web dcm4chee-arc3-entities

dcm4chee-icons

dcm4chee-web-common

dcm4chee-dashboard

dcm4chee-user

dcm4chee JPA Entities,JPA含义见:

http://baike.baidu.com/link?url=_PwwR8guVIFgzY14DvavTJ6jMrTHNZoX-G0j59H4sk_O6ot_6nj1iouXl1WAGZayulE2xjuKbshTS0avBvLZ7K

一种通过JDK5或XML注解描述对象-关系表的映射,并将运行时对象持久化到数据库的技术。

dcm4chee-icons:Icon theme for dcm4chee application modules

dcm4chee-web-common:web应用的工具集合

dcm4chee-dashboard:报表

dcm4jboss dcm4chee-arr

dcm4chee-audit

dcm4chee-docstore

dcm4chee-xds-infoset

dcm4chee-arr:audit record repository

dcm4chee-audit:Audit Logger,

  • - dcm4che-audit-logger : JMX Service for emitting DICOM Supp95 Audit Trail  Messages, and
  • - dcm4che-audit-login : JAAS login module emitting User Authentication message

dcm4chee-docstore:Generic Document Storage

dcm4chee-xds-infoset:Infoset classes for XDS,将Java中的注释信息自动转换成配置文档之类的。

【备注1】:按照官方说明,在构建dcm4jboss-all时,会出现如下错误,

该错误是由于缺少CAStorSDK-1.3.1-CS40.jar包所致。

【解决方案】:该类错误是由于安装第三方依赖库时错误操作所致。如【构建环境搭建】中说述,诸如ant、maven等工具直接解压到指定目录下即可。并不会用到解压前的jar包文件。但是对于像CAStorSDK、jsch、jcifs三个工具来说需要在该目录下保留相应的jar文件,构建dcm4jboss-all下的dcm4jboss-sar时才能成功。修改完成后,本地构建成功会出现如下图结果:

至此,本地构建dcm4chee的工作顺利完成,当然在构建dcm4chee-web模块时还有部分问题有待进一步研究。

未完待续……

作者:[email protected]

时间:2015-03-28

时间: 2024-12-22 05:39:13

DICOM:开源DICOM服务框架DCM4CHE 构建的相关文章

DICOM:开源DICOM服务框架DCM4CHE构建的准备

背景: 最近抽空想了解一下DCM4CHEE开源DICOM框架,怎奈配置了许久也没有成功(Σ( ° △ °|||)︴).可能多半原因是因为首次接触Java开发环境,毕竟跟C系列(C/C++/C#)不同,但这次失败经历,让我愈发感受到自己对大型项目的快速熟悉和把握能力的欠缺,其实这也正是我学习各种开源项目的出发点.加上之前曾有CSDN博友询问关于ClearCanvas配置问题,所以决定趁着周末详细整理一下配置.学习.使用,甚至扩展开源项目的流程,算是对此次配置DCM4CHEE经验的一次总结和延伸.

DICOM:开源DICOM服务框架DCM4CHE 安装

背景: dcm4chee是dcm4che开源项目中的一部分,是一款符合IHE规定的影像管理/归档应用.dcm4chee遵循DICOM.HL7标准,实现了图像存储.图像提取.及健康领域的工作流程管理.dcm4chee作为一款应用程序需要预打包,然后部署到JBoss应用服务器中.借助于JBoss应用服务器的服务特性,诸如JMS.EJB.Servlet引擎.远程控制.安全性.事务管理.持久性.消息传递.资源库.并发控制.命名和目录服务以及部署等等,dcm4chee提供了多种鲁棒性强且可扩展服务,主要包

Idea搭建Apache Dubbo开源分布式服务框架

[一.定义]1.读音:Dubbo [?d?b??]音似double2.Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成.[二.核心]3.Dubbo提供了三大核心能力:A)面向接口的远程方法调用:Remoting(网络通信框架,实现了 sync-over-async 和 request-response 消息机制.)B)智能容错和负载均衡:RPC(一个远程过程调用的抽象)C)以及服务自动注册和发现:Re

当当网开源Dubbox,扩展Dubbo服务框架支持REST风格远程调用

当当网近日开源了Dubbox项目,可为Dubbo服务框架提供多项扩展功能,包括REST风格远程调用.Kryo/FST序列化等等. 当当网架构部和技术委员会架构师沈理向InfoQ中文站介绍了Dubbox项目,开发背景和主要特点描述如下: Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,即使从国际视野来看应该也是一个非常全面的SOA基础框架.作为一个重要的技术研究课题,在当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即Dubbo eXtensi

一篇文章带你深入了解Dubbo分布式服务框架

一.产生的背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进.下面我们用一个图来具体说明架构和开发框架的演进过程.单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是关键. 垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率.此时,用于加速前端

分布式服务框架Dubbo使用小结

介绍: Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA 服务治理方案,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及"请求-响应"模式的信息交换方式. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,

Dubbo分布式服务框架

Dubbo (开源分布式服务框架) 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! Dubbo是 [1]  阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [2]  Spring框架无缝集成. Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 目录 1 主要核心部件 2 工作原理 3 特性 主要核心部件

DICOM:DICOM Print服务中PresentationContext协商之 MetaSOPClass与SOPClass对比分析

背景: 最近项目中遇到的实际问题较多,且大多是较隐蔽的.不易被发现的错误.究其根源来看,还是对DICOM3.0协议中的细节掌握不够仔细,因而导致在实际编码过程中,常常想当然.前一篇中剖析了由于DicomClient中的AddRequest与Send函数调用逻辑错误导致的System.ObjectDisposedException异常,接下来要讲的是关于DICOM胶片打印的问题,由于在Association Negotiation中PresentationContext协商失误导致DICOM Pr

DICOM:DICOM三大开源库对比分析之“数据加载”

背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,"只要Sante DICOM Editor打不开的数据,基本可以判定此DICOM文件格式错误(准确率达99.9999%^_^)".在感叹Sante DICOM Editor神器牛掰的同时,想了解一下其底层是如何实现的.通过日常使用以及阅读软件帮助手册推断其底层依赖库很可能是dcmtk,就如同本人使用dcmtk.fo-dicom.dcm4che3等