2008-10-26

如何在 Tomcat 中運用 JNDI 的方式取得 C3P0 的 connection pool

Tomcat 本來內建的 connection pool 是 dbcp,但據說有一堆 bug 沒解,因此想說要把 DBCP 換成 c3p0 以避免這些問題。剛好在網路上看到這個解法,就將它記下來嚕。

首先當然是要先把 c3p0 的 jar 檔及 jdbc driver 放到 tomcat 的 lib 目錄下。

Tomcat 5.0

在 Tomcat 的目錄下 conf/server.xml ,找到 <Context> 修改其內容:

<Resource name="jdbc/pooledDS" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource" /> <ResourceParams name="jdbc/pooledDS">
   <parameter>
      <name>factory</name>
      <value>org.apache.naming.factory.BeanFactory</value>
   </parameter>
   <parameter>
      <name>driverClass</name>
      <value>org.postgresql.Driver</value> 
   </parameter>
   <parameter>
      <name>jdbcUrl</name>
      <value>jdbc:postgresql://localhost/c3p0-test</value> 
   </parameter>
   <parameter>
       <name>user</name>
       <value>swaldman</value>
    </parameter>
    <parameter>
       <name>password</name>
       <value>test</value>
    </parameter>
    <parameter>
       <name>minPoolSize</name>
       <value>5</value>
    </parameter>
    <parameter>
       <name>maxPoolSize</name>
       <value>15</value>
    </parameter>
    <parameter>
       <name>acquireIncrement</name>
       <value>5</value>
    </parameter>
</ResourceParams>

Tomcat 5.5/6.0

在 Tomcat 的目錄下 conf/server.xml ,找到 <GlobalNamingResources> 加上其內容:

<Resource auth="Container"
        description="DB Connection"
        driverClass="com.mysql.jdbc.Driver"
        maxPoolSize="4"
        minPoolSize="2"
        acquireIncrement="1"
        name="jdbc/TestDB"
        user="test"
        password="ready2go"
        factory="org.apache.naming.factory.BeanFactory"
        type="com.mchange.v2.c3p0.ComboPooledDataSource"
        jdbcUrl="jdbc:mysql://localhost:3306/test?autoReconnect=true" />

Web.xml

標準 J2EE 的程式中,需要在 web.xml 中做以下設定:

<resource-ref>
   <res-ref-name>jdbc/pooledDS</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

如何利用程式取得 DataSource

InitialContext ic = new InitialContext(); DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/pooledDS");

原文參考:http://www.mchange.com/projects/c3p0/index.html#tomcat-specific

2008-10-19

隨身碟病毒

最近很多朋友都中 Kavo 系列的病毒,上網找了一下,有人寫好了刪毒程式,在此記錄一下。 http://reinfors.googlepages.com/main.html 其功能說明:

EFix有下列功能:

  1. 修復因病毒造成隱藏檔選項無法開啟和磁碟雙擊顯示找不到程式的錯誤
  2. 修正工作管理員無法開啟的問題 (因登錄檔關閉造成的話) (4.68版後才有,前面沒有)
  3. 關閉自動撥放功能 (此功能在Ver4.56後取消)
  4. 簡易的病毒檔案刪除 (像KAVO KXVO JVVO TASO AMVO AVPO那一類的,還有部分病毒下載器,如auto.exe等等)
  5. 會產生掃瞄報告供解毒人員分析
  6. 可利用文字腳本方式刪除檔案及登錄值,使用方式請看此篇

EFix Lite有下列功能:

  1. 修復因病毒造成隱藏檔選項無法開啟和磁碟雙擊顯示找不到程式的錯誤
  2. 目前已知的KAVO系列病毒清除

磁碟無法開啟的意思是如下圖顯示:

2008-09-12

Tomcat 的 Datasource 問題

最近在 Tomcat 上開發,使用 Tomcat 所提供的 Datasource 來接資料庫,可是發現測試時,在針對 CLOB 轉型時 oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(1); 一直出現 java.lang.ClassCastException: oracle.sql.CLOB 的錯誤,而用 Debug Mode 去觀察時,發現取回來的 Clob Object 確實是 oracle.sql.CLOB 的 instance,原本以為是用的 JVM 太新的關係,結果換了 JVM 也發生一樣的錯,後來才發現,原來是 tomcat ClassLoader 的問題。 一般 ClassLoader 的工作流程是:
  1. 收到一個載入類的的請求
  2. 請求其父ClassLoader來完成該類的載入
  3. 如果父ClassLoader無法載入,則自己試圖完成該類的載入
而 WEB APP 的 ClassLoader 實現與眾不同: 它先試圖從 WEB APP 自己的目錄裡載入,如果失敗則請求父 ClassLoader 的代理。 而我為了使用 Datasource 來連接資料庫,因此在 Tomcat 的 lib 放裡放了 Jdbc driver ,Datasource 取資資料庫連線使用的 driver 是這個。但在 ap 的 web-inf/lib 下,我也放了 Jdbc driver ,這使得我在轉型時,ClassLoader 會取用這個 Driver 來轉型,雖然兩個本版一模一樣,但始終還是透過不同的 ClassLoader 載入的,因此沒辦法互轉,造成程式出錯。 所以,在 Tomcat 上使用 Datasource 時,記得 ap 下不要再放重覆的 Driver 了,以避免造成同樣的錯誤。 可參考: http://www.memezilla.com/2007/01/05/remove-oracle-clob-classcastexception http://www.blogjava.net/realsmy/archive/2007/05/04/115272.html

