2012年3月15日 星期四

使用網路爬蟲(Crawler)擷取網頁資料:以 niocchi 為例

這個標題寫得很像論文的標題 XD
不過總之目標是要抓網頁內容下來。

Open Source 的 Web Crawler 可以參考 [1]
網路上比較多人使用的好像是 Heritrix,不過我看了一下他的資料還是不太會用 XD
Crawler4j 原本要使用,但後來也不知道怎麼用,所以又繼續 survey 了
最後我選擇的是 niocchi....原因嘛...其實沒什麼特別的原因 XD
主要優點大概是它號稱使用 NIO 來進行 crawling,還有它最後更新時間是 2011 年!XD

niocchi 官方網站可參考 [2]。

2012年3月2日 星期五

安裝 jProfiler6 到遠端的 Linux 主機

jProfiler 簡介就免了~
我的主要目的是想追蹤 JVM 上的 thread 狀況
看那些我開出來的 thread 是不是在任何情況都會正確地被關閉。

公司給的 JProfiler 6.2.4 有包含 Windows 的 GUI 跟 Linux 的 jprofiler_linux_6_2_4.tar.gz
安裝時首先要先把遠端機器上的 tomcat 關掉,接著按照以下的流程:

2012年2月15日 星期三

(暫存) PreparedStatement

PreparedStatement 的基本優點是程式碼好讀(不用自己拼字串)、提供一定程度的 SQL injection 防禦,還有有些資料說 PreparedStatement 效率比較高。

相關資源:
1. 官方文件
2. PreparedStatement & Statement 的差異
3. PreparedStatement 真的比 Statement 快嗎?

效率問題可以參考看看第三個連結,SELECT 狀況下大多是 Statement 比較快一點,不過下面回應有人說 PreparedStatement 主要是快在非 SELECT 的指令。(但話說資料庫最常用的指令應該是 SELECT 吧~XDDD)

範例程式碼可以參考:Using the Prepared Statement Twice

Cron Expression

參考資料:Lesson 6: CronTrigger

雖然說上面的參考資料是 Quartz 的文件,不過查 Wikipedia 時,查到的 Cron Expression 表達方法是一樣的,所以....應該 Linux 上的 cron 跟 Quartz 的 CronTrigger 用的都是同一套標準吧!(也許 Cron Expression 是公定的標準?我不太清楚 XD)

Cron Expression 的規則就看 Wiki 吧,這裡要特別記錄的是使用「/」記號的規則
在分鐘的欄位設定 3/20 表示的是「every 20th minute of the hour, starting at minute three」
也就是從第三分鐘開始,每個第 20 分鐘執行一次
而設定 /35 表示的並不是每隔 35 分鐘執行一次,而是同義於 0-59/35
也就是每個小時的 0 分開始算第 35 分鐘執行一次。
亦即實際執行時會是例如 1:35、2:35、3:35、.....,實際上會變成每小時執行一次。

PS. 這是我目前對 Cron Expression 的理解,如果有錯誤請指正!

2012年2月12日 星期日

2012年2月6日 星期一

Java 複製目錄

Java 內建沒有檔案複製的 API,原本想直接用 Linux 的 cp -r
(因為我們公司的環境是在 Linux 上跑 Java 的 Web Application)
但怎麼試都試不出在 Java 裡面透過 Runtime 來下 cp 可以把某個資料夾內所有檔案複製到指定目錄
好像是因為 Runtime 不能用 * 這種字元,然後改成寫 shell script 從 Java 呼叫也還是有問題
所以只好自己寫一個~
其實說是自己寫一個,因為實在懶得寫 XD,所以直接找了人家寫好的 code 來小改一下!

參考資料:JAVA COPY整個資料夾
整體結構跟上面連結的程式碼一模一樣,只是改了一點點 error handling 跟習慣的變數用法。

2012年1月11日 星期三

Java 定時執行 (2):將 ExecutorService 產生的 Thread 加入 ThreadGroup

前一篇文章提到,我選用 ExecutorService 的主因是比較好控制 Thread
而控制的方法是把要產生的 Thread 都加入到我指定的一個 ThreadGroup
如此一來我只要用 ThreadGroup.activeCount() 就可以知道定時執行產生的 Thread 還有幾個正在執行
也可以用 Thread.enumerate(new Thread[ ]) 把 ThreadGroup 中的 Thread 列舉出來。

參考資料:How to use ThreadFactory in Java

2011年12月16日 星期五

把 Session 寫入資料庫的方法:Session Persistent

目前的需求是要 web application 被重新 deploy 的時候,使用者必須能保留 session
原本在找用 session migration 把 session 遷移出去,deploy 完成後再遷移回來
不過後來找到比較簡單的方式,可以直接即時把 session 寫進資料庫
deploy 完成後 tomcat 會自動把 session 再抓出來。

參考資料:Tomcat 6 Session Persistence through JDBCStore

2011年12月14日 星期三

Session migration

定義(來源:http://www.roseindia.net/interviewquestions/servlet/session-tracking.shtml):
Session Migration is a mechanism of moving the session from one server to another in case of server failure. Session Migration can be implemented by:
a) Persisting the session into database
b) Storing the session in-memory on multiple servers.

關鍵字:Session migration、Session replication、Cluster
相關資源:
1、Cluster:Tomcat 叢集設置
2、用terracotta達成tomcat session
3、How to integrate two web applications having two different context paths

後來發現我需要的不是 Session migration,而是 Session Persistent,所以這篇的資料整理就先停在這了。