我先介紹幾個在構建和設計解決方案來適應商業活動中的持續變化時需要注意的商業場景:
·公司需要將其文件倉庫從文檔文件轉成網絡文件
·公司需要更換其安全提供商
·因為經濟情況的巨大的改變
一樣東西是很確定的
在面向對象編程以及分布式對象技術中
本文的目的是根據java的最優方法和最初開始一步一步地達到通用的概念模型來開發java組件
·組件的基本性質
·如何利用Java設計最優方法(設計模式)來實現這些Java組件設計的基本性質
組件的基本性質
·為了讓其他組件可以與之相互作用
·組件必須有合適的生命周期機制(start
·組件必須可以配置
·組件只有一個實例在企業程序中運行
·配置的改變應該是動態的(在運行中)
·組件必須有合適的第三方軟件融入的機制
·組件必須有合適的處理錯誤機制
如何實現基本的組件性質
組件必須有服務接口(API)
無論我們是在一個類還是幾個類中寫
讓我們舉個來自保險界的例子
·檢查保險申請
·收集並評估背景信息
·根據公司現有的規則計算保險金
·從其他部門收集信息以及各種各樣的報告(醫學等等)
·准備相關的政策
現在我們如果想寫一個保險商的商業組件

Figure
當其他組件請求保險商組件的服務時
服務組件將有一個主要的服務實現類(服務接口的實現)以及這個類使用助手類
在產品開發中
下面是XML結構的例子
<Services>
<Service>
<Serviceid>S
<ServiceName>UnderwriterService</ServiceName>
<ServiceImplClass>
</ServiceImplClass>
</Service>
<Service>
<ServiceId>S
<Servicename>PolicyHolderService</ServiceName>
<ServiceImplClass>
</ServiceImplClass>
</Service></Services>
組件應該具有合適的生命周期機制
組件也需要一個在它的生命周期內置的
Figure
組件的生命周期方法是:
·doStart(): 開始組件
():幫助其從XML配置文件中取得配置對象
·doStop():停止組件
·reload():如果當組件已經開始但XML配置文件發生更改
·getInstance():返回ComponentControllerFactory類的實例
一個組件應該是可配置的
通常
下面是關於logger組件的XML配置文件的例子
<LoggingServiceProvider>
<Provider>
<ProviderName>Apache</ProviderName>
<AdapterImpl>
</AdapterImpl>
<Enable>true</Enable>
</Provider>
<Provider>
<ProviderName>WebLogic</ProviderName>
<AdapterImpl>
</AdapterImpl>
<Enable>false</Enable>
</Provider></LoggingServiceProvider>
在企業應用中組件只有一個實例在運行
一個組件應該有且只有一個實例在運行
我們假設組件可以在單JVM情況下可行
Figure
Singleton控制工廠提供的方法是
·getXXXService():方法返回在XML文件中定義的服務提供的實現類
·getXXXAdapter():方法返回在XML文件中定義適配實現類
配置文件的更改應該是動態的
如果組件是不可變的
有兩種可能的情況但動態配置文件更改
·單一JVM情況
·多JVM情況
單一JVM情況
如果程序在單一JVM中運行
·通過XMLizer(單獨的組件)來讀取和處理XML配置文件並載入Java配置對象
·監視XML配置文件可能發生的更改
圖
Figure
ConfigManager類當被Observable通知時扮演Observer角色
ConfigurationChangeNotifier扮演Observable的角色並在XML配置文件發生更改時啟動通知ConfigManger線程
Figure
多JVM情況
在多JVM情況下
·需要機制在運行時來動態載入更改的XML配置文件而不關閉整個企業程序
·需要機制保證在群中只有一個實例在運行
結合RMI利用JNDI是一種選擇來保證在集群環境中的多個節點中的特定的一個節點自由一個實例在運行
為了處理這種情況
·創建需要可以
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27655.html