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.mzph.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;毕竟&#…