国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > JSP > 正文

總結:關于Java的事件處理模式

2024-09-05 00:23:40
字體:
來源:轉載
供稿:網友

java的事件模式在圖形界面領域的事件模式已經有很多文章介紹,但是在服務器端我們會碰到更多的事件模式,在這里給大家總結一下:

事件直接驅動模式
事件模式的第一個要求就是性能的要求,需要直接而且快,Command模式是必須經常使用的,主要適合于迅速處理 前臺的命令,Command模式往往是系統架構的重要部分,也是流程控制的主要模式。

Command模式經常Java的Reflect一起使用,因為系統的事件處理系統是處于動態變化的,隨著功能要求擴展,就可能有動態變化事件處理響應系統,以Struts中action為例,我們知道,StrUCts的一個主要配置文件是struts-config.xml 如下:

<struts-config>
  <action-mappings>
    <action path="/login" type="com.javaPRo.struts.LoginAction"/>
    <action path="/logout" type="com.javapro.struts.LogoutAction"/>
  </action-mappings>
</struts-config>

它實際是個command和event的映射關系,通過這個配置文件,運行時動態裝載相應的Action,完成Command模式, 我們檢查LoginAction代碼,就可以看出Command模式的基本特征:

public final class LoginAction extends Action {
  public ActionForward execute(ActionMapping mapping,
    ActionForm form, HttpServletRequest request, HttpServletResponse response)
    throws Exception {
        .................
  }
}

很明顯,典型的Command模式需要有一個接口.接口中有一個統一的方法,這里統一的方法就是execute;

比如我們有個實時系統,客戶段向服務器發出不同編碼代號,意味著不同的請求,不同的請求有不同的Handler進行 處理,Handler接口是:

public class Handler{

  public byte[] handleRequest();

}

不同性質的處理過程繼續這個Handler接口,如負責進入系統的處理過程

public class EnterHandler implements Handler{

  public byte[] handleRequest(){
  //具體業務處理
  ......
  }

}

調用Handler時是:

//從cache中獲取這個requestId對應的Handler
Handler handler = (Handler)cache.get(new Integer(reqId));
//調用handler的統一方法handleRequest()
byte[] outInf = handler.handleRequest();

以上是常用的一個事件驅動模式。它的特點是靠一個事件直接啟動對應的事件處理器。

Chain of Responsibility職責鏈模式也應該屬于這類,當事件到達后,讓這個事件在我們提供的一批處理器中逐個挑選適合的處理器進行處理,這個模式缺點是顯然的,性能喪失在逐個挑選 上,一般不推薦使用,這個模式適合在我們無法預知發生的事件內容時使用,因為不知道發生事件的具體情況, 我們就無法在程序運行前事先為其指派相應的處理器,只能靠運行時,事件自己去摸索“撞運氣”。

監控式事件模式
監控式事件模式就不同于事件直接驅動模式,它是借助第三者來監控和觸發事件,這類事件的特點是: 有一個觀察者置身事外在定期獨立運行著,我們將我們要監聽的事件向這個觀察者注冊,這樣觀察者就 代替我們來監聽這個事件,應用客戶端通過觀察者來獲得事件狀況。

應用客戶端有三種與觀察者交互的方式:1.直接融合 2.推方式 3.拉方式。

直接融合就是說應用客戶端自己就是觀察者,兩者融合,這樣無疑應用客戶端獲得的觸發時間是最快的;

推方式就是觀察者一旦偵測到事件發生,立即將事件Push推到應用客戶端;拉方式類似收取郵件,應用客戶端在需要時才從觀察者拉取事件。

JDK 1.4的None Blocking I/O是監控式事件模式的典型實現,Selector顯然是一個監控I/O的第三者,當有外部事件進來,通過 調用Slector.select方法可以獲得外部事件,從而進行處理,可參考我的本欄文章。

