Java EE6事件:JMS的輕量級替代品

我今天要討論的功能是Java EE 6中的事件機制。一般的想法是觸發一個事件,并讓事件監聽器來接收它。

我創建了這個完全沒有用的示例,但是它的簡單性幫助我專注于重要的內容。 我將從后備操作中觸發LogEvent,該事件將記錄到java.util.Logger中。

我需要做的第一件事是創建一個包含我的日志消息和LogLevel的POJO。

public class LogMessage implements Serializable {private final String message;private final Level level;LogMessage(String message, Level level) {this.message = message;this.level = level;}public String getMessage() {return message;}public Level getLevel() {return level;}
}

現在有了數據包裝器,我需要一些東西來觸發該事件,并需要一些東西來拾取它。 我創建的第一件事是觸發事件的方法。

由于CDI,我可以注入事件。

@Inject Event<LogMessage> event;

所以我們只需要解雇它。

event.fire(new LogMessage("Log it baby!", Level.INFO));

現在觸發了該事件,如果沒有人注冊該事件,該事件將消失,從而創建一個偵聽器。 偵聽器需要一種具有一個參數的方法,該參數是上一個事件的通用類型。 LogMessage。

public class LogListener {private static final Logger LOGGER = Logger.getAnonymousLogger();public void process(@Observes LogMessage message){LOGGER.log(message.getLevel(), message.getMessage());}
}

@Observes批注使用LogMessage偵聽所有事件。 觸發事件時,將觸發此方法。

這是創建松耦合應用程序的一種非常不錯的方法,您可以在這些事件偵聽器中分離繁重的操作或封裝不太重要的操作。

所有這些都是同步發生的。 當我們想用對記錄表的慢速數據庫調用來替換log語句時,我們可以使我們的操作比應有的繁重。

我正在尋找的是創建一個異步調用。 只要我們支持EJB,就可以通過在其之上添加@Stateless批注將偵聽器轉換為EJB。 現在,它是一個無狀態的企業bean。 這對我們的同步/異步問題沒有任何改變,但是EJB 3.1支持異步操作。 因此,如果我們還在其頂部添加@Asynchronous批注。 它將異步執行我們的日志記錄語句。

@Stateless
@Asynchronous
public class LogListener {private static final Logger LOGGER = Logger.getAnonymousLogger();public void process(@Observes LogMessage message){LOGGER.log(message.getLevel(), message.getMessage());}
}

如果我們想將數據庫日志記錄和控制臺日志記錄結合起來,我們可以創建多個偵聽同一事件的方法。

這是創建具有非常靈活的組件的輕量級應用程序的好方法。 解決此問題的另一種方法是使用JMS,但您不希望為這種松散耦合配置重量級的配置。

參考: Java EE6 Events,這是我們的JCG合作伙伴 Jelle Victoor在Styled Ideas Blog上 對JMS的輕量級替代 。

相關文章 :
  • Java EE6裝飾器:在注入時裝飾類
  • 基本的EJB參考,注入和查找
  • Java EE過去,現在和云7
  • JBoss AS 7.0.2“ Arc”發布–使用綁定選項
  • Java EE中的配置管理
  • Java教程和Android教程列表

翻譯自: https://www.javacodegeeks.com/2011/10/java-ee6-events-lightweight-alternative.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374397.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32F1筆記(七)WWDG窗口看門狗

窗口看門狗與獨立看門狗最大的不同是中斷&#xff0c;窗口看門狗擁有一個提前喚醒中斷。也就是在快要產生復位的前一段時間&#xff08;T[6:0]0x40&#xff09;來提醒需要進行喂狗&#xff0c;否則將復位。因此當窗口看門狗的計數器值減到0x40的時候&#xff0c;產生中斷&#…

求助!求助!網站頁面圖片太多,加載時間太長該怎么辦?

以下是百度統計的診斷&#xff0c;小弟萬般無奈&#xff0c;html上的緩存以及圖片處理技巧欠缺&#xff0c;希望各位大大幫幫忙支個招&#xff01; 以下元素可在不損失原信息量的前提下進行壓縮&#xff1a; http://www.5atl.com/Style/main.css &#xff08;大小&#xff1a; …

groovy怎樣從sql語句中截取表名_Mysql和SQL

基本概念1.數據庫DataBase簡稱&#xff1a;DB2.什么數據庫&#xff1f;——用于存儲和管理數據的倉庫。存儲過程是一個預編譯的SQL語句&#xff0c;優點是允許模塊化的設計&#xff0c;就是說只需創建一次&#xff0c;以后在該程序中就可以調用多次。3.數據庫的特點&#xff1a…

使用java.util.prefs.Preferences代替java.util.Properties

典型的應用程序安裝程序需要向用戶詢問幾個選項&#xff0c;其中一些是配置問題&#xff0c;例如&#xff0c;應用程序應在其上運行的端口&#xff0c;應如何運行等。應用程序必須記住這些選項&#xff0c;并在每個選項中使用它們。跑。 解決此問題的標準方法是將這些選項寫入屬…

STM32F1筆記(八)時鐘

STM32有五種時鐘源 1、HSI。高速內部時鐘&#xff0c;RC振蕩器&#xff0c;頻率為8MHz。 2、HSE。高速外部時鐘&#xff0c;可接石英/陶瓷諧振器&#xff0c;或者借外部時鐘源&#xff0c;頻率范圍為4MHz~16MHz。 3、PLL。鎖相環倍頻輸出&#xff0c;其時鐘輸入源可選擇為HS…

java常用工具類(一)

