同时我们需要使用SpringFramework框架,当前版本为1.2.5。准备好所有的开发包,我们要在IntelliJ IDEA创建一个新的项目,包含一个普通的模块即可,然后设定一下classpath即可,关于项目的详细信息,请下载附件中IntelliJ IDEA项目文件。
MDP的机制很简单,就是完成对指定的Message Queue或Topic的监听,所以我们需要在Spring的配置文件进行设定:
1 设定ConnectionFactory,这里我们采用嵌入式方式运行ActiveMQ:
<bean id="connectionFactory" class="org.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="vm://localhost"/>
<property name="useEmbeddedBroker" value="true"/>
</bean>
2 设定MDP,我们只需创建一个普通的JavaBean,然后实现MessageListener,最后在Spring配置文件中进行设定。
<bean id="HelloMDP" class="net.jetmaven.HelloMDP"/>
3 将MDP和Queue或Topic关联起来,以下是针对ActiveMQ的设定。其中HelloMDP是对MDP名称的引用。
<bean id="activeMQContainer" class="org.activemq.jca.JCAContainer">
<property name="workManager">
<bean id="workManager" class="org.activemq.work.SpringWorkManager"/>
</property>
<property name="resourceAdapter">
<bean id="activeMQResourceAdapter" class="org.activemq.ra.ActiveMQResourceAdapter">
<property name="serverUrl" value="vm://localhost"/>
</bean>
</property>
</bean>
<bean id="HelloQueueConsumer" factory-method="addConnector" factory-bean="activeMQContainer">
<property name="activationSpec">
<bean class="org.activemq.ra.ActiveMQActivationSpec">
<property name="destination" value="Hello.Queue"/>
<property name="destinationType" value="javax.jms.Queue"/>
</bean>
</property>
<property name="ref" value="HelloMDP"/>
</bean>
4 设定JmsTemplate,方便JMS客户段操作。
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="defaultDestinationName" value="Hello.Queue"/>
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
接下来我们需要创建一个Spring的JUnit测试用例,测试我们设定的功能,这里我们只需设定Spring配置文件位置,然后在测试方法中引用JmsTemplate,发送Message进行测试。
public class SpringTest extends AbstractDependencyInjectionSpringContextTests
{
protected String[] getConfigLocations()
{
return new String[]{"classpath*:applicationContext.xml"};
}
public void testSendMessage() throws Exception
{
JmsTemplate jmsTemplate = (JmsTemplate) applicationContext.getBean("jmsTemplate");
jmsTemplate.send(new MessageCreator()
{
public Message createMessage(Session session) throws JMSException
{
MapMessage message=session.createMapMessage(); message.setString("name","Jacky");
return message;
}
});
}
}
当你运行这个测试时,你会发现测试的结果。 总结:通过以上的设定,我们就可以完成Spring下的Message Driven Bean的设定,同EJB的MDB相比,MDP更加简单。在上例中,我们以JVM方式启动ActiveMQ,这对于单个应用(如web应用)是非常实用的,通过这种方式可以异步发送消息,这对应用中异步发送email,特定任务等,这种方式非常简单,原来比较复杂的问题现在可以很快解决啦。
spring_mdb.zip下载。 |