1. 程式人生 > >Dcm4chee學習筆記(二)--服務啟動流程剖析

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 多執行緒設計模式,這個設計模式請參考

     Leader執行緒會監聽socket,如果有請求到後就呼叫promptNewLeader通知執行緒池(Thread Pool)趕緊派個執行緒當leader, 然後自己去

處理DICOM連線去了,如果處理完了,就join到執行緒池(Thread Pool)變成follower等著。

    Dcm4Chee服務啟動流程就簡單剖析到這裡,拋拋磚。。。呵呵