??
??? 一直希望那些J字頭的協(xié)議能有幾個(gè)提前告老還鄉(xiāng)的,好減輕一下我們的負(fù)擔(dān),特別是這WebService滿天飛的時(shí)代。但似乎還有很久都輪不到JMS的消失:
????1.因?yàn)?br />????1.它是《Effective Enterprise Java》的一個(gè)實(shí)踐。?
??? 可以把不影響用戶執(zhí)行結(jié)果又比較耗時(shí)的任務(wù)(比如發(fā)郵件通知管理員)異步的扔給JMS 服務(wù)端去做,而盡快的把屏幕返還給用戶。
????而且服務(wù)端能夠多線程排隊(duì)響應(yīng)--高并發(fā)的請(qǐng)求。
??? 2. 可以在Java世界里達(dá)到最高的解耦。
???????對(duì)比WebService,JMS的客戶端與服務(wù)端無(wú)需直連,甚至無(wú)需知曉對(duì)方是誰(shuí)、在哪里、有多少人,只要對(duì)流過(guò)的信息作響應(yīng)就行了。對(duì)牽一發(fā)動(dòng)全身的企業(yè)應(yīng)用來(lái)說(shuō)很輕省。
???????
?????2. 但是
???? 1. Message Bean帶著EJB系的榮光,步驟比較繁雜,你需要實(shí)現(xiàn)MessageDrivenBean、MessageListener接口,還需要設(shè)置EJB的配置信息,然后是deploy....
???? 2. Spring 1.x 提供的JMS Template簡(jiǎn)化了JMS Client端的編程,但并沒(méi)有涉及到服務(wù)端的改造。
???? 3.?所以,SpringSide的Message Driven POJO方案
????? Spring JMS Template + ActiveMQ + Jencks
1. 它是Lightweight的,基本上只是普通POJO,不用搞太多東西。
2. 它是Spring Base的,可以使用Spring的各種特性如IOC、AOP。
3. 它是Effective的,基于Jencks的JCA Container實(shí)現(xiàn)?pool connection,control transactions and manage security。
4. 但它是withdout EJB Container的。
其實(shí)它還不是100%?POJO,除非再用上Lingo,但我已不想走得太遠(yuǎn)。
4.黃金版配置
????? 如果你想找一個(gè)ActiveMQ 3.2 Stable版+Spring的100%可行的配置文件,估計(jì)只能到SpringSide項(xiàng)目里看了。網(wǎng)上的文章,不是已過(guò)時(shí),就是不切題。
?????推薦中英兩份最接近的文檔:
???? 捷特慈朋(IDEA中國(guó)): Spring和Message Bean的整合
???? Spring loaded:? Message-Driven POJOs?
?????不過(guò)它們都有個(gè)outdate的地方--ActiveMQ3.2開(kāi)始不再自帶JCA Cotainer了,而是將其與Gernimo 合作而成了Jencks,需另外安裝。
?5.SpringSide旅游指南
????? pom.xml里的JMS部分 --所需的依賴包。
????? applicationContext-jms.xml --黃金版配置文件。
????? activemq.xml? --AcitveMQ Broker配置文件。
????? OrderPlaceMDP.java --Message Driven Pojo。
??????JmsTest.java?--單元測(cè)試用例。
??????OrderManger.java的NodifyOrder()函數(shù) --實(shí)際應(yīng)用的地方。?
POJO太簡(jiǎn)單,唯一麻煩的配置文件已注釋,這里也就無(wú)話了。
學(xué)習(xí)好好學(xué)習(xí)亞