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服务启动流程就简单剖析到这里,抛抛砖。。。呵呵