JMS 2.0的新增功能

这篇文章列出了JMS 2.0 ( Java EE 7平台的一部分)引入的所有新API(接口/类/注释等)。 这些分类如下

  • API简化
  • 使用方便
  • 异常处理

这是一个简短的摘要以及一些代码片段

API简化

JMSContext

在Connection和Session对象之上的更简单的抽象,从而消除了与这些类/接口进行交互以便发送/接收消息的需要。

@Path("email")
@Stateless
public class EmailService {//pulls in default Conn Factory as per Java EE 7@ResourceConnectionFactory cf;//application managedJMSContext ctx;@Resource("jms/emailQ")Destination emailQ;@POSTpublic void send(String email) {Session session;try {ctx = cf.createContext();ctx.createProducer().send(emailQ, email);System.out.println("Message Sent to queue - " + ((Queue) emailQ).getQueueName());} catch (JMSException ex) {Logger.getLogger(EmailService.class.getName()).log(Level.SEVERE, null, ex);throw new JMSRuntimeException(ex.getMessage(), ex.getMessage(), ex);} finally {//clean up after use. Can also be done as inside a @PreDestroy callback methodctx.close();System.out.println("JMSContext closed");}}
}

JMSConnectionFactory

在JMSContext注入期间用于指定JMS ConnectionFactory的JNDI名称

@Path("email")
@Stateless
public class TheBestEmailService {//container managed@Inject@JMSConnectionFactory("jms/myConnectionFactory")JMSContext ctx;@Resource("jms/emailQ")Destination emailQ;@POSTpublic void send(String email) {Session session;try {ctx.createProducer().send(emailQ, email);System.out.println("Message Sent to queue - " + ((Queue) emailQ).getQueueName());} catch (JMSException ex) {Logger.getLogger(TheBestEmailService.class.getName()).log(Level.SEVERE, null, ex);throw new JMSRuntimeException(ex.getMessage(), ex.getMessage(), ex);}}
}

JMSProducer和JMSConsumer

顾名思义,JMSProducer和JMSConsumer封装了分别向目的地(主题和队列)和从目的地发送JMS消息的过程。 可以从JMSContext对象获得这些对象的实例,从API易用性的角度来看,它们很重要。 这是一个“流利的” API示例

context.createProducer().send(queue,message);
context.createConsumer(topic).receiveBody(Mail.class);

XAJMSContext

与原始JMSContext对象的事务等效。 该接口的实现为JMS中的JTA提供支持

使用方便

这些注释可以减少对手动/管理配置的依赖,并可以推动Java EE应用程序的自动部署。 这些是“配置为代码”的完美示例,在云(PaaS)部署方案中无价之宝

JMSConnectionFactoryDe​​finition和JMSConnectionFactoryDe​​finitions

指定一个/多个JMS ConnectionFactory对象的JNDI名称。 此资源将在部署时自动配置。

@JMSConnectionFactoryDefinition(name = "jndi/App1JMSConnFactory")@JMSConnectionFactoryDefinitions({@JMSConnectionFactoryDefinition(name = "jndi/App2JMSConnFactory"),@JMSConnectionFactoryDefinition(name = "jndi/App3JMSConnFactory")})

JMSDestinationDefinition和JMSDestinationDefinitions

指定一个/多个JMS目标(队列/主题)的JNDI名称。 此资源将在部署时自动配置。

@JMSDestinationDefinition(name = "jms/emailQueue", interfaceName = "javax.jms.Queue")@JMSDestinationDefinitions({@JMSDestinationDefinition(name = "portal/notificationQueue", interfaceName = "javax.jms.Queue"),@JMSDestinationDefinition(name = "app/stockPriceTopic", interfaceName = "javax.jms.Topic")})

异常处理

JMS 1.1和更早版本没有未检查异常的概念。 从JMS 2.0开始,引入JMSRuntimeException作为基础/父级,从该基础/父级扩展了所有其他未经检查的异常。 这是JMS 2.0中引入的所有新异常的列表(这些异常大多是其检查的对等物的未检查版本)

  • JMSRuntimeException
  • IllegalStateRuntimeException
  • InvalidClientIDRuntimeException
  • InvalidDestinationRuntimeException
  • InvalidSelectorRuntimeException
  • JMSSecurityRuntimeException
  • MessageFormatRuntimeException
  • MessageNotWriteableRuntimeException
  • ResourceAllocationRuntimeException
  • TransactionInProgressRuntimeException
  • TransactionRolledBackRuntimeException

