java ee jms_在Java EE 7中自动配置JMS资源

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中

@ JMSConnectionFactoryDe​​finition,@ JMSConnectionFactoryDe​​finitions

用于声明一个或多个连接工厂

@ 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 {
    
    @PostConstruct
    public void confirm(){
        System.out.println("Email Queue configured");
    }
}

这一切有什么意义?

容器/ Java EE应用程序服务器确保JMS工件可按需提供给您的应用程序逻辑

  • 它在PaaS,微服务,Docker化的以及任何其他大量利用自动化部署的环境中都很有价值
  • 适用于自动化测试
  • 这是需要考虑和配置的少一件事!

额外资源

干杯!

翻译自: https://www.javacodegeeks.com/2015/11/automated-provisioning-jms-resources-java-ee-7.html

java ee jms

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值