JMS 2.0中JMSContext的类型
如果您遵循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的类型相关推荐
- 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 ...
- IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型
原文:https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/ 作者: ...
- Java EE 7:带有Glassfish v4的JMS 2.0
Java EE 7最近已被执行委员会接受 . 这意味着我们很快将在市场上提供Java EE 7应用服务器. 构成Java EE 7的规范之一是JMS 2.0 . 自1.1版以来,引入了一些有趣的改进. ...
- JMS 2.0的新增功能
这篇文章列出了JMS 2.0 ( Java EE 7平台的一部分)引入的所有新API(接口/类/注释等). 这些分类如下 API简化 使用方便 异常处理 杂 这是一个简短的摘要以及一些代码片段 API ...
- 避免在 ASP.NET Core 3.0 中为启动类注入服务
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...
- C#3.0中的新特性
转:http://baike.baidu.com/view/406857.htm 第一个特性:隐式类型化本地变量 这个特性非常简单,有些JavaScript的影子,我们可以统一使用使用"va ...
- c++builder 6.0中OnCliked= fun实现的原理
C++builer 6.0中使用委托类型,使用非常的方便 . Member Function Pointers and the Fastest Possible C++ Delegates Don C ...
- 在C#2.0中使用Nullable可空类型(转帖)
在C#2.0中使用Nullable可空类型 在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常.在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值( ...
- 在C#2.0中使用Nullable可空类型
在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常.在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值(即空值)的数据类型,这对处理数据库中包含可选 ...
最新文章
- python可以从事什么工作-学完Python开发可以从事哪些行业?
- 生成android证书
- 分布式服务下,消息中间件改造
- excel概率密度函数公式_干货|利用excel公式,快速对定量的化学检测方法进行测量不确定度的评定...
- MySQL高级 - 查询缓存 - 开启查询缓存
- 图的定义与术语 - 数据结构和算法54
- function函数嵌套 matlab_matlab – 当没有使用“end”时,一个.m文件中的多个函数是嵌套的还是本地的...
- Therenbsp;isnbsp;nonbsp;resul…
- 历经外企、创业公司、大厂的程序员告诉你:第一份工作有多重要!
- [转载] python列表解释(list comprehension)记录
- 2018, CHI CHI2016汇总all CHI
- 广东省地方税务局电子办税服务厅--卡在注册ca证书界面的处理
- 知网HTML阅读是什么,HTML – 屏幕阅读器究竟是什么?我应该如何处理我的网站?...
- Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
- Android视频列表自动播放功能
- springboot+毕业设计管理系统 毕业设计-附源码221032
- 让 GitHub 上这几个小游戏帮你找回童真
- PROCESS_INFORMATION
- js实现touch移动触屏滑动事件
- csol霸主永恒python_昔日霸主沦为下水道?黑客编程告诉你谁是剑网3新赛季最惨门派!...
热门文章
- ps中对齐,历史记录,图层
- 人脸检测的model类facemodel
- JS生成x到y的随机数
- B树、B+树、B*树谈到R 树
- 利用 GregorianCalendar 制作当前月的月历
- hadoop2.6.0+eclipse配置
- oauth2.0协议流程_正确的工作流程:我应该使用哪个OAuth 2.0流程?
- enum.values_占用内存的Enum.values()方法
- java设置并行度_控制Java并行流的并行度
- dynamodb容器使用_使用DynamoDB映射器将DynamoDB项目映射到对象