Quantcast

Dynamic TransportConnector Config with xbean

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Dynamic TransportConnector Config with xbean

mpilone
I'm trying to use the ActiveMQ Xbean configuration in a Spring configuration file to configure an embedded broker. Up to now I've been simply instantiation a BrokerService and setting transport connectors and network connectors directly. I'd like to switch to using the "amq" namespace support but I'm having trouble figuring out how to dynamically generate the transport connectors on the broker.

My deployments environments vary and many contain multiple interfaces so I specify my broker URLs as a comma delimited string in a configuration file, such as:

brokerUrls = tcp://192.168.1.1:8025,tcp://192.168.10.1:8025,stomp://192.168.1.1:8035

I have a bean factory that I created that can generate a java.util.ArrayList of TransportConnectors to use; however I don't see any easy way to reference this list from the Xbean configuration. I want to do something like:

<amq:transportConnectors>

     <bean factory-bean="networkInterfaceTransportConnectorFactory" factory-method="create" />

   </amq:transportConnectors>


But that doesn't seem to work and generates the error:


org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.ArrayList' 

to required type 'java.util.List' for property 'transportConnectors'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.util.ArrayList] to required type [org.apache.activemq.broker.TransportConnector] for property 'transportConnectors[0]': no matching editors or conversion strategy found


I'm sure I could make this work through some combination of Spring 3's environment/profile support, but I'd like to just be able to set a list of preconfigured transport connectors on the broker during construction. Any suggestions?


Thanks,

-mike


 | Mike Pilone | Software Architect, Distribution | [hidden email] | o: 202-513-2679  m: 703-969-7493

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic TransportConnector Config with xbean

mpilone
Nevermind. I found I was just able to do:

<amq:broker id="broker" useJmx="true" start="true">

   <amq:persistenceAdapter>

     <amq:kahaDB  directory="$data_path}"/>

   </amq:persistenceAdapter>

 

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

 

   <property name="transportConnectors">

     <bean factory-bean="networkInterfaceTransportConnectorFactory" factory-method="create" />

   </property>

   

    <property name="networkConnectors">

      <bean factory-bean="networkInterfaceNetworkConnectorFactory" factory-method="create" />

    </property>

</amq:broker>


I didn't realize that I could mix normal spring context property tags with the amq namespaced broker definition.


-mike


 | Mike Pilone | Software Architect, Distribution | [hidden email] | o: 202-513-2679  m: 703-969-7493


From: Mike Pilone <[hidden email]>
Reply-To: "[hidden email]" <[hidden email]>
Date: Wednesday, September 12, 2012 10:13 AM
To: users <[hidden email]>
Subject: Dynamic TransportConnector Config with xbean

I'm trying to use the ActiveMQ Xbean configuration in a Spring configuration file to configure an embedded broker. Up to now I've been simply instantiation a BrokerService and setting transport connectors and network connectors directly. I'd like to switch to using the "amq" namespace support but I'm having trouble figuring out how to dynamically generate the transport connectors on the broker.

My deployments environments vary and many contain multiple interfaces so I specify my broker URLs as a comma delimited string in a configuration file, such as:

brokerUrls = tcp://192.168.1.1:8025,tcp://192.168.10.1:8025,stomp://192.168.1.1:8035

I have a bean factory that I created that can generate a java.util.ArrayList of TransportConnectors to use; however I don't see any easy way to reference this list from the Xbean configuration. I want to do something like:

<amq:transportConnectors>

     <beanfactory-bean="networkInterfaceTransportConnectorFactory"factory-method="create"/>

   </amq:transportConnectors>


But that doesn't seem to work and generates the error:


org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.ArrayList' 

to required type 'java.util.List' for property 'transportConnectors'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.util.ArrayList] to required type [org.apache.activemq.broker.TransportConnector] for property 'transportConnectors[0]': no matching editors or conversion strategy found


I'm sure I could make this work through some combination of Spring 3's environment/profile support, but I'd like to just be able to set a list of preconfigured transport connectors on the broker during construction. Any suggestions?