2008-09-01

利用 VPC 測試 Internet explorer

上一篇有寫到要測試不同版本的 IE ,有兩種方法,今天又發現微軟提供第三種方法,就是利用他所併購的 VPC 軟體來測試: 1. 首先我們要到下面網址先下載免費的 Virtual PC 來安裝 http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx 2. 到Internet Explorer Application Compatibility VPC Image下載內含IE6、IE7、IE8等不同版本的 Windows XP 或 Windows Vista 映像檔,目前有下列幾個版本
  1. IE6-XPSP3_VPC.exe(421.7 MB):內含Windows XP SP3及IE6 VHD映像檔。
  2. IE7-VIS1.exe、IE7-VIS2.rar、IE7-VIS3.rar(3個檔案合計約1990.5 MB): 內含Vista及IE7 VHD映像檔(下載這3個檔案並放在相同目錄,再執行IE7-VIS1.exe即可解壓縮)。
  3. IE7-XPSP2_VPC.exe(456.8 MB):內含Windows XP SP2及IE7 VHD映像檔。
  4. IE8B2-XPSP3_VPC.exe(464.6 MB):內含Windows XP SP3及IE8 Beta 2 VHD映像檔。

2008-08-30

多版本 IE

身為一個 Web application 的開發者,常常需要測試不同版本的 Brower 來了解本身開發的程式是否相容,尤其是 IE 在不同版本有不同的問題,一定要針對每個版本進行測試。但微軟只允許我們系統中只有一個版本的 IE ,那要怎麼解決呢?有以下兩種選擇:
  1. IE Tester
  2. Internet Explorer Collection
利用上述個程式,我們便可針有不同版本的 IE 進行測試了。 參考連結: http://www.ghacks.net/2008/08/30/use-multiple-internet-explorer-versions-simultaneously/

2008-08-22

破解 windows 2000 的帳號密碼

最近因為一些 Windows 2000 Server 的密碼被別的同事改掉,造成沒辦法進去系統進行維護,剛好在網路上看到 2008 Best of Open Source Software Awards ,裡面有 Ophcrack 這個軟體可以找出目前系統的帳號及密碼,剛好可以解決我這個問題嚕,有需要的可以去下載試試,只要燒他的開機光碟然後拿到那台電腦開機就好了。 參考連結: http://www.goodman-lai.idv.tw/2008/08/infoworld-2008.html

2008-08-18

如何啟動 ACPI 來讓電腦自動關閉電源

最近在公司為了節能減炭,計畫將一些測試用的 Server 定時開關機來減少電力的損耗,而那些電腦裡,有幾台是 Windows 2000 server ,主機版也有支援 ACPI,不知道為什麼關機就是會出現【您可以安心關機了】的字眼而不會直接關機,這樣的 Server 造成需要有人去實際關機而不能排程關機(人是懶墮的,可以由電腦自己開關機就不要排值日生去關啊)。因此小弟就研究了一下,原來是 ACPI 的功能沒有被開啟,造成電腦不會自動關電源,只要照著以下步驟將 ACPI 的 Driver 改一下就行了(PS. 前提是主機版有支援 ACPI):
  1. 在【我的電腦】上按右鍵,選擇【管理】,點選【裝置管理員】,展開【電腦】,如果顯示如下【Advanced Configuration and Power Interface (ACPI)PC】表示已經開啟此功能,否則則繼續往下做。
  2. 在上面按右鍵,選【內容】,點選【驅動程式】
  3. 點選【更新驅動程式】,按下一步,選擇【請顯示這個裝置目前的驅動程式清單,讓我從清單中指定驅動程式(D)】
  4. 點選下一步,點選下面的【顯示這個裝置類別的所有硬體】,然後選擇 ACPI 的 driver。
  5. 點選下一步,安裝 Driver,重開機後就大功告成了

請注意,如果你的電腦沒有 Acpi 的功能,千萬不能裝這個 Driver,否則可能出問題。

2008-03-08

我的練習曲-今天要出發了

預計早上八點從汐止火車站出發,我竟然整理東西到現在還沒睡覺,不知道會不會騎車騎到睡著,XD

先預祝我環島成功囉!! 晚安

2008-03-04

我的練習曲 - 預計行程

Day1 南港 => 基隆 => 礁溪 100 公里左右 Day2 礁溪 => 蘇澳 約 50 公里 Day3 蘇澳 => 新城 約 90km Day4 新城 => 花蓮 30 km Day5 花蓮 => 玉里 100 km Day6 玉里 => 台東知本 100 km Day7 台東知本 => 屏東楓港 88.45 km Day8 屏東楓港 => 墾丁 50 Day9 墾丁 => 屏東楓港 50 km Day10 屏東楓港 => 高雄路竹(芃朋家) 100 km Day11 高雄路竹 => 台南新營(Cedric 同學) Day12 台南新營 => 彰化溪洲(我家) Day13 彰化溪州 => 苗栗頭份(Nancy 家) 100 km Day14 苗栗頭份 => 中壢 90 km Day15 中壢 => 台北 50 km

