2009-09-22

批次檔設定 classpath

windows 的批次檔以利用 for 來對目錄中的檔案進行處理,但是 for 在取得環境變數只會在一開始取,因此,如果當我們將批次檔寫成:
set CLASSPATH=
for %i in (*) do set LIST=% CLASSPATH%;%i
echo % CLASSPATH%
並不會建立目前目錄中所有檔案的清單,相反的只會將 CLASSPATH 變數設為最後一個找到的檔案。因為 % CLASSPATH% 只有在 FOR 敘述第一次被讀入時才展開,此時 CLASSPATH 變數是空的。所以我們實際執行的 FOR 迴圈是:
for %i in (*) do set LIST= %i
可是當我照著微軟的說明,將 % 改為 ! ,還是得不到正確的結果:
set CLASSPATH =
for %i in (*) do set LIST=! CLASSPATH!;%i
echo % CLASSPATH%
這部份我還沒找到為什麼不行。後來,在網路上找了一下,發現只要呼叫外部的批次檔或是其它 label 就不會有問題了:
set CLASSPATH =
FOR /f %%I IN ('dir /b *.jar') DO call :cpappend %%I
echo %CLASSPATH%
goto end
:cpappend
set CLASSPATH=%CLASSPATH%;%1
:end

2009-08-27

Chrome 簡繁自動轉換 Extension

之前曾經在重灌狂人的 blog 上看到在簡繁轉換的書籤,在 chrome 上用也是可行,不過總覺的還要多按個紐很麻煩,而且沒辦法處理 google reader ,因此就把那書籤裡面的 script 小修改做成了 chrome 的 extension,這樣就方便許多,看網頁會自動轉成繁體字。
安裝方式:
  • 將 chrome 的捷徑加上 --enable-extensions 來啟動 extension 功能
  • 重新啟動 chome
  • 下載 簡繁轉換 extension 並安裝它
之後網頁就會自動轉成繁體了。

2009-08-19

查詢Linux 系統版本

最近常碰到 Linux 的機器,有時候想要查說目前的 Linux 用的是哪個版本,可以用下面的指令: #cat /etc/*-release 在 CentOS 5 會出現類似下面的結果: CentOS release 5 (Final) 在 Red Hat 7.3 會出現類似下面的結果: Red Hat Linux release 7.3 (Valhalla) 如果是要查核心的版本,可以用下面的指令: uname -a

2009-06-25

Java 如何偵測目前記憶體可能不足

今天有個同事說,他在操作 Netbeans 時,Netbeans 竟然提示他記憶體可能不足:
不知道 Netbeans 是怎麼做的。後來上網查了一下, JDK 1.5 後提供了 java.lang.management.MemoryMXBean,可以讓我們偵測目前記憶體的用量及狀態: 上面這程式可以列出目前記憶體的使用狀態。
參考資料:
How do you detect low memory situations within the java virtual machine?
J2SE5.0新特性之監控與管理

Vista + IIS + Access 出現 80004005 錯誤

