沈阳高端做网站建设,应用软件商店,it培训机构十大排名,wordpress 主题 不显示图片这篇文章列出了JMS 2.0 #xff08; Java EE 7平台的一部分#xff09;引入的所有新API#xff08;接口/类/注释等#xff09;。 这些分类如下 API简化 使用方便 异常处理 杂 这是一个简短的摘要以及一些代码片段 API简化 JMSContext 在Connection和Session对象之上… 这篇文章列出了JMS 2.0 Java EE 7平台的一部分引入的所有新API接口/类/注释等。 这些分类如下 API简化 使用方便 异常处理 杂 这是一个简短的摘要以及一些代码片段 API简化 JMSContext 在Connection和Session对象之上的更简单的抽象从而消除了与这些类/接口进行交互以便发送/接收消息的需要。 Path(email)
Stateless
public class EmailService {//pulls in default Conn Factory as per Java EE 7ResourceConnectionFactory 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 managedInjectJMSConnectionFactory(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封装了分别向目的地主题和队列和从目的地发送JMS消息的过程。 可以从JMSContext对象获得这些对象的实例从API易用性的角度来看它们很重要。 这是一个“流利的” API示例 context.createProducer().send(queue,message);
context.createConsumer(topic).receiveBody(Mail.class); XAJMSContext 与原始JMSContext对象的事务等效。 该接口的实现为JMS中的JTA提供支持 使用方便 这些注释可以减少对手动/管理配置的依赖并可以推动Java EE应用程序的自动部署。 这些是“配置为代码”的完美示例在云PaaS部署方案中无价之宝 JMSConnectionFactoryDefinition和JMSConnectionFactoryDefinitions 指定一个/多个JMS ConnectionFactory对象的JNDI名称。 此资源将在部署时自动配置。 JMSConnectionFactoryDefinition(name jndi/App1JMSConnFactory)JMSConnectionFactoryDefinitions({JMSConnectionFactoryDefinition(name jndi/App2JMSConnFactory),JMSConnectionFactoryDefinition(name jndi/App3JMSConnFactory)}) JMSDestinationDefinition和JMSDestinationDefinitions 指定一个/多个JMS目标队列/主题的JNDI名称。 此资源将在部署时自动配置。 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作为基础/父级从该基础/父级扩展了所有其他未经检查的异常。 这是JMS 2.0中引入的所有新异常的列表这些异常大多是其检查的对等物的未检查版本 JMSRuntimeException IllegalStateRuntimeException InvalidClientIDRuntimeException InvalidDestinationRuntimeException InvalidSelectorRuntimeException JMSSecurityRuntimeException MessageFormatRuntimeException MessageNotWriteableRuntimeException ResourceAllocationRuntimeException TransactionInProgressRuntimeException TransactionRolledBackRuntimeException 杂 JMSPasswordCrdential 在尝试使用注入的JMSContext对象进行任何操作之前用于保护对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注入期间要使用的会话模式 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