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