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的类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奥莱是什么意思 奥莱的解释
- 下一篇: 冷热rx-java可观察