当前位置: 动力学知识库 > 问答 > 编程问答 >

apache camel - Aries Blueprint in Karaf - Can a blueprint reference an external properties file

问题描述:

I am using an ActiveMQ blueprint to setup a JMS Connection Pool.

I also use Camel to service some functionality.

I use the org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer to allow the use of an external properties file in setting up the camel-context file.

Is there a similar type functionality using blueprints?

So basically, I want to replace ${server.address} with a property I get from a property file in the configuration below:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"

xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"

xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"

xmlns:amq="http://activemq.apache.org/schema/core">

<bean id="activemqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">

<property name="brokerURL"

value="nio://${server.address}" />

</bean>

<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">

<property name="maxConnections" value="8" />

<property name="connectionFactory" ref="activemqConnectionFactory" />

</bean>

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">

<property name="connectionFactory" ref="pooledConnectionFactory" />

<property name="concurrentConsumers" value="5" />

</bean>

<bean id="resourceManager" class="org.apache.activemq.pool.ActiveMQResourceManager"

init-method="recoverResource">

<property name="transactionManager" ref="transactionManager" />

<property name="connectionFactory" ref="activemqConnectionFactory" />

<property name="resourceName" value="activemq.localhost" />

</bean>

<bean id="xaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">

<argument value="nio://${server.address}" />

</bean>

<bean id="connectionFactory" class="org.fusesource.jms.pool.JcaPooledConnectionFactory"

init-method="start" destroy-method="stop">

<property name="connectionFactory" ref="pooledConnectionFactory" />

<property name="name" value="activemq" />

</bean>

<reference id="transactionManager" interface="javax.transaction.TransactionManager" />

<service ref="pooledConnectionFactory" interface="javax.jms.ConnectionFactory">

<service-properties>

<entry key="name" value="localhost" />

</service-properties>

</service>

</blueprint>

网友答案:

You can use System properties and/or configuration via the config admin:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
    xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

    <!-- Allow the use of system properties -->
    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" />

    <!--
        config admin properties from etc/com.example.config.cfg
    -->
    <cm:property-placeholder persistent-id="com.example.config" update-strategy="reload">
        <cm:default-properties>
            <cm:property name="configDir" value="$[karaf.base]/my-config" />
        </cm:default-properties>
    </cm:property-placeholder>

    <bean id="config" class="com.example.Config">
        <property name="rootDir" value="${configDir}" />
        <property name="someSysProp" value="$[someSysProp]" />
    </bean>

</blueprint>

The "ext:property-placeholder" element allows you to use system properties (like karaf.base in the example) via the defined placeholder pre- and suffix, but this is optional. If you only need your own configuration you can provide it via a file in etc/ etc/com.example.config.cfg and reference it via the persistence-id.

分享给朋友:
您可能感兴趣的文章:
随机阅读: