访问activemq Poolable Connection工厂作为OSGI服务

时间:2014-06-05 01:34:46

标签: activemq jbossfuse apache-servicemix blueprint-osgi fuseesb

我正在使用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 我需要升级吗?

1 个答案:

答案 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。