2011年3月30日 #
摘要: 概念:觀察者模式定義了一對(duì)多依賴,這樣一來(lái),當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴者都會(huì)收到通知并自動(dòng)更新。
舉個(gè)網(wǎng)上商城的例子,比如很多顧客對(duì)某個(gè)商品感興趣,把商品收藏,當(dāng)該商品降價(jià)、促銷、有貨了等事件發(fā)生時(shí),就會(huì)發(fā)Email通知顧客。
UML圖... 閱讀全文
從今天開(kāi)始,把常用的設(shè)計(jì)模式都簡(jiǎn)單的整理一遍,希望每個(gè)星期能至少整理2個(gè)模式吧,先從簡(jiǎn)單的策略模式開(kāi)始。
概念:它定義了一系列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們還可以相互替換。策略模式讓算法的變化不會(huì)影響到使用算法的客戶。 策略模式很簡(jiǎn)單,實(shí)際上就是OO中的多態(tài),舉個(gè)例子,某商場(chǎng)要進(jìn)行促銷,對(duì)于普通顧客打88折,對(duì)于銀卡客戶在88折基礎(chǔ)上再滿400減160,對(duì)于金卡客戶在88折基礎(chǔ)上再滿400減200。 UML圖如下所示: 接口DiscountStrategy代碼如下: ![]() ![]() ![]() 類GeneralDiscountStrategy類代碼如下: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 類SilverDiscountStrategy類代碼如下: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 類GoldenDiscountStrategy代碼如下: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 類Cashier代碼如下: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
摘要: 這篇寫一個(gè)簡(jiǎn)單的HelloWorld例子。
首先準(zhǔn)備環(huán)境,我使用的JDK1.6,1.5應(yīng)該也可以。還需要去oracle下載JMX RI包,地址為:http://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html,下載... 閱讀全文
這是我讀了JMX In Action以后的總結(jié),這篇文章是這個(gè)系列的第一篇,主要介紹一下什么是JMX,為什么要使用JMX?以及簡(jiǎn)單闡述一下JMX的架構(gòu)。
什么是JMX? 首先看一下維基百科的定義:JMX(Java Management Extensions,即Java管理擴(kuò)展)是Java平臺(tái)上為應(yīng)用程序、設(shè)備、系統(tǒng)等植入管理功能的框架。 JMX可以跨越一系列異構(gòu)操作系統(tǒng)平臺(tái)、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,靈活的開(kāi)發(fā)無(wú)縫集成的系統(tǒng)、網(wǎng)絡(luò)和服務(wù)管理應(yīng)用。 隨著企業(yè) IT 規(guī)模的不斷增長(zhǎng),IT 資源(IT resource)數(shù)量不斷增加,IT 資源的分布也越來(lái)越分散。IT資源主要包括網(wǎng)絡(luò)和應(yīng)用等。管理網(wǎng)絡(luò)(硬件)的主要工具是 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP),硬件廠商一般都會(huì)在設(shè)備中提供SNMP hooks,但SNMP開(kāi)發(fā)不是件容易的事情,而且需要掌握特定的語(yǔ)言,對(duì)JAVA開(kāi)發(fā)者絕非易事。 有些企業(yè)開(kāi)發(fā)的應(yīng)用的時(shí)候,是不會(huì)考慮運(yùn)行時(shí)配置和管理問(wèn)題。有些企業(yè)直接在產(chǎn)品中開(kāi)發(fā)管理工具和界面。也有一些企業(yè)直接使用應(yīng)用服務(wù)器或web服務(wù)器的管理工具。 現(xiàn)實(shí)世界的IT資源管理需求主要有以下一些: 1、監(jiān)控平臺(tái)和硬件的健康。硬件可以通過(guò)SNMP,WEB服務(wù)器和應(yīng)用服務(wù)器可以通過(guò)他們自己的管理工具。數(shù)據(jù)庫(kù)也是一樣等。 2、配置應(yīng)用層面的資源。比如配置應(yīng)用在查詢結(jié)果中每頁(yè)顯示的數(shù)量,配置數(shù)據(jù)庫(kù)連接池,或者外部請(qǐng)求數(shù)等。 3、收集應(yīng)用程序的統(tǒng)計(jì)信息。如多少成功訂單,多少失敗訂單等。 4、日志級(jí)別,改變?nèi)罩炯?jí)別。出問(wèn)題的時(shí)候,可以通過(guò)改變?nèi)罩炯?jí)別來(lái)打印調(diào)試信息,快速定位問(wèn)題。 5、監(jiān)視服務(wù)器的性能、負(fù)載,通過(guò)email、sms等通知關(guān)鍵性事件,比如服務(wù)器負(fù)載超過(guò)預(yù)設(shè)的界限。 要滿足這些需求往往是非常昂貴和困難的,管理員通常需要通過(guò)不同的工具來(lái)管理不同的服務(wù)和硬件。 如果使用JMX,創(chuàng)建一個(gè)滿足上面需求的管理系統(tǒng)將是廉價(jià)、更加靈活、所需時(shí)間更短。 使用JMX的好處 1、非常容易使用。特別是對(duì)一個(gè)JAVA程序員,要理解SNMP是困難的。而JMX對(duì)他來(lái)說(shuō)非常容易。 2、利用現(xiàn)有的技術(shù):現(xiàn)有的管理工具可以插入JMX,JMX提供了很多協(xié)議(SNMP、HTTP)和傳輸方式(如RMI),如果原有的應(yīng)用和設(shè)備沒(méi)有提供管理能力,則可以創(chuàng)建JMX代理提供管理能力。 3、模塊化。以模塊化的方式創(chuàng)建你的管理環(huán)境。 4、警告、事件和統(tǒng)計(jì)信息。 JMX提供了一套通知系統(tǒng),充分利用了面向?qū)ο髢?yōu)勢(shì),通知提供了不僅僅是數(shù)據(jù),而是一個(gè)有分布式JAVA對(duì)象,封裝了數(shù)據(jù)和行為。例如,你發(fā)送了一個(gè)服務(wù)器負(fù)載的通知,里面還包含了一個(gè)顯示負(fù)載重要性的級(jí)別的機(jī)制,說(shuō)白了就是對(duì)象里面有個(gè)方法,可以判定負(fù)載的嚴(yán)重程度。 5、快速的監(jiān)控解決方案。不同的開(kāi)發(fā)人員只需要自己開(kāi)發(fā)MBean,而不需要花很多的時(shí)間在相互的協(xié)作上面,這些MBean分布在不同的主機(jī)上,但可以通過(guò)一個(gè)管理工具就可以管理所有的這些應(yīng)用。 JMX的一些術(shù)語(yǔ) 1、可管理資源(Manageable resource) 可以是任何的應(yīng)用、設(shè)備、或者其他存在的實(shí)體,能夠被java訪問(wèn)和包裝。是被JMX MBean管理的資源。 2、MBean(Managed Bean) 是滿足某些命名規(guī)則和繼承JMX 規(guī)范的java類,為可管理資源的管理和訪問(wèn)暴露接口。通過(guò)屬性和行為來(lái)暴露接口。有這3類:Standard, Dynamic, and Model MBeans。 3、MBean Server 管理一組MBean的JAVA類。是JMX 管理環(huán)境核心。是MBean的注冊(cè)器。 4、JMX Agent JMX代理是為管理一組MBean提供一系列服務(wù)的java進(jìn)程。是一個(gè)MBean Server的容器,它還提供了一些有用的服務(wù):創(chuàng)建MBean之間的關(guān)系,動(dòng)態(tài)加載類,簡(jiǎn)單的監(jiān)控服務(wù),定時(shí)器服務(wù)。Agent有一個(gè)協(xié)議適配器和連接器集合能使外部程序連接到他們。 5、Protocol adapters and connectors 協(xié)議適配器和連接器是位于JMX Agent內(nèi)部的對(duì)象。把Agent暴露給管理程序和協(xié)議。一個(gè)Agent可以有很多適配器和連接器。 6、Management application 連接到JMX Agent的用戶應(yīng)用程序。 7、Notification 通知是Mbean或者M(jìn)bean server發(fā)送的java對(duì)象,他們封裝了事件、警告、或者其他的一般信息。其他的Mbean或者java對(duì)象可以注冊(cè)成為監(jiān)聽(tīng)器來(lái)接受通知。 8、Instrumentation(設(shè)備化) 用MBean暴露一個(gè)可管理資源的過(guò)程。 JMX架構(gòu) JMX架構(gòu)主要分為三層:Distributed layer,Agent layer,Instrumentation layer,如下圖所示: ![]() 1、Distributed layer(分布式層) 屬于JMX架構(gòu)的最外層,這層主要負(fù)責(zé)使JMX Agent能對(duì)外部程序可用。 又分為兩種:一種通過(guò)不同的協(xié)議(如SNMP,HTTP)來(lái)為MBean提供可見(jiàn)性。 另一種是把Agent API暴露給其他的分布式技術(shù)如RMI。 2、The agent layer(代理層) 它包含的最主要的組件是MBean Server,它還包括4個(gè)代理服務(wù)使管理MBean更加容易,它們分別是: 定時(shí)器(timer)、監(jiān)控服務(wù)、動(dòng)態(tài)MBean加載、和MBean關(guān)系服務(wù)。Agent可以和被管理的資源在同一個(gè)主機(jī)上,也可以是遠(yuǎn)程的。 3、The instrumentation layer 這是最靠近資源的一層,它包含了注冊(cè)在Agent里面的MBean。 4、Notifications 除了架構(gòu)中的三層以外,JMX提供了一個(gè)通知機(jī)制,類似于JAVA事件模型。通知機(jī)制是管理系統(tǒng)的最后必須的組件。Agent和MBean可以使用通知機(jī)制來(lái)發(fā)送警告或信息給管理應(yīng)用。 以上就是JMX架構(gòu)的主要內(nèi)容,下一篇構(gòu)建一個(gè)HelloWorld的JMX程序。 這本書的前面三章主要講了一下基本概念,客戶端程序,和Amazon的S3,這篇博客總結(jié)一下第四章,個(gè)人感覺(jué)有很多重要的概念。 |