[[PageOutline]]
= 2008-10-27 =
== 關於 Portfolio 範例 ==
* 下載 ActiveMQ 5.1.0 Release, 解壓縮,並執行 ActiveMQ Message Broker
{{{
~$ wget http://ftp.twaren.net/Unix/Web/apache/activemq/apache-activemq/5.1.0/apache-activemq-5.1.0-bin.tar.gz
~$ tar zxvf apache-activemq-5.1.0-bin.tar.gz
~$ cd apache-activemq-5.1.0/
~/apache-activemq-5.1.0$ ./bin/activemq
}}}
* 連線到 http://127.0.0.1:8161/demo/
[[Image(ActiveMQ_Sample.png)]]
* 用不同的視窗執行 Portfolio 範例,下圖右上方是"Market data publisher"網頁(Message Provider),左上方是"Portfolio"網頁(Message Receiver),下方是 ActiveMQ Message Broker。我們可以看到 Message Sender/Provider 網頁每兩秒送出一筆新的訊息。而 Message Receiver/Subscriber 則會用顏色標示出目前更新的情形。
[[Image(ActiveMQ_Portfolio.png)]]
* 連線到 http://127.0.0.1:8161/admin/topics.jsp 可以查詢不同的 Topic 各有傳送接收多少個訊息。
[[Image(ActiveMQ_Admin.png)]]
* 這個範例證實了 ActiveMQ 可以用 !JavaScript 實做出加入 Message Broker 後即時更新的可能性,因此值得追蹤其背後的原理。
== 追蹤原始碼(1) - Message Sender / Provider ==
* "Market data publisher"網頁(Message Provider)的網址比較特殊,是 "portfolioPublish?count=1&refresh=2&stocks=IBMW&stocks=BEAS&stocks=MSFT&stocks=SUNW",直接觀看 HTML 原始碼並沒有 !JavaScript 的蹤影,因此它應該是 JSP 網頁。而在 apache-activemq-5.1.0\webapps\demo\WEB-INF\web.xml 中,我們就可以找到答案了~
{{{
PortfolioPublishServlet
org.apache.activemq.web.PortfolioPublishServlet
1
... 略 ...
PortfolioPublishServlet
/portfolioPublish
}}}
* 因此,"Market data publisher"網頁(Message Provider)的原始碼必須看 activemq.jar 裡包的 !PortfolioPublishServlet.class 對應的原始碼。
* 請下載 ActiveMQ 5.1.0 Source Release
{{{
~$ wget http://ftp.twaren.net/Unix/Web/apache/activemq/apache-activemq/5.1.0/apache-activemq-5.1.0-src.tar.gz
~$ tar zxvf apache-activemq-5.1.0-src.tar.gz
~$ cd apache-activemq-5.1.0/src/activemq-web/src/main/java/org/apache/activemq/web/
~$ vi PortfolioPublishServlet.java
}}}
* 路徑: apache-activemq-5.1.0/src/activemq-web/src/main/java/org/apache/activemq/web/PortfolioPublishServlet.java
== 追蹤原始碼(2) - Message Subsciber / Receiver ==
* 觀察"Portfolio"網頁(Message Receiver)的原始碼
{{{
}}}
* 下載所有相關的 !JavaScript 原始碼
{{{
~$ wget http://127.0.0.1:8161/demo/portfolio/portfolio.js
~$ wget http://127.0.0.1:8161/demo/amq/amq.js
}}}
* 從 amq.js 又可以找出其他 !JavaScript 原始碼
{{{
#!java
var _AMQ_INCLUDE = {
Version: 'AMQ JS',
script: function(libraryName) {
document.write('');
},
load: function() {
var scriptTags = document.getElementsByTagName("script");
for(var i=0;i