JMSPasswordCrdential

在尝试使用注入的JMSContext对象进行任何操作之前,用于保护对JMS提供者的访问安全

Option 1
---------@Inject
@JMSConnectionFactory("jms/myConnectionFactory")
@JMSPasswordCredential(password = "secret", userName = "admin")
JMSContext ctx;----------------------------------------------------------------Option 2
---------//inject javax.jms.ConnectionFactory
@Resource("jndi/AppJMSConnFactory")
ConnectionFactory cf;//use it to create the JMSContext
JMSContext ctx = cf.createContext("admin","secret");

JMSSessionMode

指定在JMSContext注入期间要使用的会话模式

@Inject
@JMSConnectionFactory("jms/myConnectionFactory")
//Accepts an integer. Other options are: JMSContext.SESSION_TRANSACTED, JMSContext.CLIENT_ACKNOWLEDGE and JMSContext.DUPS_OK_ACKNOWLEDGE
@JMSSessionMode(JMSContext.AUTO_ACKNOWLEDGE)
JMSContext ctx;

从API角度来看,仅此而已。

干杯!

翻译自: https://www.javacodegeeks.com/2015/09/new-in-jms-2-0.html

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

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

相关文章

oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

文章思维导图一. 存储过程和存储函数的定义定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句…

CC++初学者编程教程(8) VS2013配置编程助手与QT

1. 2. 配置编程助手 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39 40 41 42 43 这个时候我们就在VS2013里面集成了QT,编程助…

java内存模型概述_Java内存模型-快速概述和注意事项

java内存模型概述在计算中, 内存模型描述了线程如何通过内存交互,或更一般地,它指定了为分段内存或分页内存平台生成代码时允许编译器进行的假设。 在给定程序和该程序的执行跟踪的情况下,它实质上描述了执行跟踪是否是该程序的合…

oracle目录删除后恢复,Oracle删除后不能重新安装的解决方法

很多朋友只用了Oracle的删除,但很多情况下,他会发现重新安装时,点了下一步安装界面就消失了,往往无奈下只好重装系统,其实只是你数据库没删干净,删干净就不会出现这种情况了。实现方法:1、 开始…

jquery简单实现树形结构收缩展开效果

代码量很少&#xff0c;注意要取消冒泡 e.stopPropagation(); <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title></title><style type"text/css">.child{ display: none;}li{ cu…

转子碰磨 matlab,航空科普:什么是航空发动机转子碰磨?

中国航空报讯&#xff1a;随着人们对航空发动机油耗、推重比等要求的逐步提高&#xff0c;提升航空发动机运行效率&#xff0c;尤其是提升民用航空发动机的经济性已经变得越来越重要。航空发动机的总体运行效率是气动效率、燃烧效率、冷却效率与机械效率等共同决定的。其中&…

Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章&#xff0c;没有源代码可下载&#xff0c;根据文中提供的代码片段&#xff0c;自己新建的项目&#xff08;比较可恶的是&#xff0c;没有图标图片资源&…

oracle 索引invisible,Oracle index unusable和invisible的区别

invisible index会被优化器所忽略&#xff0c;但是dml操作仍然会维护索引。在session或者system级别使用参数OPTIMIZER_USE_INVISIBLE_INDEX摘录自Oracle 11g的官方文档&#xff1a;UNUSABLE Specify UNUSABLE to mark the index or index partition(s) or index subpartition(…

php16进制密钥签名对接支付,简单理解rsa的加密和签名-PHP实现

我们先动手在linux上生成一下rsaPs&#xff1a;openssl是一堆加密算法和安全协议的开源集合,像RSA,DES,MD5,RC4等等,都能在openssl里面找到源代码.用openssl指定生成test.key文件&#xff0c;其中包含公钥私钥&#xff0c;1024为生成密钥长度tbtb:~/mimi$ openssl genrsa -out …