一、String工具類 package com.mkyong.common; import java.util.ArrayList; import java.util.List; /** * * String工具類. <br> * * author 宋立君 * date 2014年06月24日 */ public class StringUtil { private static final int INDEX_NO…

Oracle定時器調用存儲過程

關于Oracle定時器調用存儲過程的一點總結&#xff0c;如果有不足的地方&#xff0c;希望大家多多指導&#xff0c;也是第一次在博客上寫東西&#xff0c;以前也只是自己總結之后放在硬盤了&#xff0c;后來同事告訴自己&#xff0c;其實寫博客可以獲得很多&#xff0c;不管是知…

python可以下載百度文庫_不用下載券也能下載百度文庫資料,Python幫你輕松搞定...

大家可能平時都有在百度文庫下載文檔的經歷&#xff0c;費盡心思好不容易在文庫找了一份可以用的資料&#xff0c;一看需要用下載券下載&#xff0c;搞的人很煩。 有的人為了節省時間&#xff0c;就任性辦理了個文庫VIP&#xff0c;再也不用糾結怎么下文檔了。如果你是一個百度…

將對象映射到多個XML模式–天氣示例

我已經在EclipseLink JAXB&#xff08;MOXy&#xff09;的XmlPath和外部綁定文件擴展中撰寫了以前的文章。 在本文中&#xff0c;我將通過將單個對象模型映射到兩個不同的XML模式來演示這些擴展的功能。 為了使示例更加“真實”&#xff0c;XML數據將來自提供天氣信息的兩種不同…

STM32F1筆記(九)通用定時器

STM32F1的定時器分為TIME1/8等高級定時器&#xff0c;TIME2~5等通用定時器&#xff0c;TIME6/7基本定時器。三者的區別主要參考《STM32中文參考手冊》里特性的每種定時器主要特性的異同。 先看中文手冊中通用定時器的簡介&#xff1a; 通用定時器的寄存器有一個比較有趣的地方…

佳能MP258的5200錯誤和P08代碼解決方法及清零方法

參考文章轉載于:https://www.cnblogs.com/arcer/p/5659624.html

tomcat通過conf-Catalina-localhost目錄發布項目詳解

轉自&#xff1a;http://www.cnblogs.com/iyangyuan/p/3316444.html&#xff0c;感謝 楊元。 Tomcat發布項目的方式大致有三種&#xff0c;但小菜認為通過在tomcat的conf/Catalina/localhost目錄下添加配置文件&#xff0c;來發布項目&#xff0c;是最佳選擇。 因為這樣對tomca…

c++保存圖標到dll_自動保存郵件附件至指定文件夾

最近有個需求&#xff0c;ERP系統會自動發很多csv附件到我郵箱&#xff0c;我需要把這些附件上傳到FTP服務器&#xff0c;服務器會把這些csv的數據寫到另外一個系統的數據庫。每次大概有30個郵件&#xff0c;每個郵件有一個附件&#xff0c;而且附件的名字都一樣&#xff0c;是…

有時在Java中,一個布局管理器是不夠的

在開發Java Swing應用程序時&#xff0c;最經常的是&#xff0c;我們需要在多個嵌套面板中使用多個布局管理器。 通常這不是問題&#xff0c;并且被認為是幾乎所有人類已知語言的所有UI開發的常規做法。 但是&#xff0c;大多數情況下&#xff0c;對于UI中的每個面板&#xff0…

VM克隆之后啟動eth0找不到eth0:unknown interface:no such device

問題出現&#xff1a;VMware 克隆之后&#xff0c;ifconfig命令執行找不到eth0,報錯 eth0:unknown interface:no such device 是因為/etc/sysconf/network-scripts/ifcfg-eth0配置復制過來和虛擬主機的網卡Mac等信息不匹配 解決方法&#xff1b; 刪除/etc/udev/rules.d/70-pers…

“精彩極了”和“糟糕透了”

雖然已經是25歲&#xff0c;但是對小學的一篇課文依然記憶尤新&#xff0c;《“精彩極了”和“糟糕透了”》。 課文正文 記得七八歲的時候&#xff0c;我寫了第一首詩。母親一念完那首詩&#xff0c;眼睛亮亮的&#xff0c;興奮地嚷著&#xff1a;“巴迪&#xff0c;真是你寫的…

python中print的用法_Python中print函數簡單使用總結

Python中print函數簡單使用總結 print函數是Python的入門&#xff0c;每一個學習python的人都繞不開這個函數&#xff0c;下面介紹一下這個函數的用法。 打開電腦&#xff0c;選擇python軟件&#xff0c;下面選擇python 3.7為例進行介紹&#xff0c;點擊python 3.7&#xff0c;…

STM32F1筆記(十)PWM

PWM&#xff1a;Pulse Width Modulation&#xff0c;脈沖寬度調制。是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。簡單來說就是對脈沖寬度的控制。 在《STM32中文參考手冊》里可以看到 占空比&#xff1a;占空比是指在一個脈沖循環內&#xff0c;通電時…

從GlassFish 3.x擴展到WebLogic 12c Server

Oracle針對GlassFish服務器的策略的主要目標之一是“與Fusion Middleware and Products集成”&#xff08;來源&#xff1a; Community Roadmap&#xff0c;2010年5月 &#xff09;。 在今年早些時候&#xff0c;您聽到了很多關于兩臺服務器合而為一的恐懼和謠言。 看到這兩種產…

移動互聯網時代:如何讓女孩愛上你在一分鐘內?

部分《移動互聯網時代&#xff1a;讓女孩愛上你在一分鐘內》其實我只是做原來的盲目思想有移動互聯網的自主知識產權&#xff0c;他沒有詳細說明如何真正讓女孩愛上你在一分鐘內&#xff1f;在真實生活中&#xff0c;預期也沒有那么簡單&#xff0c;易于&#xff0c;畢竟&#…