Java EE6事件:JMS的轻量级替代品
我创建了这个完全没有用的示例,但是它的简单性帮助我专注于重要的内容。 我将从后备操作中触发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 EE6事件:JMS的轻量级替代品相关推荐
- java ee jms_Java EE6事件:JMS的轻量级替代品
java ee jms 我今天要讨论的功能是Java EE 6中的事件机制.一般的想法是触发一个事件,并让事件监听器来接收它. 我创建了这个完全没有用的示例,但是它的简单性帮助我专注于重要的内容. 我 ...
- Java EE6 CDI,命名组件和限定符
Java EE6的最大承诺之一就是简化了依赖注入的使用. 他们做到了,使用CDI . CDI代表Java EE的上下文和依赖注入,它提供了一个基础集,用于在企业应用程序中应用依赖注入. 在CDI之前, ...
- java ee5和java ee6的区别
java ee5和java ee6的区别 一.Desktop类和SystemTray类 在JDK6中 ,AWT新增加了两个类:Desktop和SystemTray. 前者可以用来打开系统默认浏览器浏 ...
- openshift_红帽Openshift:入门–云中的Java EE6
openshift 现在有一段时间,我正在研究"云". 研究它的功能,它可以做什么,为什么我们应该切换到"云",进行交谈,与Realmaolmen的云专家@ma ...
- Java EE6装饰器:在注入时装饰类
软件中常见的设计模式是装饰器模式 . 我们上一堂课,然后在它周围包装另一堂课. 这样,当我们调用类时,我们总是在到达内部类之前经过周围的类. Java EE 6允许我们通过CDI创建装饰器,作为其AO ...
- 红帽Openshift:入门–云中的Java EE6
现在有一段时间,我正在研究"云". 研究它的功能,它可以做什么,为什么我们应该切换到"云",进行讨论,与RealDolmen的云专家@maartenballia ...
- Java中事件监听机制
Java中事件监听机制 一.事件监听机制的定义 要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如, ...
- java实现分发_关于JAVA中事件分发和监听机制实现的代码实例
[实例简介] 关于JAVA中事件分发和监听机制实现的代码实例,绝对实用代码,有说明. [实例截图] [核心代码] JavaEventDispatch ├── bin │ └── com │ └ ...
- JAVA消息服务JMS规范及原理详解
一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进 ...
最新文章
- SQL Server 2008 的CDC功能
- 一小时内在本地搭建 SAP Commerce Cloud(电商云)的前后台运行环境
- 大学生计算机课程考试试题,大学生计算机基础课程考试系统研究与实现
- [网络流24题]孤岛营救问题
- 实训以来,到这里的次数少了!
- C++程序设计一(进制转换)
- 修改MySQL中字段的类型和长度
- 20190608每日一句
- 腾讯、阿里、京东…互联网大厂2022新年礼盒长啥样?我酸了
- uniapp实现公众号H5、小程序和App微信授权登录功能
- 轻微课靠不靠谱,我的60天体验可以说说
- A system tap script to detect UDP beacons
- linux skyeye,移植LINUX到SKYEYE上
- DIB迪博数据库(2000-2018年)
- visio移动变得很卡的解决办法
- MMU的作用及工作过程
- 我和明星有个“约会”
- 广州市天河区2021-2022学年九年级第一学期期末考试英语试题
- 眼动追踪:用户体验设计利器_眼动追踪:如何观察点击之间的差距(以及原因)
- 聊一聊,面试为什么大厂钟爱问源码,真的是(问)造火箭=>(做)拧螺丝?如何读源码?
热门文章
- java 动画_Java安全动画
- cobol host变量_将Host Cobol批次和Monolith Webapps移动到云和微服务
- java登录界面命令_Java命令行界面(第18部分):JCLAP
- tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
- 需求澄清_澄清字符串的格式!
- activiti 变量_如何在Activiti中使用瞬态变量
- redis安装_Redis安装
- adf开发_了解ADF生命周期中的ADF绑定
- jax-ws和jax-rs_使用JAX-RS和Jetty创建Web服务和Rest Server
- 筒仓计算表格_身份反模式:联邦筒仓和意大利面条身份