Hi
I'm playing around with ActiveMQ v5.2.0 and would like to investigate
different types of persistence adapter. To this end I've tried to create
my own, but I'm having problems.
1) I've taken the current 5.2.0 source and compiled it under maven. This
works OK.
2) I've added a new package to activemq-core - called
org/apache/activemq/store/chris . I copied all of the files from
org/apache/activemq/store/memory/* into my new package, then refactored
them with appropriate names. I can re-build this with maven and it works
OK. I can see my new classes in the jar file
jar tvf lib/activemq-core-5.2.0.jar | grep -i chris
0 Thu Feb 12 15:15:06 GMT 2009 org/apache/activemq/store/chris/
5645 Thu Feb 12 15:14:54 GMT 2009
org/apache/activemq/store/chris/ChrisMessageStore.class
6938 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisPersistenceAdapter.class
6920 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTopicMessageStore.class
3272 Thu Feb 12 15:14:54 GMT 2009
org/apache/activemq/store/chris/ChrisTopicSub.class
1759 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore$1.class
1789 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore$2.class
1579 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore$3.class
1602 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore$4.class
460 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore$AddMessageCommand.class
472 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore$RemoveMessageCommand.class
3793 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore$Tx.class
6520 Thu Feb 12 15:14:56 GMT 2009
org/apache/activemq/store/chris/ChrisTransactionStore.class
3) If I add the memory persistence adapter to the activemq.xml file and
run the server, the server runs fine. I can see that the memory model is
being run as the server runs ~ 10x faster than the stock server when
handling persistent messages.
4) However if I change the activemq.xml file to use my chris persistence
adapter the server will not run and throws the following exception
bin/activemq
Listening for transport dt_socket at address: 5005
ACTIVEMQ_HOME: /home/user/tmp/activemq-chris
ACTIVEMQ_BASE: /home/user/tmp/activemq-chris
Loading message broker from: xbean:activemq.xml
ERROR: java.lang.RuntimeException: Failed to execute start task. Reason:
org.springframework.beans.factory.BeanDefinitionStoreException:
Unrecognized xbean element mapping: chrisPersistenceAdapter in namespace
http://activemq.apache.org/schema/core
java.lang.RuntimeException: Failed to execute start task. Reason:
org.springframework.beans.factory.BeanDefinitionStoreException:
Unrecognized xbean element mapping: chrisPersistenceAdapter in namespace
http://activemq.apache.org/schema/core
at
org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:98)
at
org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
at
org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:129)
at
org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
at
org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:79)
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:597)
at org.apache.activemq.console.Main.runTaskClass(Main.java:225)
at org.apache.activemq.console.Main.main(Main.java:106)
Caused by:
org.springframework.beans.factory.BeanDefinitionStoreException:
Unrecognized xbean element mapping: chrisPersistenceAdapter in namespace
http://activemq.apache.org/schema/core
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:273)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:155)
at
org.apache.xbean.spring.context.v2.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:49)
at
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1255)
at
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1245)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseChildExtensionBean(XBeanNamespaceHandler.java:763)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseNestedPropertyViaIntrospection(XBeanNamespaceHandler.java:599)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.tryParseNestedPropertyViaIntrospection(XBeanNamespaceHandler.java:566)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.addNestedPropertyElements(XBeanNamespaceHandler.java:535)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:226)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:271)
at
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:155)
[ ... snip ... ]
5) From some digging on the web I've seen the following thread which
seems to describe a similar problem
http://www.mail-archive.com/[email protected]/msg01191.html
However I don't understand what the response is saying (I don't grok
xbean at all :-(. I tried to put in this xml
<build>
<plugins>
<plugin>
<groupId>org.apache.xbean</groupId>
<artifactId>maven-xbean-plugin</artifactId>
<executions>
<execution>
<configuration>
<namespace>http://activemq.org/chris/1.0
<http://activemq.org/bdb/1.0></namespace>
</configuration>
<goals>
<goal>mapping</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
into the pom.xml file (at the top of the activemq source tree), but then
the maven build failed. I also failed to understand how the namespace
declared above had any linkage to my package (which was
org.apache.acticemq.store.chris).
Yours, very confused.
-- Chris