監控式事件模式適合使用在觸發性質的場合,比如數據庫后端觸發器 界面觸發 I/O觸發 狀態改變觸發等。

我們以一個信件觸發為例,這其實是個Observer應用例子:

比如用戶提請服務器計算一個數據,假如用戶同時要求將計算結果向自己信箱發一封,那么我們看如何設計? 按照通常思維,這是一個次序問題,先在內存中計算數據,然后將結果發送到他的信箱,最后返回結果到用戶端, 我們知道信件的發送是耗時的,因此,有可能網絡的原因造成信件發送很慢,這是用戶就一直等不到他的計算結果, 很顯然,我們使用監控式事件模式來解決,讓發信的事件由監控者去完成,只要需要時觸發就可以了:

public class Computer extends Observable{

  public Computer(){
    //將sendMailObserver設定為本類的觀察者。
    addObserver(new sendMailObserver());
  }

  .......


  public void compute(String input,boolean needEmail,String email){

    //計算操作
    .........

    if (needEmail){

      //設置變化點
       setChanged();
      //假如需要發送email,我們把email地址作為參數傳送過去
       notifyObservers(email);

    }   
  }

我們再來看監控觀察者代碼是如何寫的?

public class sendMailObserver implements Observer{

  public void update(Observable obj,Object email){

    if (email instanceof String){

      sendMail(email);

    }

  }

}
這樣服務器在執行compute方法時,就沒有發送郵件的等待,一直接繼續執行。


監控式事件模式和事件直接驅動模式可以在一個系統一起使用,外界信號通過事件直接驅動模式啟動系統處理模塊, 系統處理模塊處理過程中,可以通過監控式事件模式來觸發其它后臺任務。這樣一個架構非常適合實時處理系統。

既然事件處理模式是眾多應用系統的基本模式,那么應該可以形成一個框架標準,JMX的notification Model就是這樣一個架構設計。

JMX Notification Model
我們知道,JMX是提供了一種對MBean資源執行控制和配置的治理機制,但這只是復雜的,分布式的系統中的一部分, 還有需要資源能夠感應狀態改變或者特定事件變化的機制,這就是JMX Notification Model。 在JMX Notification Model中均可以實現"事件直接驅動模式"和"監控式事件模式",這取決于你的應用需求。

JMX Notification Model答應MBean通過調用notifications廣播事件,接受者只要注冊為一個listerner, JMX的 MBean notification model 將會激活這個listerner注冊一次,然后將一直接受到 來自廣播者發出的各種事件。

事件模式有三個角色,第一個是事件發出者producer 然后是事件接受者Consumer,第三個 是要傳輸的事件。JMX notification model也是這樣分別依靠下列組件來實現這三個角色:

A. NotificationBroadcaster接口, 事件廣播發出者, 這個接口答應監聽者在需要發出的notification中注冊他們感愛好的事件。
B. 通用事件(Notification),這是我們要傳輸的事件。 Notification事件能被直接使用,也能成為子類,這些都依靠于隨同事件傳輸的信息。 通過使用通用事件類型,監聽者將能接受來自廣播者所有類型的事件。
C. NotificationListener接口, 事件監聽者或者接受者, 用于接受來自廣播者的任何notification信號。
D. NotificationFilter接口, 這個接口為notification的監聽者提供一個對發出事件的過濾器。
E. NotificationEmitter 接口, 擴展了NotificationBroadcaster接口,當刪除監聽者時答應更多的控制功能。

只要是MBean,就既可以成為notification的發布廣播者,也可以成為notification的監聽者接受者,或者同時兩者都可以。

Attribute Change Notifications
Attribute Change Notifications是一種非凡的notification, 任何時候MBean屬性attribute 被修改,外界能夠被通知到。

在JMX架構中,MBean能夠在屬性attribute變化發生時,發出通知,關于診斷屬性變化的機制以及觸發 通知事件并不屬于JMX規定部分,每個MBean可以有自己獨立的實現方式。

Timer Service
Timer Service觸發器是在規定的日期和事件發出通知,它能夠一一個恒定的間隙不斷重復發出通知, 通知可以發往所有注冊為接受timer通知的對象,Timer Service也是一個可治理的MBean,答應應用系統設置 一個可配置的調度程度。

Monitoring
通過使用monitoring service,一個或多個MBean屬性將按規定間隔時間被監視, 對于被觀察的Mbean,監視器monitor將從它上面獲得一個值,叫derived gauge,這個derived gauge可以是 被觀察屬性的原值,也可以是一個數字性屬性連續被觀察值之差。

當derived gauge值滿足一系列條件時,每個monitor server將會發出一個特定類型的通知。 這些條件都是在monitor被初始化時設定的,也可以通過monitor MBean的治理接口動態設定。

根據MBean內部屬性值類型有三種monitor:

A.CounterMonitor - 使用Java的整數類型來觀察屬性,有一個行為特征:
a. 總是大于或等于零.
b. 能自增.
c. 能回滾.

B.GaugeMonitor - 使用java的整數或浮點類型觀察屬性。象gauge(測量儀器) 要么上升 要么下降減少。

C StringMonitor - 使用String類型觀察屬性.

事件處理架構
JMS是基于Socket的一種消息處理框架,原理類似于監控式事件模式,但是JMS已經把這種模式上升到架構的高度。不同JVM間也依靠JMS消息可以實現事件系統(注重是系統,不簡單是一個小事件了)的觸發和激活。

從上面JMS的架構圖可以看出事件三個角色Producer和Consumer以及事件信息本身Message.JMS就是在Producer和Consumer之間建立一個連接Connection.

JMS可實現同步或異步的事件觸發機制,分別是通過Poin to Point(拉方式)和Pubilsh/Subscibe(推方式)具體完成,在分布式計算環境中,異步機制是非常重要,可以起到解耦作用,因為分布環境中單點錯誤或通訊問題是經常發生的,整個分布式系統不能總是依靠同步機制來可靠地傳遞事件或notification.

由此可見,事件處理模式從Java諸多架構到我們具體應用程序,隨處可見,根據不同的應用需求選擇不同的事件處理模式,才能真正挖掘Java的潛在性能。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产在线高清理伦片a| 国产福利av网站| 国产福利在线观看| 国产欧美一区二区三区小说| 国产免费黄网站| 国产天堂素人系列在线视频| 国产精品白浆视频免费观看| 国产一级又黄| 99免费视频| 久草电影在线| 国产黄色高清在线| av人人综合网| 国产乱精品一区二区三区| 国产一区电影| 欧美婷婷久久五月精品三区| 亚洲精品久久久成人| gogo在线观看| 1区2区3区在线| 亚洲男人网站| 中文字幕人成高视频| 精品视频vs精品视频| 久久一本精品| 在线视频观看你懂的| 黄色国产网站在线观看| 精品视频三区| 国产黄在线看| 中文字幕国产在线| 亚洲最新永久观看在线| 国产一区二区三区不卡免费观看 | 日本福利在线| 国产精品入口免费麻豆| 欧美人成在线观看网站高清| 国产黄色免费网| 日本中文字幕在线播放| 午夜在线视频| 亚洲欧美日韩一区成人| 国产youjizz在线| 国产桃色电影在线播放| 黄色毛片在线看| 天天噜天天色| www在线视频| 欧美精品另类| eeuss影院在线观看| 91网页在线观看| 国产精品视频白浆合集| 国产网站麻豆精品视频| 天天操人人干| 成视人a免费观看视频 | 久久久久久77777| 免费影视观看网站入口| av中文字幕在线看| 性网站在线看| 免费精品国产自产拍观看| www.狠狠艹| 久久五月精品| 中文字幕在线资源| 国产一二区视频| 国产精品伦理一区二区三区| 国产精品69一区二区三区| 2019中文字幕在线电影免费| 国产精品久久麻豆| av色在线观看| 天堂在线亚洲| 91xx在线观看| 开心快乐六月丁香婷婷| 国产麻豆一区二区三区精品| 国产午夜视频| av影视在线看| 大香伊人久久| 999在线视频| 狠狠干五月天| 91欧美在线视频| 日本欧美在线视频免费观看| 麻豆av在线| 精品视频二区| 国产美女性感在线观看懂色av| 国产视频你懂的| 不卡av免费观看| 国产成人精品实拍在线| 超碰在线网站| 精品国产一区二区三区四区阿崩| www.99av| 999在线视频| 国产精品扒开做爽爽爽的视频| 男女午夜视频在线观看| 91九色在线看| 国产日本韩国在线播放| 亚洲免费国产| 国产精品久久久久永久免费看| 久草在线视频网| 日韩黄色成人| 在线免费看黄av| 国产91在线视频蝌蚪| 天天操天天操天天色天天要| 欧美96在线| 日本高清中文字幕| 国产超级va在线视频| 狠狠综合久久久综合| 日本a级黄色| 欧美专区日韩| 看成年女人免费午夜视频| www.操操| 青青国产在线| 欧美亚洲系列| 九九视频九九热| 久久精品亚洲7777影院| 免费黄网站在线观看| 欧美成人精品福利网站| 噜噜噜噜噜在线视频| 国产麻豆一区二区三区精品| 国产在线传媒| 国产污污在线观看| 国产高清免费av在线| 18av在线视频| www.操操操.com| 黄色国产网站在线观看| 最好看更新中文字幕| 国产亚洲精品拍拍拍拍拍| 国产网站免费看| 在线国产三级| 免费网站看黄yyy222| 国产免费av在线| 国产成在线观看免费视频| 亚洲高清在线免费| 久久综合精品视频| 国产精品冒白浆免费视频| 亚洲图区综合| 国产一区二区三区美女秒播| 国产三级免费观看| 99久久99热久久精品免费看| 超碰在线中文| 91高清国产| 福利视频在线看| 69精品视频| 日韩av成人| 日本韩国精品一区二区| 国产精品蜜臀| 国产久草在线| 亚洲图区综合| 国产黄色大片在线观看| 日本片在线看| 国产色在线 com| 久热国产在线视频| 在线观看的av| 91久久麻豆| 国产一区二区三区不卡免费观看| 在线欧美一级视频| 国产精品美女一区二区三区四区| 精品无人区乱码1区2区3区免费| 免费a级毛片在线播放| 精品国产二区三区| 国产一级性片| 最新超碰在线| 中文字幕日本三级| 久色视频在线观看| 免费av不卡在线观看| 午夜影院免费看| 四虎www视频| 在线黄色av| av中文网站| www.夜夜操.com| 日本亚洲精品| 青青青国产视频| 亚洲欧美日韩成人网| 在线色视频网| а√最新版在线天堂| 欧美亚洲系列| 激情视频国产| 成人欧美日韩| 国产一级网站视频在线| 中文字幕国产视频| 国产www视频在线观看| √天堂资源中文www| 国产高潮又爽又无遮挡又免费| 国产黄色网页| 亚洲第一区视频| 久久香蕉一区| 国产欧美日韩精品综合| 五月婷婷导航| 国产二级c片l毛片| www在线免费观看视频| 国产美女av| 国产精美视频| 亚洲综合色视频在线观看| 男人操女人免费网站| 国产三区在线观看| 天天操中文字幕视频| 国产美女在线一区二区三区| 国产福利免费在线观看| 亚洲国产精华液| 国产美女极品在线| 中文在线有码| 国产乱xxⅹxx国语对白| 国产人成在线观看| 免费观看v片在线观看| 国产一区二区三区四区尤物| 精品无人乱码| 国产欧美一区二区三区小说| 日本福利在线| 精品一区二区观看|