日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JMS 2.0中JMSContext的类型

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。