我正在使用fuse 6.0和activemq 5.8。不是在每个包中定义activemq poolable连接工厂,而是在公共包中定义并将其作为osgi服务公开。我在FUSE_HOME / etc中创建了蓝色打印文件并打开了这样的osgi服务。
<osgix:cm-properties id="prop" persistent-id="xxx.xxx.xxx.properties" />
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${xxx.url}" />
<property name="userName" value="${xxx.username}" />
<property name="password" value="${xxx.password}" />
</bean>
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
<property name="maxConnections" value="${maxconnections}" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<service ref="pooledConnectionFactory" interface="javax.jms.ConnectionFactory">
<service-properties>
<entry key="name" value="localhost"/>
</service-properties>
</service>
当我尝试在蓝图文件和像这样的弹簧文本文件中访问此服务时
<reference id="pooledConnectionFactory" interface="javax.jms.ConnectionFactory"/>
bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory"/>
<property name="concurrentConsumers" value="${xxx.concurrentConsumers}"/>
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig"/>
</bean>
但我在捆绑启动期间接受了以下期望。
无法添加连接ID:PLNL6237-55293-1401929434025-11:1201,原因:java.lang.SecurityException:用户名[null]或密码无效。
我甚至在我的捆绑包中定义了概要定义。
我该如何解决这个问题?任何帮助表示赞赏。 我在网上找到了https://issues.apache.org/jira/i#browse/SM-2183 我需要升级吗?
答案 0 :(得分:0)
我认为您错误地使用了属性占位符。首先,您应该知道osgix:cm-properties仅公开您指定的持久性ID的属性。您可以将其视为java.util.Properties对象,甚至将其作为一个注入bean。但这意味着它不会尝试解析属性。
要解析属性,请使用spring的属性占位符配置器。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties" ref="prop"/>
</bean>
P.S。 cm-properties的持久标识是文件的名称,不包括文件类型。最后你不需要.properties。