五指山環島行前會

本週本來要去玉山重新體驗一下山上生活的,但是因為封了山,沒辦法去,嘉明湖的時間我又不能配合,只好引恨留在家裡當宅男嚕XD。好在下星期就要開始環島了, Lopo 說要行前會,Cedric 說要去五指山開,因此就成就了這次的行程。

原本的目標行程:

原計畫路程

但是因為我們 GPS 還沒搞懂怎麼用,加上路沒有記的很清楚,結果多跑了一個【金龍禪寺】,前面坡度還滿徒的XD:

實際路程

沒錯,就是旁邊那個 4 讓我們多爬了一段,雖然直接從那上去也是可以啦,但是為了怕迷路,加上原來只有準備走原路線的地圖,只好再騎回原路線往上爬嚕。

在上山的路上,遇到兩位走路的小姐,走的速度竟然可以跟我們騎腳踏車比,真是太慚愧了;在長青路跟五指山產業道路交界休息時,遇到一個老伯,已經六十多歲了,他六十三歲第一次買車就是去環島,而且帶帳蓬只花了十二天,我們這些年青人竟然安排了十五天去環島,真是太令我汗顏了。另外他也介紹了一條一天來回的台北騎車路線,就從五指山上去,下金山再從淡水回來,沿路還找朋友聊天喝酒,一天來回,這對我來說,怎麼可能嘛,相比之下,我真的遜掉了,唉。

上山遇到的老伯 
上山遇到的老伯,騎的滿快的

P1020199
Mark 熱心讚助的 PDA 加上在上山喝的熱可可

P1020197
路上的山櫻花

P1020206 P1020207 P1020213
山上的夜景,滿美的,可惜天氣不是很好,視線不佳。如果帶女朋友上來看,應該相當不錯,可惜我沒女朋友啊XD。

blog 重新開張

好久沒有寫 blog 了,現在開始要重新開張囉,要努力為將來留點回憶。

2005-09-27

你這套系統的優點是什麼?

『你這套系統的優點是什麼?』今天跟著經理、PM、SA 一起去客戶那邊開上線說明會,一開頭就被問了這句話,一時間,竟然無法回答這系統與他們現行的作業有什麼差別,有什麼優點,做了什麼樣的改善,讓他們能夠得到更大的效益。 為什麼會回答不出來,其實是有原因的。這套系統的開發,我並非從頭就開始參與,我大概是在專案開始後三個月才加入的,因此不了解一開始跟客戶的約定,也不曉得系統為什麼要做成要符合現行作業的流程。再來,因為這是我第一份工作,其實我也不太有立場發表我對這系統的意見,因此對於系統太過於客製化也有一定的責任。 其實一開始我就對系統有一些疑問,為什麼有些資料可以直接利用資訊系統傳遞,卻要以客戶現行的模式,利用紙本傳回?有些東西應該符合現在的作業,卻因為要改革,而做成了別外一種方式,結果不符合使用者的需求? 這個系統也不是說沒有優點,報告自動判讀,就是一個很大的優點了。產品設計方便、編輯報告容易,這些都是相當的優點,但卻被其缺點給掩蓋掉了。他的缺點是太過於客制化了,機乎跟客戶現行的流程相符,前半段的流程反而會使客戶更麻煩,造成客戶的反彈。其實,資訊系統在設計的同時,應該順便進行流程的再造,將現行不必要的流程刪除,以淢少人力的消耗。當然這樣做會有不少的阻力,但是如果推行的好,會讓成本降低,效率增加,好處多多阿。

2005-09-25

了解問題 ,再發表意見

最近公司來了一位新的副理,擔任我目前進行專案的PM,前幾天跟他介紹了目前專案的進度、系統的規畫,系統的操作流程。在會議過程當中,她發表了不少相當多的意見,將她之前的意見提出,要來給我們做參考與改進。 其實,這些意見算是相當有用,而且很多也是我們專案未考慮到的部份。不過,她卻在錯的時間點講了這些意見,並且給人感覺否定了我們專案人員對這專案努力,給了整個小組不小的打擊與反彈。 其實,她並不懂這個專案會為會發展成為目前的樣子,如何從小小的一塊專案發展到目前的規模,在不了解前因後果的情況下,發表了那些言論,成造成反彈是必然的結果。而且,又把一般 application 的東西硬是要套在目前的 web application 上,實在另人難以接受。在這專案即將驗收的前夕,如此的建議實在沒有幫助,或許是求好心切,但我覺的,對於一個空降外來的專業領導人,還是應該要等到對這公司了解、對這專案熟悉後再來進行改革也不遲。否則,不但無法達到應有的效果,而且會造成內部人員的反彈。