我今天要讨论的功能是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 EE6事件:JMS的轻量级替代品相关推荐

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

    java ee jms 我今天要讨论的功能是Java EE 6中的事件机制.一般的想法是触发一个事件,并让事件监听器来接收它. 我创建了这个完全没有用的示例,但是它的简单性帮助我专注于重要的内容. 我 ...

  2. Java EE6 CDI,命名组件和限定符

    Java EE6的最大承诺之一就是简化了依赖注入的使用. 他们做到了,使用CDI . CDI代表Java EE的上下文和依赖注入,它提供了一个基础集,用于在企业应用程序中应用依赖注入. 在CDI之前, ...

  3. java ee5和java ee6的区别

    java ee5和java ee6的区别 一.Desktop类和SystemTray类  在JDK6中 ,AWT新增加了两个类:Desktop和SystemTray. 前者可以用来打开系统默认浏览器浏 ...

  4. openshift_红帽Openshift:入门–云中的Java EE6

    openshift 现在有一段时间,我正在研究"云". 研究它的功能,它可以做什么,为什么我们应该切换到"云",进行交谈,与Realmaolmen的云专家@ma ...

  5. Java EE6装饰器:在注入时装饰类

    软件中常见的设计模式是装饰器模式 . 我们上一堂课,然后在它周围包装另一堂课. 这样,当我们调用类时,我们总是在到达内部类之前经过周围的类. Java EE 6允许我们通过CDI创建装饰器,作为其AO ...

  6. 红帽Openshift:入门–云中的Java EE6

    现在有一段时间,我正在研究"云". 研究它的功能,它可以做什么,为什么我们应该切换到"云",进行讨论,与RealDolmen的云专家@maartenballia ...

  7. Java中事件监听机制

    Java中事件监听机制 一.事件监听机制的定义 要想了解Java中的事件监听机制,首先就要去了解一下在Java中事件是怎样去定义的呢!在使用Java编写好一个界面后,我们就会对界面进行一些操作,比如, ...

  8. java实现分发_关于JAVA中事件分发和监听机制实现的代码实例

    [实例简介] 关于JAVA中事件分发和监听机制实现的代码实例,绝对实用代码,有说明. [实例截图] [核心代码] JavaEventDispatch ├── bin │   └── com │   └ ...

  9. JAVA消息服务JMS规范及原理详解

    一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进 ...

最新文章

  1. SQL Server 2008 的CDC功能
  2. 一小时内在本地搭建 SAP Commerce Cloud(电商云)的前后台运行环境
  3. 大学生计算机课程考试试题,大学生计算机基础课程考试系统研究与实现
  4. [网络流24题]孤岛营救问题
  5. 实训以来,到这里的次数少了!
  6. C++程序设计一(进制转换)
  7. 修改MySQL中字段的类型和长度
  8. 20190608每日一句
  9. 腾讯、阿里、京东…互联网大厂2022新年礼盒长啥样?我酸了
  10. uniapp实现公众号H5、小程序和App微信授权登录功能
  11. 轻微课靠不靠谱,我的60天体验可以说说
  12. A system tap script to detect UDP beacons
  13. linux skyeye,移植LINUX到SKYEYE上
  14. DIB迪博数据库(2000-2018年)
  15. visio移动变得很卡的解决办法
  16. MMU的作用及工作过程
  17. 我和明星有个“约会”
  18. 广州市天河区2021-2022学年九年级第一学期期末考试英语试题
  19. 眼动追踪:用户体验设计利器_眼动追踪:如何观察点击之间的差距(以及原因)
  20. 聊一聊,面试为什么大厂钟爱问源码,真的是(问)造火箭=>(做)拧螺丝?如何读源码?

热门文章

  1. java 动画_Java安全动画
  2. cobol host变量_将Host Cobol批次和Monolith Webapps移动到云和微服务
  3. java登录界面命令_Java命令行界面(第18部分):JCLAP
  4. tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)
  5. 需求澄清_澄清字符串的格式!
  6. activiti 变量_如何在Activiti中使用瞬态变量
  7. redis安装_Redis安装
  8. adf开发_了解ADF生命周期中的ADF绑定
  9. jax-ws和jax-rs_使用JAX-RS和Jetty创建Web服务和Rest Server
  10. 筒仓计算表格_身份反模式:联邦筒仓和意大利面条身份