You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by CB4 <cb...@akorri.com> on 2008/10/01 15:57:06 UTC
Configuring Embedded Broker with Spring/JBoss JMX issues
Spring 2.5.1
ActiveMQ 5.1.0
JBoss 4.2.1
I can not get the embedded broker configured using Spring context
configuration. I've tried pretty much every permutation and parameter for
the broker but the result is always the same. I am beginning to think there
is an issue with the way activemq registers its mbeans with the JBoss MBean
server. I saw this in activemq 4.1.0 as well which is why I upgraded to
5.1.0. But I still get the same result. Any help is much appreciated, I've
been stuck on this for a couple of months.
Spring application context...
<amq:broker start="true" brokerName="localhost" persistent="false"
useJmx="true">
<amq:managementContext>
<amq:managementContext createConnector="false" />
</amq:managementContext>
</amq:broker>
<!-- JMS ConnectionFactory to use, configuring the embedded broker using
XML -->
<amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost">
</amq:connectionFactory>
Starting JBoss I get (Note: Spring context is intiatilzed via a jboss
startup MBean)...
2008-10-01 09:29:31,059 ERROR main
[org.apache.activemq.broker.BrokerService] Failed to start ActiveMQ JMS
Message Broker. Reason: javax.management.InstanceAlreadyExistsException:
org.apache.activemq:BrokerName=localhost,Type=Broker already registered.
javax.management.InstanceAlreadyExistsException:
org.apache.activemq:BrokerName=localhost,Type=Broker already registered.
at
org.jboss.mx.server.registry.BasicMBeanRegistry.add(BasicMBeanRegistry.java:761)
at
org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:225)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
--
View this message in context: http://www.nabble.com/Configuring-Embedded-Broker-with-Spring-JBoss-JMX-issues-tp19761024p19761024.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by Bruce Snyder <br...@gmail.com>.
On Thu, Oct 2, 2008 at 3:37 AM, Dejan Bosanac
<de...@ttmsolutions.com> wrote:
> If you are taking this route, you can try defining your broker
> configuration in a separate xml file and do something like
>
> BrokerService broker = BrokerFactory.createBroker(new
> URI("xbean:activemq.xml"));
> broker.start();
>
> it will be easier to configure it that way.
Use of the BrokerFactoryBean is also very easy with the activemq.xml:
BrokerFactoryBean brokerFactory = new BrokerFactoryBean(new
ClassPathResource("path/to/activemq.xml"));
brokerFactory.afterPropertiesSet();
BrokerService broker = brokerFactory.getBroker();
Bruce
--
perl -e 'print unpack("u30","D0G)U8V4\@4VYY9&5R\"F)R=6-E+G-N>61E<D\!G;6%I;\"YC;VT*"
);'
Apache ActiveMQ - http://activemq.org/
Apache Camel - http://activemq.org/camel/
Apache ServiceMix - http://servicemix.org/
Blog: http://bruceblog.org/
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by Dejan Bosanac <de...@ttmsolutions.com>.
If you are taking this route, you can try defining your broker
configuration in a separate xml file and do something like
BrokerService broker = BrokerFactory.createBroker(new
URI("xbean:activemq.xml"));
broker.start();
it will be easier to configure it that way.
Cheers
--
Dejan Bosanac
http://www.ttmsolutions.com - get a free ActiveMQ user guide
ActiveMQ in Action - http://www.manning.com/snyder/
Scripting in Java - http://www.scriptinginjava.net
CB4 wrote:
> I was able to configure my broker programatically within my startup mbean
> using the following without jmx conflicts:
>
> BrokerService broker =
> org.apache.activemq.broker.BrokerFactory.createBroker("broker:(vm://localhost)");
> broker.setUseJmx(true);
> broker.setPersistent(false);
> broker.start();
>
> This is less than an ideal solution and leads me to believe there is a bug
> in the spring <amq:broker> xml schema configuration handler.
>
>
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by CB4 <cb...@akorri.com>.
I was able to configure my broker programatically within my startup mbean
using the following without jmx conflicts:
BrokerService broker =
org.apache.activemq.broker.BrokerFactory.createBroker("broker:(vm://localhost)");
broker.setUseJmx(true);
broker.setPersistent(false);
broker.start();
This is less than an ideal solution and leads me to believe there is a bug
in the spring <amq:broker> xml schema configuration handler.
--
View this message in context: http://www.nabble.com/Configuring-Embedded-Broker-with-Spring-JBoss-JMX-issues-tp19761024p19770719.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by James Strachan <ja...@gmail.com>.
2008/10/1 James Strachan <ja...@gmail.com>:
> 2008/10/1 CB4 <cb...@akorri.com>:
>>
>> I forgot to mention that if I omit the amq:broker element from my context
>> everything works just fine as the connectionFactory created the broker with
>> default behavior (using the vm URI). However this won't do it for me as I
>> need to configure the broker with my own settings.
>
> So it looks like you're making 2 brokers. So just setup your ordering
> correctly so that you only make one broker - or force the VM transport
> to not create a broker.
Or maybe JBoss is instantiating or including the spring XML twice?
--
James
-------
http://macstrac.blogspot.com/
Open Source Integration
http://open.iona.com
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by CB4 <cb...@akorri.com>.
So I tried changing my connectionFactory to use the following URL
brokerURL="vm://localhost?create=false"
This did not solve my problem. Ordering does not seem to matter. I get this
issue regardless of the ordering.
--
View this message in context: http://www.nabble.com/Configuring-Embedded-Broker-with-Spring-JBoss-JMX-issues-tp19761024p19767822.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by James Strachan <ja...@gmail.com>.
2008/10/1 CB4 <cb...@akorri.com>:
>
> I forgot to mention that if I omit the amq:broker element from my context
> everything works just fine as the connectionFactory created the broker with
> default behavior (using the vm URI). However this won't do it for me as I
> need to configure the broker with my own settings.
So it looks like you're making 2 brokers. So just setup your ordering
correctly so that you only make one broker - or force the VM transport
to not create a broker.
--
James
-------
http://macstrac.blogspot.com/
Open Source Integration
http://open.iona.com
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by CB4 <cb...@akorri.com>.
I forgot to mention that if I omit the amq:broker element from my context
everything works just fine as the connectionFactory created the broker with
default behavior (using the vm URI). However this won't do it for me as I
need to configure the broker with my own settings.
--
View this message in context: http://www.nabble.com/Configuring-Embedded-Broker-with-Spring-JBoss-JMX-issues-tp19761024p19761097.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by CB4 <cb...@akorri.com>.
Here is the full stack trace:
2008-10-01 09:29:31,059 ERROR main
[org.apache.activemq.broker.BrokerService] Failed to start ActiveMQ JMS
Message Broker. Reason: javax.management.InstanceAlreadyExistsException:
org.apache.activemq:BrokerName=localhost,Type=Broker already registered.
javax.management.InstanceAlreadyExistsException:
org.apache.activemq:BrokerName=localhost,Type=Broker already registered.
at
org.jboss.mx.server.registry.BasicMBeanRegistry.add(BasicMBeanRegistry.java:761)
at
org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:225)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at
org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at
org.jboss.mx.server.MBeanServerImpl$3.run(MBeanServerImpl.java:1422)
at java.security.AccessController.doPrivileged(Native Method)
at
org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:1417)
at
org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:376)
at
org.jboss.system.server.jmx.LazyMBeanServer.registerMBean(LazyMBeanServer.java:215)
at
org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:1554)
at
org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:540)
at
org.apache.activemq.broker.BrokerService.start(BrokerService.java:444)
at
org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:50)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at
org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
at
com.akorri.bp.context.ServicesContext.<clinit>(ServicesContext.java:137)
at
com.akorri.bp.mbean.CollectionServiceMgmt.<clinit>(CollectionServiceMgmt.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at
org.jboss.mx.server.MBeanServerImpl.instantiate(MBeanServerImpl.java:1233)
at
org.jboss.mx.server.MBeanServerImpl.instantiate(MBeanServerImpl.java:286)
at
org.jboss.mx.server.MBeanServerImpl.createMBean(MBeanServerImpl.java:344)
at org.jboss.system.ServiceCreator.install(ServiceCreator.java:157)
at
org.jboss.system.ServiceConfigurator.internalInstall(ServiceConfigurator.java:449)
at
org.jboss.system.ServiceConfigurator.install(ServiceConfigurator.java:171)
at
org.jboss.system.ServiceController.install(ServiceController.java:226)
at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy4.install(Unknown Source)
at org.jboss.deployment.SARDeployer.create(SARDeployer.java:249)
at org.jboss.deployment.MainDeployer.create(MainDeployer.java:969)
at org.jboss.deployment.MainDeployer.create(MainDeployer.java:959)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:818)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
at sun.reflect.GeneratedMethodAccessor18.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at
org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy9.deploy(Unknown Source)
at
org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
at
org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
at
org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
at
org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336)
at
org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at
org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at
org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at $Proxy0.start(Unknown Source)
at
org.jboss.system.ServiceController.start(ServiceController.java:417)
at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy4.start(Unknown Source)
at org.jboss.deployment.SARDeployer.start(SARDeployer.java:302)
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at
org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy5.deploy(Unknown Source)
at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)
at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)
at org.jboss.Main.boot(Main.java:200)
at org.jboss.Main$1.run(Main.java:508)
at java.lang.Thread.run(Thread.java:595)
--
View this message in context: http://www.nabble.com/Configuring-Embedded-Broker-with-Spring-JBoss-JMX-issues-tp19761024p19761039.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.
Re: Configuring Embedded Broker with Spring/JBoss JMX issues
Posted by CB4 <cb...@akorri.com>.
OK so I have narrowed this down to the amq:broker element behaves badly in
spring or in spring within JBoss. I changed my broker name to localhost2.
Spring or JBoss appears to be registering this mbean twice. Anybody have
any ideas on how to fix this?
<amq:broker start="true" brokerName="localhost2" persistent="false"
useJmx="true">
<amq:managementContext>
<amq:managementContext createConnector="false" />
</amq:managementContext>
</amq:broker>
<!-- JMS ConnectionFactory to use, configuring the embedded broker using
XML -->
<amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost">
</amq:connectionFactory>
and the result...
Caused by: javax.management.InstanceAlreadyExistsException:
org.apache.activemq:BrokerName=localhost2,Type=Broker already registered.
at
org.jboss.mx.server.registry.BasicMBeanRegistry.add(BasicMBeanRegistry.java:761)
at
org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:225)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at
org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at
org.jboss.mx.server.MBeanServerImpl$3.run(MBeanServerImpl.java:1422)
at java.security.AccessController.doPrivileged(Native Method)
at
org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:1417)
at
org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:376)
at
org.jboss.system.server.jmx.LazyMBeanServer.registerMBean(LazyMBeanServer.java:215)
at
org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:1554)
at
org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:540)
at
org.apache.activemq.broker.BrokerService.start(BrokerService.java:444)
at
org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:50)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1368)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
... 106 more
--
View this message in context: http://www.nabble.com/Configuring-Embedded-Broker-with-Spring-JBoss-JMX-issues-tp19761024p19768140.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.