Dcm4chee学习笔记(二)--服务启动流程剖析

Dcm4Chee采用JBOSS作为JAVA EE容器, 所以在剖析Dcm4Chee服务启动流程前需要有对JBOSS的一个整体架构的了解,下图来自

JBOSS官网的关于JBOSS 5 AS的架构图,非常清晰,虽然Dcm4Chee2用的是JBOSS 4的版本,但基本架构应该不会差太多。

 

 

     JAVA功底深的同学应该一看就懂,不懂JAVA的也没关系,把基本的名称概念稍微了解下就行,重要的是我们如何理解Dcm4Chee服务是怎么启动的。

     首先最关键的是JBOSS JMX, (Java Management Extension), 这是JAVA平台的一个技术,具体是什么,有兴趣的可以看看Oracle的官网介绍

http://docs.oracle.com/javase/tutorial/jmx/index.html。

     我用简单粗暴的思维理解就是一项专门管理managed beans的技术,managed beans (简称MBean)又是啥, beans我想大家都知道,反正JAVA技术里

左一个什么beans,右一个什么beans, 一个豆子绕来绕去把人绕晕。总之呢,你可以把它理解成一个符合JMX规范的一堆JAVA代码,由于符合规范,

所以可以被具有JMX功能的容器如JBOSS等进行管理,而且这种模块主要是用来管理各种资源的,比如服务、网络、磁盘IO啥啥啥的。

      那么Dcm4Chee的DICOM服务就是用这种MBean实现的,那么它到底是怎么启动的呢? 翠花,上图

      

 

  JBOSS 容器启动,调用DcmServerService的startService方法,  DcmServerService就是一个符合MBean规范的Java类

  关键服务实现是ServerImpl、DcmHandlerImpl, 这里Dcm4Chee采用了Leader /Follower 多线程设计模式,这个设计模式请参考

    http://blog.csdn.net/goldlevi/article/details/7705180

  

     Leader线程会监听socket,如果有请求到后就调用promptNewLeader通知线程池(Thread Pool)赶紧派个线程当leader, 然后自己去

处理DICOM连接去了,如果处理完了,就join到线程池(Thread Pool)变成follower等着。

    

    Dcm4Chee服务启动流程就简单剖析到这里,抛抛砖。。。呵呵

    

 

 

posted on 2017-06-22 23:21  omage  阅读(165)  评论(0编辑  收藏  举报