JMS,始终在JavaEE五花八门的协议里,WebService满天飞的时候占一位置:
1.因为
1. 可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步的扔给JMS 服务端去做,而尽快的把屏幕返还给用户。
且服务端能够多线程排队响应--高并发的请求。
2. 可以在Java世界里达到最高的解耦。
客户端与服务端无需直连,甚至无需知晓对方是谁、在哪里、有多少人,只要对流过的信息作响应就行了。对于牵一发动全身的企业应用很有用。
2. 但是
1. Message Bean步骤比较繁杂,你需要实现MessageDrivenBean, MessageListener接口,还需要设置EJB的配置信息,然后是deploy....
2. Spring 1.x 提供的JMS Template简化了JMS Client端的编程,但对于服务端并没有涉及。
3. 所以,SpringSide的Message Driven POJO方案
Spring JMS Template ActiveMQ Jencks
1. 它是Lightweight的,基本上只是普通POJO,不用搞太多东西。
2. 它是Spring Base的,可以使用Spring的各种特性如IOC、AOP。
3. 它是Effective的,基于Jencks的JCA Container实现 pool connection,control transactions and manage security。
4. 但它是withdout EJB Container的。
其实它还不是100% POJO,除非再用上Lingo,但我已不想走得太远。
4.黄金版配置
如果你想找一个ActiveMQ 3.2 Stable版 Spring的100%可行的配置文件,估计只能到SpringSide项目里看了。网上的文章,不是已过时,就是不切题。
推荐中英两份最接近的文档:
捷特慈朋(IDEA中国): Spring和Message Bean的整合
Spring loaded: Message-Driven POJOs
不过它们都有个outdate的地方--ActiveMQ3.2开始不再自带JCA Cotainer了,而是将其与Gernimo 合作而成了Jencks,需另外安装。
5.SpringSide旅游指南
pom.XML里的JMS部分 --所需的依赖包。
applicationContext-jms.xml --黄金版配置文件。
activemq.xml --AcitveMQ Broker配置文件。
OrdERPlaceMDP.java --Message Driven Pojo。
JmsTest.java --单元测试用例。
OrderManger.java的NodifyOrder()函数 --实际应用的地方。
POJO太简单,唯一麻烦的配置文件已注释,这里也就无话了。