Thanks,

-mike


 | Mike Pilone | Software Architect, Distribution | [hidden email] | o: 202-513-2679  m: 703-969-7493

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Dynamic TransportConnector Config with xbean

dejanb
Hi Mike,

it's a nice approach. We should have something like this supported
especially for defining network connectors which can be complex to set.

Regards
--
Dejan Bosanac
Senior Software Engineer | FuseSource Corp.
[hidden email] | fusesource.com
skype: dejan.bosanac | twitter: @dejanb
blog: http://www.nighttale.net
ActiveMQ in Action: http://www.manning.com/snyder/



On Wed, Sep 12, 2012 at 6:20 PM, Mike Pilone <[hidden email]> wrote:

> Nevermind. I found I was just able to do:
>
> <amq:broker id="broker" useJmx="true" start="true">
>
>    <amq:persistenceAdapter>
>
>      <amq:kahaDB  directory="$data_path}"/>
>
>    </amq:persistenceAdapter>
>
>
>
>    <property name="brokerName" ref="brokerName" />
>
>
>
>    <property name="transportConnectors">
>
>      <bean factory-bean="networkInterfaceTransportConnectorFactory"
> factory-method="create" />
>
>    </property>
>
>
>
>     <property name="networkConnectors">
>
>       <bean factory-bean="networkInterfaceNetworkConnectorFactory"
> factory-method="create" />
>
>     </property>
>
> …
>
> </amq:broker>
>
>
> I didn't realize that I could mix normal spring context property tags with
> the amq namespaced broker definition.
>
>
> -mike
>
>
>  | Mike Pilone | Software Architect, Distribution | [hidden email] | o:
> 202-513-2679  m: 703-969-7493****
>
>
> From: Mike Pilone <[hidden email]>
> Reply-To: "[hidden email]" <[hidden email]>
> Date: Wednesday, September 12, 2012 10:13 AM
> To: users <[hidden email]>
> Subject: Dynamic TransportConnector Config with xbean
>
> I'm trying to use the ActiveMQ Xbean configuration in a Spring
> configuration file to configure an embedded broker. Up to now I've been
> simply instantiation a BrokerService and setting transport connectors and
> network connectors directly. I'd like to switch to using the "amq"
> namespace support but I'm having trouble figuring out how to dynamically
> generate the transport connectors on the broker.
>
> My deployments environments vary and many contain multiple interfaces so I
> specify my broker URLs as a comma delimited string in a configuration file,
> such as:
>
> brokerUrls = tcp://192.168.1.1:8025,tcp://192.168.10.1:8025,stomp://
> 192.168.1.1:8035
>
> I have a bean factory that I created that can generate a
> java.util.ArrayList of TransportConnectors to use; however I don't see any
> easy way to reference this list from the Xbean configuration. I want to do
> something like:
>
> <amq:transportConnectors>
>
>      <beanfactory-bean="networkInterfaceTransportConnectorFactory"
> factory-method="create"/>
>
>    </amq:transportConnectors>
>
>
> But that doesn't seem to work and generates the error:
>
>
> org.springframework.beans.ConversionNotSupportedException: Failed to
> convert property value of type 'java.util.ArrayList'
>
> to required type 'java.util.List' for property 'transportConnectors';
> nested exception is java.lang.IllegalStateException: Cannot convert value
> of type [java.util.ArrayList] to required type
> [org.apache.activemq.broker.TransportConnector] for property
> 'transportConnectors[0]': no matching editors or conversion strategy found
>
>
> I'm sure I could make this work through some combination of Spring 3's
> environment/profile support, but I'd like to just be able to set a list of
> preconfigured transport connectors on the broker during construction. Any
> suggestions?
>
>
> Thanks,
>
> -mike
>
>
>  | Mike Pilone | Software Architect, Distribution | [hidden email] | o:
> 202-513-2679  m: 703-969-7493****
>
>
Loading...