Ok

Thanks, I think I've got it.

I used a bean definition like this

<bean id="myPersistenceAdapter" class="org.apache.activemq.store.chris.ChrisPersistenceAdapter"/>

and passed it to the broker

<broker xmlns="http://activemq.apache.org/schema/core"; brokerName="localhost" dataDirectory="${activemq.base}/data" persistenceAdapter="#myPersistenceAdapter">

   ...

   </broker>

I can see that this is working as I can set breakpoints in my code and see that they are being hit via eclipse. This will work fine for now, I still have a couple of questions tho ...

1) I take it that if I wanted to use a syntax such as the other persistenceAdapters use like this


   <broker ...>

       <persistenceAdapter>
           <chrisPersistenceAdapter />
       </persistenceAdapter>

   </broker>

I will need to use an Xbean rather than a regular spring bean. Are there any docs about how to do this ?


2) Presumably I can pass parameters into my module using the syntax

<bean id="myPersistenceAdapter" class="org.apache.activemq.store.chris.ChrisPersistenceAdapter">
   <property name="somePropertyName" value="someUsefulData"/>
</bean>


Thanks again for your quick reply




-- Chris





Dejan Bosanac wrote:
Hi Chris,

if you don't need XBean, you can define your adapter outside of the <broker>
tag as a regular Spring bean and add it to the broker using the
persitanceAdapter attribute

<broker persistanceAdapter="#chris"> ... </broker>

Cheers
--
Dejan Bosanac

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Fri, Feb 13, 2009 at 4:25 PM, Chris Lidgate <[email protected]>wrote:

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</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








Reply via email to