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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JMS 2.0的新增功能

發(fā)布時(shí)間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMS 2.0的新增功能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章列出了JMS 2.0 ( Java EE 7平臺(tái)的一部分)引入的所有新API(接口/類/注釋等)。 這些分類如下

  • API簡(jiǎn)化
  • 使用方便
  • 異常處理

這是一個(gè)簡(jiǎn)短的摘要以及一些代碼片段

API簡(jiǎn)化

JMSContext

在Connection和Session對(duì)象之上的更簡(jiǎn)單的抽象,從而消除了與這些類/接口進(jìn)行交互以便發(fā)送/接收消息的需要。

@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封裝了分別向目的地(主題和隊(duì)列)和從目的地發(fā)送JMS消息的過程。 可以從JMSContext對(duì)象獲得這些對(duì)象的實(shí)例,從API易用性的角度來看,它們很重要。 這是一個(gè)“流利的” API示例

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

XAJMSContext

與原始JMSContext對(duì)象的事務(wù)等效。 該接口的實(shí)現(xiàn)為JMS中的JTA提供支持

使用方便

這些注釋可以減少對(duì)手動(dòng)/管理配置的依賴,并可以推動(dòng)Java EE應(yīng)用程序的自動(dòng)部署。 這些是“配置為代碼”的完美示例,在云(PaaS)部署方案中無價(jià)之寶

JMSConnectionFactoryDe??finition和JMSConnectionFactoryDe??finitions

指定一個(gè)/多個(gè)JMS ConnectionFactory對(duì)象的JNDI名稱。 此資源將在部署時(shí)自動(dòng)配置。

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

JMSDestinationDefinition和JMSDestinationDefinitions

指定一個(gè)/多個(gè)JMS目標(biāo)(隊(duì)列/主題)的JNDI名稱。 此資源將在部署時(shí)自動(dòng)配置。

@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作為基礎(chǔ)/父級(jí),從該基礎(chǔ)/父級(jí)擴(kuò)展了所有其他未經(jīng)檢查的異常。 這是JMS 2.0中引入的所有新異常的列表(這些異常大多是其檢查的對(duì)等物的未檢查版本)

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

JMSPasswordCrdential

在嘗試使用注入的JMSContext對(duì)象進(jìn)行任何操作之前,用于保護(hù)對(duì)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注入期間要使用的會(huì)話模式

@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

總結(jié)

以上是生活随笔為你收集整理的JMS 2.0的新增功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。