如果您遵循Java EE,您将不会知道JMS 2.0(Java EE 7)中的简化API组件。 构成简化API一部分的重要接口之一是javax.jms.JMSContext接口。

根据实例的获取和管理方式(生命周期),JMSContext可以分为两种类型:容器管理和应用程序管理

应用管理

让我们看一下代码片段:

@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");}}
}

在这种情况下,使用ConnectionFactory获得了JMSContext的实例,因此需要由应用程序代码关闭。 容器将无法管理其生命周期

集装箱管理

如果使用@Inject允许容器注入JMSContext实例,则容器将对其生命周期承担全部责任。

@Path("email")
@Stateless
public class AwesomeEmailService {//container managed@InjectJMSContext 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(AwesomeEmailService.class.getName()).log(Level.SEVERE, null, ex);throw new JMSRuntimeException(ex.getMessage(), ex.getMessage(), ex);}}
}

如果在容器管理的JMSContext上调用close() ,将最终遇到此异常– javax.jms.IllegalStateRuntimeException:在容器管理(注入)的JMSContext上不允许使用此方法。

和…。

在上一个示例中,容器自动使用默认的Connection Factory(根据Java EE 7)。 您还可以利用@JMSConnectionFactory批注(JMS 2.0的另一个有用补充)来指定您选择的连接工厂。

@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);}}
}

就是这样..干杯!

翻译自: https://www.javacodegeeks.com/2015/06/types-of-jmscontext-in-jms-2-0.html

JMS 2.0中JMSContext的类型相关推荐

  1. jms.jar 2.0_JMS 2.0中JMSContext的类型

    jms.jar 2.0 如果您遵循Java EE,那么您将不会知道JMS 2.0(Java EE 7)中的简化API组件. 构成简化API一部分的重要接口之一是javax.jms.JMSContext ...

  2. IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型

    原文:https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/ 作者: ...

  3. Java EE 7:带有Glassfish v4的JMS 2.0

    Java EE 7最近已被执行委员会接受 . 这意味着我们很快将在市场上提供Java EE 7应用服务器. 构成Java EE 7的规范之一是JMS 2.0 . 自1.1版以来,引入了一些有趣的改进. ...

  4. JMS 2.0的新增功能

    这篇文章列出了JMS 2.0 ( Java EE 7平台的一部分)引入的所有新API(接口/类/注释等). 这些分类如下 API简化 使用方便 异常处理 杂 这是一个简短的摘要以及一些代码片段 API ...

  5. 避免在 ASP.NET Core 3.0 中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...

  6. C#3.0中的新特性

    转:http://baike.baidu.com/view/406857.htm 第一个特性:隐式类型化本地变量 这个特性非常简单,有些JavaScript的影子,我们可以统一使用使用"va ...

  7. c++builder 6.0中OnCliked= fun实现的原理

    C++builer 6.0中使用委托类型,使用非常的方便 . Member Function Pointers and the Fastest Possible C++ Delegates Don C ...

  8. 在C#2.0中使用Nullable可空类型(转帖)

    在C#2.0中使用Nullable可空类型 在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常.在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值( ...

  9. 在C#2.0中使用Nullable可空类型

    在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常.在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值(即空值)的数据类型,这对处理数据库中包含可选 ...

最新文章

  1. python可以从事什么工作-学完Python开发可以从事哪些行业?
  2. 生成android证书
  3. 分布式服务下,消息中间件改造
  4. excel概率密度函数公式_干货|利用excel公式,快速对定量的化学检测方法进行测量不确定度的评定...
  5. MySQL高级 - 查询缓存 - 开启查询缓存
  6. 图的定义与术语 - 数据结构和算法54
  7. function函数嵌套 matlab_matlab – 当没有使用“end”时,一个.m文件中的多个函数是嵌套的还是本地的...
  8. Therenbsp;isnbsp;nonbsp;resul…
  9. 历经外企、创业公司、大厂的程序员告诉你:第一份工作有多重要!
  10. [转载] python列表解释(list comprehension)记录
  11. 2018, CHI CHI2016汇总all CHI
  12. 广东省地方税务局电子办税服务厅--卡在注册ca证书界面的处理
  13. 知网HTML阅读是什么,HTML – 屏幕阅读器究竟是什么?我应该如何处理我的网站?...
  14. Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
  15. Android视频列表自动播放功能
  16. springboot+毕业设计管理系统 毕业设计-附源码221032
  17. 让 GitHub 上这几个小游戏帮你找回童真
  18. PROCESS_INFORMATION
  19. js实现touch移动触屏滑动事件
  20. csol霸主永恒python_昔日霸主沦为下水道?黑客编程告诉你谁是剑网3新赛季最惨门派!...

热门文章

  1. ps中对齐,历史记录,图层
  2. 人脸检测的model类facemodel
  3. JS生成x到y的随机数
  4. B树、B+树、B*树谈到R 树
  5. 利用 GregorianCalendar 制作当前月的月历
  6. hadoop2.6.0+eclipse配置
  7. oauth2.0协议流程_正确的工作流程:我应该使用哪个OAuth 2.0流程?
  8. enum.values_占用内存的Enum.values()方法
  9. java设置并行度_控制Java并行流的并行度
  10. dynamodb容器使用_使用DynamoDB映射器将DynamoDB项目映射到对象