java ee jms
JMS 2.0(Java EE 7平台的一部分)引入了许多不错的功能 。 其中之一是能够声明JMS资源以进行自动部署。
Java EE 7之前的版本
- 使用@Resource注入连接工厂
- 使用@Resource查找目标位置(队列/主题)
- 拉出Session对象,并使用它创建Message,Message Producer并发送消息
最重要的是,您必须确保预先在应用程序服务器中配置了资源(即连接工厂和物理目标)
在Java EE 7时代……。
您可以利用JMS 2.0好东西
- 使用注入的JMS上下文(在大多数情况下)以更少的样板代码简化发送过程
- 最重要的是,您可以使用注释或部署描述符以声明方式配置JMS资源的自动配置
让我们看一下新的JMS 2.0注释。 您还可以在Github上拾取此Maven项目,并将其部署到您喜欢的IDE中
@ JMSConnectionFactoryDefinition,@ JMSConnectionFactoryDefinitions
用于声明一个或多个连接工厂
@ JMSDestinationDefinition,@ JMSDestinationDefinitions
用于声明一个或多个物理目标(队列或主题)
@Stateless
@JMSConnectionFactoryDefinition(name = "java:comp/env/AutoDeloyedJMSConf")
@JMSDestinationDefinition(interfaceName = "javax.jms.Queue", name = "java:comp/env/AutoDeloyedJMSQueue")
public class Service {//usage omitted...
}@JMSConnectionFactoryDefinitions({@JMSConnectionFactoryDefinition(name="java:comp/env/AutoDeloyedJMSConf1"),@JMSConnectionFactoryDefinition(name="java:comp/env/AutoDeloyedJMSConf2")
})
@JMSDestinationDefinitions({@JMSDestinationDefinition(name="java:comp/env/AutoDeloyedJMSQueue1",interfaceName = "javax.jms.Queue",),@JMSDestinationDefinition(name="java:comp/env/AutoDeloyedJMSQueue2",interfaceName = "javax.jms.Queue",)
})
@Stateless
public class AnotherService {//usage omitted...
}
哦,您也可以使用XML
//snippet only..<jms-connection-factory><name>java:comp/env/AutoDeloyedJMSConf3</name>
</jms-connection-factory><jms-destination><name>java:comp/env/AutoDeloyedJMSQueue3</name><interfaceName>javax.jms.Queue</interfaceName>
</jms-destination>
这些可以是Web部署描述符(web.xml)或EJB部署描述符(ejb-jar.xml)的一部分。
可能的变化
有几种使用此功能的方法
- 使用@Startup支持的@Singleton EJB声明JMS资源
- 您也可以为此在Servlet或任何CDI托管的bean上声明它
@Singleton
@Startup
@JMSDestinationDefinition(interfaceName = "javax.jms.Queue", name = "java:comp/env/EmailQueue")
public class EmailQueueAutoProvisionService {@PostConstructpublic void confirm(){System.out.println("Email Queue configured");}
}
这一切有什么意义?
容器/ Java EE应用程序服务器确保JMS工件可按需提供给您的应用程序逻辑
- 它在PaaS,微服务,Docker化的以及任何其他大量利用自动化部署的环境中都很有价值
- 适用于自动化测试
- 这是需要考虑和配置的少一件事!
额外资源
- JMS 2.0 规范文档
- 他们也有一个Twitter帐户 !
- 有关 Java EE的所有事物的水族馆博客
干杯!
翻译自: https://www.javacodegeeks.com/2015/11/automated-provisioning-jms-resources-java-ee-7.html
java ee jms