最近有個同事遇到一個問題,開發好的程式在 Vista 上的 IIS 會沒辦法讀取 access 裡面的資料,後來上網查了一下,發現這個問題還滿常發生的,要解決也很簡單,在命令模式下執行下面三行指令即可:
  • %windir%\system32\inetsrv\appcmd set config /section:applicationPools /[name='DefaultAppPool'].processModel.loadUserProfile:false
  • icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant Users:(CI)(S,WD,AD,X)
  • icacls %windir%\serviceprofiles\networkservice\AppData\Local\Temp /grant "CREATOR OWNER":(OI)(CI)(IO
看起來因為 %windir%\serviceprofiles\networkservice\AppData\Local\Temp 這目錄的權限不足所造成的問題。
參考資料:

2009-06-08

運用 Windows Time 讓 Windows 進行時間同步

一般我們要進行時間的同步,可以使用 NTPClock 來進行同步。今天發現原來 Windows 有指令可以直接進行電腦時間的同步:
:: 設定要同步的 NTP Server
w32tm /config /update /manualpeerlist:ntp.ntu.edu.tw
:: 開始進行同步
w32tm /resync
如此一來,就不用再去特別下載 NTPClock 了。
註:
Windows Time 這個服務要開啟才能用
參考來源:

2009-06-06

如何查詢 Oracle 的版本

下面兩個語法都可以達到此需求:
  • select * from v$version
  • select * from product_component_version

2009-06-05

Chrome Extension

最近因為用 Firefox 常會有卡住的現像,因此改用 Google Chrome 來當我預設的瀏灠器。Chrome 實際用起來還滿不錯的,不過就是沒有像 firefox 那麼多 extension 可以使用。上網找了一下,目前比較急迫的三個需求都有辦法解決了:
  1. AdSweep:擋廣告,這是 chrome extension,需要在 chrome 的捷徑後加上 --enable-extensions 才可使用
  2. plurk 表情:user script,需要在 chrome 的捷徑後加上 --enable-user-scripts 才可使用
  3. 簡繁轉換繁簡轉換:加到書簽或拉到書簽工具列即可。
  4. GDI++:在 chrome 的捷徑後加上 --no-sandbox 即可讓 GDI++ rander Chrome 了。

2009-05-31

如何以 command 來更改螢幕解析度

因為我的 eeepc 1000h 外接 22 吋螢幕輸出時,不會自動將解析度換成 1680*1050,每次都要到【顯示 內容】來修改,很麻煩,因此想說寫個批次檔,直接點兩下就將解析度更換。上網找了一下,發現有 Display Changer 這個好東西,可以直接用用命令來改解析度,如此一來,我只要建立好下面這指令的捷徑,就可以在開機後直接點兩下修改解析度了,不需要那麼多步驟處理: dc.exe -width=1680 -height=1050

2009-05-13

執行 ant 發生 out of memory

當我們執行 ant 時,有時候會發生 Out Of Memory,此時只需要在環境變數上加上一個變數即可,ant 執行的 jvm 會去使用這個參數: set ANT_OPTS=-Xmx1024m

2009-05-04

如何取得 class 的實體位置

通常,我們的開發環境與部署環境多多少少會有些不同,而我們開發測試完成後,進行部署時,有時候會有一些 method 找不到的問題,這個時候我們可能就需要找到某個 class 到底是不是我們部署的檔案,底下這個 class 是我從網路上找來的,用它就可以快速找到 class 的實體路徑了。

2009-04-30

Eclipse 中 將Java Project 轉換為Dynamic Web Project

因為工作的關係,常常要將一些舊的 WSAD 專案轉新 Dynamic Web Project,之前都是產生一個 Dynamic Web Project,然後把投定檔 copy 過來,今天剛好看到設定方式,記錄一下:
  1. 修改專案的 .project 文件,在 之間添加下列三行配置
  2. 專案重新整理。
  3. 打開【project properties】,會看到新增了很多選擇項,點中【Project Facets】,按下圖設定:
  4. 完成後,就變成一個【動態 Web 專案】了。
參考: http://www.blogjava.net/vcok/archive/2009/04/28/267815.html

2009-04-14

Notepad++ Regular Expression 的使用

今天有個前同事問我,要怎麼在 excel 中讓住址排序可以按照 1號 2號 3號 ..100 號排下來,因為我對 excel 不熟,所以只想到幫所有的號補 0 來處理。那要讓號補 0 ,最方便的方式便是用 Regular Expression 來取出並代之 。剛好小弟之前沒用過 Notepad++ 的 Regular Expression 取代功能,今天就來玩玩看。

在 Notepad++ 中,他的搜尋模式有三種:一般(Normal)、增強模式(Extended)、用類型表式(Regular Expression),我們使用的是第三種【用類型表式(Regular Expression)】。

下圖是將個位數前面補 0 ,尋找目標:路(\d)號,取代成:路0\1號,並勾選【用類型表式(Regular Expression)】,按下取代後,一位數的數值前面就補 0 了。

p1

接下來再尋找目標:路(\d\d)號,取代成:路0\1號,並勾選【用類型表式(Regular Expression)】,按下取代後,所有的數值就會變為三位數了。

在 Notepad 中,要取 () 內容的方式是前面加上 \,上面的【\1】表示我們要取第一個() 的內容。

參考:

http://ozansafi.wordpress.com/2008/12/11/notepad-regular-expression-usage/

http://www.slideshare.net/anjesh/the-power-of-regular-expression-use-in-notepad

2009-04-11

數字拆解問題

最近在找工作,有家公司寄了一個題目給我,要我作答,題目不難,有興趣可以看看: #數字拆解 題目是這樣的: 3 = 2+1 = 1+1+1 所以3有三種拆法 4 = 3 + 1 = 2 + 2 = 2 + 1 + 1 = 1 + 1 + 1 + 1 共五種 5 = 4 + 1 = 3 + 2 = 3 + 1 + 1 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 +1 +1 +1 共七種 依此類推,請問一個指定數字NUM的拆解方法個數有多少個? #建議方案(也可使用其他方法) 6 = 5 + [1] = 4 + [1+1] = 3 + [1+1+1] = 2 + [1+1+1+1] = 1 + [1+1+1+1] = 2 + [2+1+1] = 3 + [2+1] 4 + [2] = 2 + [2+2] 3 + [3] *括弧內數字為固定數字,最大數字繼續拆解 *拆解過程中,數字須由大到小 #請計算出Num=40共多少解法,需花多少時間(須印出所有合法解法) num = 40, count = 37337, time = 1.188 想不到他的最後答案竟然是錯的,還真是有一點點心機。過兩天再把答案 po 上來。

Eclipse 中文化

因為 Eclipse 3.3 之後已經將多國語言介面改為另外一個專案了,其安裝方式跟裝 plugin 一樣,說明,這篇文章只是註記一下它是哪個專案,以備不時之需。 多國語言介面專案:http://www.eclipse.org/babel/

2009-04-09

運用 command 來批次改檔名

從網路上抓某些漫畫圖片回來,其裡面的命名會是 1.jpg, 2.jpg, 10.jpg, 11.jpg, 100.jpg... 等,使用看 Imagine 看時,看的順序會是 1, 10, 11, 12 ... 等,而不是真正想看到順序。最近剛好看到使用 awk sprintf 修改 檔案名稱,突然想到用在 Windows 環境下應該也是有處理的方式,找了一下 command 的寫法,可以用下面兩行指令來解決:
for /F %G in ('dir /b ?.jpg') do ren %G 00%G
for /F %G in ('dir /b ??.jpg') do ren %G 0%G
第一行是針對一位數的 jpg 檔前面補兩個 0。 第二行是針對二位數的 jpg 檔前面補一個 0。

如何讓設定 FlowLayout 的 JPanel 有 ScrollBar

因為 JDK 的 bug ,設定 FlowLayout 的 JPanel 沒辦法在 JScrollPane 裡面正確呈現出 ScrollBar,因此要自己實作 Scrollable 來達到這個效果。 測試 這問是困擾了我兩天, sun 竟然這麼久都不修復,唉。

2009-03-24

如何設定 Eclipse 中變數的 highlight

啟用: 按下工具列的 "Toggle Mark Occurrences" 就有 highlight 變數的功能 更改 highlight 時的背景色 Window -> Preferences -> General -> Editors -> Text Editors -> Annotations -> Occurrences

2009-03-20

IE8 正式版的 bug?

base 元素可規定頁面中所有鏈接的基準 URL。 通常情況下,瀏覽器會從當前文檔的 URL 中提取相應的元素來填寫相對 URL 中的空白。 使用 base 標籤可以改變這一點。瀏覽器隨後將不再使用當前文檔的 URL,而使用指定的基本 URL 來解析所有的相對 URL。這其中包括 a、img、link、form 標籤中的 URL。 但是在 IE8 裡面有個 bug,就算設定了 base標籤,它還是會使用當前的 URL 提取相應的元素,然後再用 base 設定的 url 去提取元素。如此一來,造成 server 不必要的負擔,不知道有沒有人有解決方式?還是這其實是我對標準的誤解? 假設我有下面這個 index.html 放在 ui 的目錄: 當利用 IE8 去開 index.html 時,其會對 server 做以下的 request:
http://scott0228.blogspot.com/ui/index.html
http://scott0228.blogspot.com/main.css
http://scott0228.blogspot.com/main2.css
http://scott0228.blogspot.com/mootools.js
http://scott0228.blogspot.com/ui/mootools2.js
http://scott0228.blogspot.com/ui/mootools3.js
http://scott0228.blogspot.com/ui/main3.css
http://scott0228.blogspot.com/mootools2.js
http://scott0228.blogspot.com/mootools3.js
http://scott0228.blogspot.com/main3.css
IE8 對於 base 的正確處理只會到第一個 script 之前,之後的 script 及 link 都會取兩次,一次是 base 的,一次是當前的 url 目前 IE8 對於第一個 script 的 src 只取以 base 為基楚的檔案,第二個以後,及其之後的 link 都會取兩次,這樣會造成 server 的 loading 及程式的錯誤,不知道有法有辦法解決?

2009-03-15

Java Transaction Strategies

Transaction Management 對於企業交易是相當重要的,今天剛好看到 IBM DeveloperWorks 上有一些文章,說明的滿不錯的,介紹給大家知道: http://www.ibm.com/developerworks/cn/java/j-ts1.html?ca=drs-tp4608 裡面有參考了 Java Transaction Design Strategies ,個人覺的是本相當不錯的書,非常值得研究瞭解。

2009-03-11

Partition Table Fix

今天有個同事拿了顆 sata 的硬碟給我,說因為裝了 ghost 9 後造成無法開機,本來想說用 Partition Manage 來改一下開機磁區就好,結果回應該該硬碟的磁區錯誤,可是在 xp 中還是看的到磁區,真是見鬼了。後來用 Partition Table Doctor 去看,才發現原來裡面的磁區已經有問題,Ghost 產生的磁區蓋到既有的開機磁區,造磁碟分割軟體沒辦法使用。而 Partition Table Doctor 需要付費才有辦法修復,後來上網找到一個小軟體:TestDisk,可以用來針對分割磁區檢查、救援,不論是因為手賤誤刪了磁碟分區,或是因為安裝作業系統、感染病毒而不慎毀損或遺失硬碟分區表,他都有辦法幫你救回來。 TestDisk 可以在多種作業系統下執行,也支援多種檔案系統,有需要人可以下載試試嚕。 使用方法:
  1. 將下載回來的 TestDisk 解壓縮,找到並執行置於「win」中的「testdisk_win.exe」。
  2. 在它的歡迎訊息之下的,選擇您要如何處理 Log 檔案。
  3. 選定硬碟後,選擇「Proceed」後按「Enter」。
  4. 選擇該硬碟的檔案系統類型,一般的Windows系統請選擇第一個[ Intel ],然後按「Enter」即可。
  5. 按下「Analyse」開始分析現有分區結構和搜尋遺失的分區。另外還有「Advanced」選項可以將分區設定成開機磁區或改變分割區類型、「Geometry」選項可以修改分區結構參數及大小、「MBR Code」選項可以將主要開機磁區代碼寫入第一分割區。
  6. TestDisk就會幫你找出所有磁碟分區,確定無誤後,以選擇「Save」後,按下「Enter」,最後再按「Quit」離開程式
  7. 重新開機後就可看到原本消失的磁碟分區了。
PS. 進行『磁碟救援』並無法保證絕對能完整救回您硬碟裡的資料,相反的,進行『磁碟救援』很有可能會反而使得您硬碟裡的資料一去不復返。您應該將『磁碟救援』視為最後的救援手段。非必要請勿輕易嘗試! 參考: TestDisk Step By Step官網的教學,圖、(英)文並茂。 Data Recovery Examples官網還舉了一些範例。

2009-03-10

Continuous Integration

Continuous Integration 是我們在開發時的一個好方法,Fontys 大學 的 Georg Fleischer 寫了一篇有關持續整合的報告。報告裡討論了用戶的需求和不同的產品如何滿足這些需求,並對於用戶和工具開發提供了不錯的參考資料。它裡面包涵了 12 種產品,算是相當有參考價值的一份報告。

2009-03-06

如何刪除不合法檔名的檔案

之前曾經下載 portable 版的 open office ,結果解壓縮後有個檔案刪不掉,今天發現,原來只要利用 command 模式,用短檔名來刪除即可;那要怎麼做呢,方法如下:
  1. 使用 cmd 進入命令列模式
  2. 用 dir /x 察看檔案的 8.3 短檔名
  3. 直接 del 那個短檔名即可。
參考: http://blog.miniasp.com/post/2008/01/How-to-delete-file-with-invalid-filename.aspx

2009-02-25

Windows 下的 su

最近因為用到 PostgreSQL ,而 PostgresSQL 有個限制,不能以【擁有系統管理者權限的使用者】來執行,因此在 Linux 下,就需要以 su 來改變身份去執行,那 windows 下要怎麼辦呢?小弟找到了兩個方法:
  1. sysinternals 裡的 psexec
  2. Windows 內建的 runas
小弟先在系統中建立了一個 postgres 的帳號,然後利用上述兩個軟體來執行。 使用 psexec 的方法如下: psexec -u postgres -p postgres D:\pgsql\bin\postgres -D D:\pgsql\data 使用 runas 的方法如下: %windir%\System32\runas.exe /user:ComputerName\postgres "D:\pgsql\bin\pg_ctl start -D D:\pgsql\data" 使用 psexec 的好處是,可以直接將密碼放在參數上,這樣不用每次都去 keyin 密碼。而使用 runas 的話,每次都要輸入密碼,另外也可以加上 /savecred 參數來存儲存密碼(XP Home 是不能用的)。

2009-02-24

sockstat

之前曾經介紹過如何查看 port 被占住的方式,只是在 Linux 下要下的指令比較長,今天剛好到有人介紹:sockstat,原本是在 freebsd 下用來查看的工具,現在有人將他改寫成 Linux 版,因此 Linux 下也可以使用這好用的工具了。
$ sockstat
USER     PROCESS              PID      PROTO  SOURCE ADDRESS            FOREIGN ADDRESS           STATE
chihchun conduit.real         7902     tcp4   *:3400                    *: *                      LISTEN
chihchun dropboxd             7989     tcp4   10.11.12.231:49912        75.126.170.58:443         CLOSE_WAIT
chihchun pidgin               8651     tcp4   10.11.12.231:46378        66.163.181.178:5050       ESTABLISHED
chihchun ssh                  22871    tcp4   127.0.0.1:6667            *: *                      LISTEN
chihchun ssh                  22871    tcp4   127.0.0.1:6667            127.0.0.1:54522           ESTABLISHED
chihchun ssh                  28346    tcp4   127.0.0.1:1100            *: *                      LISTEN
chihchun ssh                  28346    tcp4   127.0.0.1:2500            *: *                      LISTEN

2009-02-22

好用工具:Junction ( Windows 版的 symbolic link )

Linux 上有個 ln 指令可任意建立 link ( 包括 hard links 與 symbolic links ),這是個很好用的東西,在 Vista 上也有個 mklink 可以用來做相同的事,不過在 Windows XP 之前的環境卻沒有內建相對應的程式,而 Junction 就是一個可以替代的工具。 其使用說明如下:
Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals - http://www.sysinternals.com

The first usage is for displaying reparse point information, and the
second usage is for creating or deleting a NTFS junction point:

usage: junction [-s] [-q] 
    -q     Don't print error messages (quiet)

    -s     Recurse subdirectories

usage: junction [-d]  []
    -d     Delete the specified junction
    example: junction d:\link c:\winnt
新增: junction c:\Profiles\User1\MyDocs "d:\tmp\My Documents" 刪除: junction -d c:\Profiles\User1\MyDocs 如果不是透田 junction 去刪除 link,而是直接用檔案總管去刪除 link,會造成原來的資料被一併刪除,請特別注意。 另外, 有個 NTFS Link ext 可以讓我們使用 GUI 的方式進行 link。 參考: http://amanda_hoic.mysinablog.com/index.php?op=ViewArticle&articleId=1276558

2009-02-21

License Management for java

前陣子公司有打算將產品加上 License 的管控,當初的想法是取得 Mac Address 來加密比對,但沒有實際進行實作,今天剛好看到市面上已經有此相關的產品可以直接拿來套用了,因此先把它記下來: truelicense 是 opensource 的,剛好可以拿來研究嚕。當然,這兩套程式都有提醒說,在使用的時候,記得使用 obfuscation 來為程式碼加密,否則有心人事還是可以很簡單的破解它。

2009-02-07

JNI

目前 java 與 dll 溝通的技術主要有以下幾種:

目前看起來好像是 JNative 比較方便。

參考文章: JNI技術實踐小結

2009-02-03

SSH Tunnel

之前在客戶那,沒辦法使用 msn ,後來發現可以利用 ssh tunnel 來 proxy 連線。在 windows 平台下,我們可以使用 putty 或是 plink 來建立 ssh tunnel,因為這兩個都不支持密碼的在檔,所以我通常是使用 MyEnTunnel ,它是利用 plink 來進行連線,可以存下連線資料,方便我們進行連線。 那我們如何利用 MyEnTunnel 建立一個 socket proxy 呢?其使用部驟如下:
  1. 首先我們下載 MyEnTunnel 及 plink ,然後解壓縮放在一起:
  2. 執行 myentunnel.exe,設定連線資訊,記得勾選【Enable Dynamic SOCKS】:
  3. 點選 Connect,切換到 Status 頁即可看到是否連線成功
當線線成功後,我們就可以讓 firefox 或是 msn 利用此通道進行網頁的連線: Firefox:
  • 選擇【工具】=>【選項】
  • 點選【進階】=>【網路】=>【設定】 選擇【手動設定 Proxy】將最下面的【SOCKS 主機】設定到本機端的 7070 port(對應 MyEntunnel 上所設定的 port),然後我們就可以利用 firefox 連線到 http://myip.easylife.idv.tw/ 來驗證是否是透過 ssh server 連線了。
MSN:
  1. 【選項】=>【連線】=>【進階設定】
  2. 設定 SOCKS 為本機端及 Port 為 7070 按下測試:
  3. 如果 SOCKS 可連線,便可看到以下的訊息
參考: PuTTY自帶的plink.exe實現ssh繞牆技術 PuTTY - SSH Tunnel 運用備忘

2009-02-02

背景執行 Unit Test

Background Unit Testing: New Evolutions in Unit Testing and IDE Integration 裡面介紹了兩個 eclipse 的 plugin 來讓我們即時的執行 Unit Test ,這樣的好處就是我們一改動程式,就可以立即知道是否有造成 unit test 錯誤,感覺相當不錯,可以看看嚕。裡面介紹的兩個工具如下: 第二個還有 idea 的 plugin ,而且是 open source 的,改天有空而且電腦有升級後再來玩玩看。XD

2009-01-11

查看 port 被哪個程式占住了

一直以來,我都懶的去記 windows 的指令,而是使用 CurrPorts 這方便的工具來查,今天剛好在網路上看到記令,就把它記下來嚕,雖然比較麻煩,但是在沒有工具的情況下還是不錯用的:

netstat –ano a:表示列出所有連線中或 listening的連線。 n:表示使用數字形態列出,即 http 會以 80 顯示,ftp 會以 21 顯示。 o:則為列出該程式的 PID。

Noname

知道 PID 之後,接著就可以使用【工作管理員或是【tasklist】查看該 PID 是由哪一支程式所執行。

在 Linux 底下則是要用下面的指令:

netstat -tulnp

t:顯示 TCP u:顯示 UDP l:只顯示 listening 的 processes n:不要解析 IP address names 或 port numbers p:顯示 listening ports 的 process 名稱

也可以使用:

lsof -i

2009-01-09

Improve your jQuery - 25 excellent tips

最近開發網頁,都儘量使用 jQuery 來減少程式碼的撰寫,今天剛好看到網路上這篇文章,值得推薦:Improve your jQuery - 25 excellent tips,裡面有一些小技巧讓你的程式跑的更快。

依條件決定呼叫的函數

jQuery 提供了很多好用的涵數讓我們可以少寫很多 Javascript 程式碼,像 show() 及 hide() 用來顯示或隱藏元素,及 toggle() 可以在顯示與隱藏間來回切換,但當我們要依條件決定顯示或隱藏元素時,寫法還是有點囉嗦:

今天看到有人建議:suggestion to reduce show/hide code,不知道 jQuery 會不會加,不過裡面給我發現了 Javascript 的一個奇特的程式寫法,也可以少掉一些 code :

只能說,javascript 真是個神奇的語言。

2009-01-07

Tomcat Resource 使用的 lib 擺放位置

在網路上看到在 Tomcat 中設置 Datasource,都需要將 jdbc driver 放到 Tomcat 的 lib 目錄下,之前在研究使用 JTA 時,才發現原來並不一定要將 jdbc driver 放在 Tomcat 的 lib 目錄下。之前說過 Tomcat 載入 class 的順序,當我們在 context.xml 中宣告了 Resource ,如果該 Resource 的 factory 是使用到 Tomcat lib 下的 class ,此時 classloader 就只會找 Tomcat lib 目錄下的 class 來載入。

上面的寫法,使用的是 Tomcat 預設的 Factory 來啟始 Resource,如果 jdbc driver 沒有放在 Tomcat 的 Lib 下,就會無法使用。

此寫法,當我使用 factory 是 com.atomikos.tomcat.BeanFactory,我是將其 jar 檔都打包在我的 war 檔裡,因此 Tomcat 在載入此 Resource 時,會使用的是 WEB APP 的 classloader ,因此 jdbc driver 也只要放在 web app 下即可被載入。

如何利用 Java 5 Concurrency 來加速程式

好文共享:Accelerating Applications with Java 5 Concurrency

如何動態取得 Windows 系統特殊資料夾

怎麼利用 Java 去取得 windows 系統上的特殊資料夾呢? 在 dot net 平台上,微軟有準備好Environment.SpecialFolder 列舉型別 來給開發者用,而 java 平台上,目前有看到 winfoldersjava 可以使用,目前似乎不支援中文,用法如下:

import java.io.File;

import com.catnapgames.winfolders.WinFoldersJava;


public class Test {
 public static void main(String[] args) {
  System.load(new File("").getAbsolutePath() + "\\WinFoldersJava-1.0.dll");
  System.out.println("CSIDL_PERSONAL\t\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_PERSONAL));
  System.out.println("CSIDL_LOCAL_APPDATA\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_PERSONAL));
  System.out.println("CSIDL_MYPICTURES\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_MYPICTURES));
  System.out.println("CSIDL_COMMON_APPDATA\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_COMMON_APPDATA));
  System.out.println("CSIDL_COMMON_DOCUMENTS\t" + WinFoldersJava.getSpecialFolderPath(WinFoldersJava.CSIDL_COMMON_DOCUMENTS));
  
 }
}

這程式目前對中文似乎不支援。如果只是要取得【我的文件夾】目錄的話,可以直接使用 Swing 的功能取得,中文沒問題:

javax.swing.filechooser.FileSystemView.getFileSystemView().getDefaultDirectory()