【问题标题】:Queue creation in Spring EnvironmentSpring环境中的队列创建
【发布时间】:2014-05-12 11:25:16
【问题描述】:
我是 Spring Jms 的新手,我研究了如何使用 spring 和 jboss 创建队列并使用它们。我想知道使用 JndiObjectFactoryBean spring 配置配置时如何创建队列。
我们是否需要为创建队列编写一些xml配置?我已经看到了在文件中编写队列配置并放置在jboss的部署文件夹中的各种示例。那么在使用Spring时我们需要编写这些配置吗?
请帮帮我,我被卡住了。
谢谢。
【问题讨论】:
标签:
spring
jboss
jms
spring-jms
【解决方案1】:
当您使用通过 JNDI 访问的 JMS 代理时,您只需确保 Spring 能够将表示 javax.jms.Destination 的字符串解析为实际的 Destination。
Spring 使用 DestinationResolver 做到这一点。由于您已将 Spring 配置为连接到您的 JMS 代理,因此您必须在某处进行 JNDI 配置(通过使用 jndi.properties 或其他形式)。如果还没有的话,你可以很容易地用它创建一个JndiTemplate
一旦你有了它,你需要如下定义一个 bean,假设 JndiTemplate bean 可用名称为 jndiTemplate:
@Bean
public JndiDestinationResolver destinationResolver() {
JndiDestinationResolver destinationResolver = new JndiDestinationResolver();
destinationResolver.setJndiTemplate(jndiTemplate());
return destinationResolver;
}
或
<bean id="destinationResolver"
class="org.springframework.jms.support.destination.JndiDestinationResolver">
<property name="jndiTemplate" ref="jndiTemplate"/>
</bean>
那你需要配置这个destinationResolver而不是默认的。您可以在 JmsTemplate 和消息侦听器容器上执行此操作(检查 destinationResolver 或 destination-resolver 属性)。
您的队列或主题的名称是 jndi 条目。检查您在 JBoss 中使用的 JNDI 名称,以便从基于 Spring 的代码中查找它。
【解决方案2】:
当您使用一些 JEE 容器时,如果您依赖它的选项会更好:JDBC、JMS 等。在您的情况下,您应该使用 JBOSS 配置配置 Queue 和 ConnectionFactory。
从 Spring 应用程序中,您只需要从 JNDI 获取对这些对象的引用。对于@Configuration 或任何@Component 服务的情况,似乎@Resource 应该足够了。
这里是一些如何配置 Spring 以在 Annotation 配置的情况下处理 JNDI 的答案:Spring @Resource Handling