java ee jms_Java EE6事件:JMS的轻量级替代品

java ee 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

java ee jms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

All your files have been encrypted

小弟的姑姑家的老板收银的电脑被黑客黑了,我来解决一下,小孩玩游戏玩电脑中的病毒, 方法很多种,仅供参考。 问题邮件截图: 参考方式: 方法一:给对方钱,一般比较贵,还不如重装系统。哈哈。 方法二:下载解密工具,尝试解密恢复数据, Ransomware File Decrypto Too…

8s yaml 配置生成_接口测试框架实战(六) | 配置的数据驱动

《Python 测试开发实战进阶》课程&#xff0c;4 个月挑战 BAT 大厂年薪 50W Offer&#xff0c;文末加群&#xff01;在实际工作中&#xff0c;为了便于维护&#xff0c;对于环境的切换和配置&#xff0c;通常不会使用硬编码的形式完成。在之前文章《多环境下的接口测试》中&…

机房合作(一):我怎样做组长(敢于承担责任)

导读&#xff1a;小组合作开始了&#xff0c;不怕死的我&#xff0c;揽下了组长的活儿。然后开始了我的漫漫长征路。不过&#xff0c;不怕猪一样的组长&#xff0c;咱有神一样的组员。机房合作到现在&#xff0c;真的感激组员的配合以及对我这个猪组长的指点。接下来&#xff0…

使用JAXB和Jackson从XSD生成JSON模式

在本文中&#xff0c;我演示了一种从XML Schema &#xff08;XSD&#xff09;生成JSON Schema的 方法 。 在概述从XML Schema创建JSON Schema的方法的同时&#xff0c;本文还演示了JAXB实现的用法&#xff08;与JDK 9捆绑在一起的xjc版本2.2.12-b150331.1824 [build 1.9.0-ea-b…

成功人士都有的好习惯

人们常问的一个问题是:那些成功的人是如何获得成功的。这个问题的众多答案之一可能就隐藏在他们的日常习惯之中——但这些习惯到底是什么,它们与成功又有什么关系呢? 习惯是指以固定的方式定期进行的实践或行为模式。在这种情况下,意味着成功人士必须采取日常实践,才有可…

有多个python版本_python 多版本共存

有时候需要在同一台机器上安装多个版本的python常见的解决方式如下&#xff1a;一、1. 下载python2.7和python3.7&#xff0c;然后在C盘下新建一个Python文件夹&#xff0c;python2.7安装到 C:\Python\Python27python3.7安装到 C:\Python\Python372. 检查 系统变量中是否有…

Spring Integration完整示例

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…

为什么要创业

在这个时代,成为一名企业家比以往任何时候都要容易,技术正在缩小世界,打开市场,让许多人在他们梦想的领域中独辟蹊径。 然而,许多拥有好点子的人却害怕采取行动。不要让自己成为那些后悔没有创业的人。如果你想掌控你的生活,实现你的梦想。那么你就有无数的理由创业,我…

heroku_简单的Twitter:Heroku上的Play框架,AJAX,CRUD

heroku因此&#xff0c;重大的公告已经发布– Heroku开始为Play Framework应用程序提供本机支持&#xff01; 如果您还没有听说过&#xff0c;请在Heroku的博客上查看Jesper Joergensen的帖子 。 因此&#xff0c;对于演示&#xff0c;我将建立一个非常基本的Twitter副本&#…

配置环境_JavaJDK环境变量配置

1.Java环境搭建1.1 JDK与JREJDK(Java Development Kit Java开发工具包)JDK是提供给Java开发人员使用的&#xff0c;其中包含了java的开发工具&#xff0c;也包括了JRE。所以安装了JDK&#xff0c;就不用在单独安装JRE了。其中开发工具&#xff1a;编译工具(javac.exe)打包工具(…

僵固式思维 OR 成长式思维

有意无意中&#xff0c;看到这样的一篇文章&#xff0c;觉得非常富有正能量&#xff0c;而且也比较有同感。而且&#xff0c;不仅仅对于职场暂时失落或者失意的人有帮助&#xff0c;就是对学生&#xff0c;也一样的。故特分享&#xff0c;以共勉之。 我想每个新人进入职场之后都…

Linux常用命令(知道啦就赶紧收藏吧)

作为职业黑客,Linux命令不可不知。赶紧拿起你的小本本。 w-显示目前登入系统的用户信息 ab-Apache服务器的性能测试工具 ip-网络配置工具 ld-将目标文件连接为可执行程序 xz-POSIX 平台开发具有高压缩率的工具。 ln-用来为文件创件连接 ar-建立或修改备存文件,或是从备…

在Spring使用AWS SQS创建消息驱动Bean

在我之前的文章中&#xff0c;我展示了一个简单的示例&#xff0c;该示例如何将AWS SQS与Spring Framework结合使用以将消息放入队列中并从队列中读取消息。 在本文中&#xff0c;我将更进一步&#xff0c;并使用Spring创建一个“消息驱动的Bean”&#xff0c;以便对放入队列中…

springboot中得注解_Spring以及SpringBoot中的常用的注解小结

一、注解的基本概念Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口&#xff0c;程序可以通过反射来获取指定程序元素的Annotion对象&#xff0c;然后通过Annotion对象来获取注解里面的元数据。…

Asp.net MVC 的一些总结(二)——图片显示

这里实现的是&#xff0c;如下图片所示的效果&#xff1a; 当然&#xff0c;当你看的下图的时候&#xff0c;请不要自己想当然的认为是简单的html布局&#xff01;&#xff01;&#xff01; &#xff08;1&#xff09;业务说明&#xff1a;图片地址是数据库里存的&#xff0c;图…

Spring整合基础

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…

最长子串(FZU2128)

最长子串 Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice FZU 2128Description 问题很简单&#xff0c;给你一个字符串s&#xff0c;问s的子串中不包含s1,s2...sn的最长串有多长。Input 输入包含多组数据。第一行为…

微信小程序开发起步

刚开发开发小程序的小伙伴可以参考下面的帖子&#xff1a; https://cloud.tencent.com/developer/article/1190821

virsh 网络设置_KVM使用Network Filters进行虚拟机网络管理 | leon的博客

1.1 Network Filters介绍Network filtering XML为虚拟化系统管理员提供了一种网络流量的过滤规则&#xff0c;系统管理员可以通过配置过滤参数实施和管理对虚拟机网络流量的接受和转发&#xff0c;由于过滤规则不能绕过直接进入虚拟机内&#xff0c;使得一个filter对虚拟用户的…

java 布局管理器_有时在Java中,一个布局管理器是不够的

java 布局管理器在开发Java Swing应用程序时&#xff0c;最经常的是&#xff0c;我们需要在多个嵌套面板中使用多个布局管理器。 这通常不是问题&#xff0c;被认为是几乎所有人类已知语言的所有UI开发的常规做法。 但是&#xff0c;大多数情况下&#xff0c;对于UI中的每个面板…