angularjs 服务

内置服务 1、$timeout 2、$watch(obj,fun)&#xff1a; fun(newVal,oldVal,scope) //newVal是新改变的值&#xff0c;oldVal是旧值 3、$destroy()&#xff1a;作用域的销毁&#xff0c;如果子作用域不再有用了。那么子作用域的创建者就会负责用$destroy()来将它销毁。这回停止$…

java中字符和字节的转换_Java最佳实践–字符到字节和字节到字符的转换

java中字符和字节的转换在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论String性能调优。 特别是&#xff0c;我们将着重于使用默认编码时如何有效地处理字符到字节和字节到字符的转换。 本文总结了两种建议的自定义方法与两…

一个简单的单例模式的类

public class Singleton {private Singleton(){}private static Singleton instance;public static Singleton getInSingleton(){if(instance null){synchronized (Singleton.class) {if(instance null){instance new Singleton();}}}return instance;}}私有的构造方法不能别…

oracle数据库存大文本,Oracle大文本在ASP中存取问题的解决

一、关于ADO在基于Client/Server结构的数据库环境中&#xff0c;通过OLE DB接口可以存取数据&#xff0c;但它定义的是低层COM接口&#xff0c;不仅不易使用&#xff0c;而且不能被VB&#xff0c;VBA&#xff0c;VBScript等高级编程工具访问。而使用ADO则可以很容易地使VB等编程…

java桌面版_长大了Java! 提出Java桌面版

java桌面版不&#xff0c;这不是另一个“ Java已死”的咆哮。 Java非常活跃。 它是可用的最佳开发和运行时平台之一。 迄今为止&#xff0c;最稳定的平台。 那可能只是它最大的祸根。 荒谬&#xff01; 稳定性如何&#xff1f; 你可能会问。 好吧&#xff0c;您可以看到创新所带…

[原创]2014年上半年测试书籍推荐

[原创]2014年上半年测试书籍推荐 周末&#xff0c;打扫完屋子&#xff0c;趁着有空&#xff0c;也整理下自己在2014年上半年翻看的测试相关的书&#xff01; 1 书名&#xff1a; 《google软件测试之道》 图书地址&#xff1a;http://item.jd.com/11330792.html 推荐星级&#x…

PHP文件加到WordPress页面,WordPress-所有页面链接到index.php文件

[WORDPRESS上的新功能]我正在使用自己的CSS等创建自己的wordpress主题。我设法在index.php文件中获得了所有不错的东西, 而且我现在也尝试制作其他页面。当我制作home.php, blog.php, about.php和contact.php文件(在我的主题文件夹中)时, 它们没有链接到该文件。我遵循Lynda.co…

Android实现简单短信发送器

布局&#xff1a; <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:id"id/container"android:layout_width"match_parent"android:layout_heigh…

linux 查看文件哈希码,使用linux的sha1sum命令查看效验文件哈希值命令

服务器今天小编给大家分享的是使用linux的sha1sum命令查看效验文件哈希值命令&#xff0c;相信很多人都不太了解&#xff0c;为了让大家更加了解&#xff0c;所以给大家总结了以下内容&#xff0c;一起往下看吧。一定会有所收获的哦。sha1sum命令用于生成和校验文件的sha1值。它…

Java中的传值与传引用

曾经对java中传值还是传引用的问题十分困惑&#xff0c;而且也被问到过许多次&#xff0c;无论是面试&#xff0c;还是平时我们平时的讨论中。 在stackoverflow上面浏览时&#xff0c;无意中发现了跟这个问题有关的论题&#xff0c;于是深入地查看了&#xff0c;感觉获益匪浅&a…

java高性能序列化_Java最佳实践–高性能序列化

java高性能序列化在使用Java编程语言时&#xff0c;我们将继续讨论与建议的实践有关的系列文章&#xff0c;我们将讨论并演示如何将对象序列化用于高性能应用程序。 所有讨论的主题均基于用例&#xff0c;这些用例源于电信行业关键任务超高性能生产系统的开发。 在阅读本文的…