You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by Lin Sun <li...@gmail.com> on 2010/08/02 21:00:56 UTC
[message driven service] integration with blueprint
Hi
A while back ago, I sent an update about the message-driven service
prototype I have been working on. For the past few weeks, I have
updated the code to provide blueprint message driven services.
Basically, this means -
1. Users can use the message-driven elements to register their message
driven services in blueprint XML definition file. Here is an example
-
<md:message-driven id="myMessageDrivenBean"
class="org.apache.aries.mds.sample.MyMessageDrivenBean"
destroy-method="destory" interface="javax.jms.MessageListener">
<md:activationConfig>
<md:entry key="destination" value="Hello.Queue" />
<md:entry key="destinationType" value="javax.jms.Queue" />
</md:activationConfig>
<md:transaction value="Required" />
<md:argument ref="connectionFactory" />
</md:message-driven>
which is equivalent to:
<bean id="myMessageDrivenBean"
class="org.apache.aries.mds.sample.MyMessageDrivenBean"
destroy-method="destory">
<argument ref="connectionFactory" />
</bean>
<service ref="myMessageDrivenBean" interface="javax.jms.MessageListener">
<service-properties>
<!-- for the activation config properties add
the relevant prefix to the property name -->
<entry key="org.apache.aries.message.driven.destinationType"
value="javax.jms.Queue" />
<entry key="org.apache.aries.message.driven.destination"
value="Hello.Queue" />
<!-- transaction attribute based on the tx:transaction element in
blueprint -->
<entry
key="org.apache.aries.message.driven.transactionAttribute"
value="Required"/>
</service-properties>
</service>
When the message-driven name space handler is invoked to parse the
message-driven element, it will create the bean metadata and service
metadata and register them in the component definition registry.
2. For transaction, I tried to reuse what we defined for declarative
transaction except that I try to keep it very simple. You can only
specify bean level transaction with all methods having the same
transaction inside the message-driven service. Similar as EJB
message-driven beans, only Required and NotSupported transaction
attributes are supported. The blueprint transaction name space
handler is not being used here, instead the message-driven name space
handler is used to parse the transaction element here as we need to
convert it to the org.apache.aries.message.driven.transactionAttribute
service property so that the message-driven service container can
handle the transaction before and after the message is delivered.
Comments are welcome!
Lin