PIXNET Logo登入

大笨鳥的私房菜

跳到主文

大笨鳥於程設這條不歸路上遇到的各式問題與心得

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 8月 10 週二 201010:16
  • Tomcat + DBCP 在連線閒置一段時間後,會丟出 No operation allowed after connection closed 問題的解決方式

問題描述:
  在 Tomcat 上運行 DBCP 時,在閒置一段時間都沒有資料庫連線的動作時,會不定時的出現「No operation allowed after connection closed」的錯誤訊息。

解決方式:
  方法一:
    在 url 屬性值的最後要加上 autoReconnect = true,不過此方法僅適用於連線時間超過八小時者。
  
  方法二:
    在 Tomcat 的 context.xml 中設定 OBCP 的 Resource Tag 上加上「validationQuery」這個屬性值。
  範例如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
      <Resource name="jdbc/mysql" auth="Container" 
                                    type="javax.sql.DataSource"
                          maxActive="50" maxIdle="30" maxWait="10000"
                        username="root" password="12345" 
                                    driverClassName="com.mysql.jdbc.Driver"
                          validationQuery="可以執行的 SQL 指令 (例:SELECT SYSDATE FROM DUAL)"
                        url="jdbc:mysql://127.0.0.1:3306/student?autoReconnect=true"/>
    </Context>
(繼續閱讀...)
文章標籤

大笨鳥 發表在 痞客邦 留言(0) 人氣(291)

  • 個人分類:吃肉
▲top
  • 10月 21 週三 200922:04
  • ClassLoader 的 getResource() 如何取得位於 jar 檔內的路徑

這個問題其實一開始是在 Spring 上引發的,所以也可以列入 Spring 的類別中。
出於實驗性質,將工作上兩個專案合併,這兩個專案都以 Spring 為架構基礎,合併時將其中一個專案先包成 jar,由另一個專案所引用,然後修改此專案的 Spring 主配置檔,用 import tag 來引入包在 jar 檔內的其他 Spring 配置檔。因為 jar 檔內的 Spring 配置檔不少但檔名相同,所以使用了萬用字元的宣告方式,如:
    <import resource="classpath:/**/services.xml"/>
 
原本以為這樣一切沒問題,但在啟動完 Tomcat 後卻發現包在 jar 檔內的 Spring 配置檔全都沒被讀入。找了不少網路的文章都沒有解決方法,而 Spring 官方文件上更是說萬用字元可以用在 classpath 與 jar 檔上 (官方文件 4.7.2.1 節)。不得已之下只能去追 Spring 的 Source,一直追到最後發現 Spring 是用 ClassLoader 的 getSource() 去載入萬用字元 * 之前的路徑。
 
於是我自己寫了一個測試程式直接用 ClassLoader 的 getSource() 去載入位於 jar 檔內的 path,結果發現回傳真的是 null。看來問題並不在 Spring 身上,於是改變找尋問題的關鍵字,終於讓我找到這篇前人問過的問題「getResource(path) fails in jar」,請看第四格 Tom Blough 的回文,裏面提到說這個問題是因為 path 並不存在於 jar 檔中 (because the path itself did not exist in the jar)。同一格回文裏也有提到如何用 eclipse 包出一個含有 path 的 jar 檔,簡述如下:
 
    1. 專案上按右鍵跳出選單,選「Export」-->「Export」,會跳出小視窗
    2. 在跳出的小視窗上選「Java」-->「JAR file」,然後按下「Next」鈕,進入包 jar 的視窗。
    3. 在包 jar 的視窗裏勾選完要包入 jar 的檔案與 jar 檔路徑。
    4. 在同一視窗裏,勾選未於下方 Options 項次裏的「Add directory entries」。
    5. 最後按「Finish」鈕完成。
 
在勾選了 Add directory entries 後重包了 jar 檔,再用 ClassLoader 的 getResource() 去載入位於 jar 檔內的 path,果然回傳不再是 null 了。接著趕緊將新包的 jar 檔放入專案內去執行,但結果還是一樣,位於 jar 檔內的 Spring 配置檔仍是無法讀入,於是再去看了一次官方文件,裏面的 4.7.2.3 節中有提到如果要引入的 Spring 配置檔如果是位於 jar 檔之類非當前的目錄下時,最好要給一個根目錄來識別。
 
會這樣主要是因為 Java ClassLoader.getResource() 方法若是給一個空字串,則它會當成要載入的 path 是當前目錄而不是 jar 檔,於是再修改一下 import 的寫法:
    <import resource="classpath:com/e104/paoservice/**/services.xml"/>
 
重新啟動 Tomcat 後,果然位於 jar 檔內的 Spring 配置檔都能正確讀入了!
(繼續閱讀...)
文章標籤

大笨鳥 發表在 痞客邦 留言(0) 人氣(1,449)

  • 個人分類:吃肉
▲top
  • 11月 26 週一 200723:30
  • 在 Map 或者 Collection 的時候,不要用它們的 API 直接修改集合的內容

今天程式發生了一個罕見的例外:java.util.ConcurrentModificationException
程式的大致內容如下:
for (TreeWindowModel child : childs) {
    // 判斷子點是否為葉節點
    if (child != null && child.getChilds().size() == 0) {
        // 如果是葉節點且無權限者,移除
        if (!child.hasAuth) {
            childs.remove(child);
        }
    } else {
        child.clearNoAuthLeaf();
    }
}
程式的錯誤指向 for (TreeWindowModel child : childs) 這一行,一時之間還真不知道發生什麼錯誤,後來 Eric (感謝 Eric啦!)在 http://www.blogger.com/post-create.g?blogID=4690814976841013329 找到這篇文章,內容是說
『在 Map 或者 Collection 的時候,不要用它們的 API 直接修改集合的內容,如果要修改可以用 Iterator的 remove() 方法』
因此將上述的程式改成:
for (Iterator
it = childs.iterator(); it.hasNext();){
    TreeWindowModel child = it.next();
    if (child != null && child.getChilds().size() == 0) {
        // 如果是葉節點且無權限者,移除
        if (!child.hasAuth) {
            it.remove();
        }
    } else {
        child.clearNoAuthLeaf();
    }
}
這樣程式就不再丟出 java.util.ConcurrentModificationException
(繼續閱讀...)
文章標籤

大笨鳥 發表在 痞客邦 留言(0) 人氣(124)

  • 個人分類:吃肉
▲top
  • 11月 26 週一 200723:16
  • 如化在宣告List 與 Map 類別時順便初始化?

之前在寫 java 時一直有個困擾,那就是在宣告 List 或 Map 類別時,不知該如何順便將其初始化,
所以往往要先宣告後再將要放入 List 或 Map 的物件一個一個的放入。
不過今天在追 Struts 2 的原始碼時,發現了一個寫法,可以在宣告的同時順便初始化。寫法如下:
(繼續閱讀...)
文章標籤

大笨鳥 發表在 痞客邦 留言(0) 人氣(2,818)

  • 個人分類:吃肉
▲top
  • 11月 26 週一 200723:08
  • 取得本機的IP

InetAddress.getLocalHost().getHostAddress()
(繼續閱讀...)
文章標籤

大笨鳥 發表在 痞客邦 留言(0) 人氣(31)

  • 個人分類:吃肉
▲top
1

熱門文章

  • (21,683)Oracle 好用 Fuction 介紹 - ROW_NUMBER
  • (7,981)鎖!滑鼠右鍵、功能鍵、組合鍵……
  • (3,609)取代 eval 的方式
  • (2,818)如化在宣告List 與 Map 類別時順便初始化?
  • (1,981)使用 createElement 插入 text 元件到 form 的陷阱
  • (1,272)任意竄改別人的網頁(適用IE與FireFox)
  • (1,193)使用JSP輸出Excel檔常見問題
  • (523)這擺洗 firefox:消失的輸入框游標
  • (321)Oracle 好用 Fuction 介紹 - RANK
  • (291)Tomcat + DBCP 在連線閒置一段時間後,會丟出 No operation allowed after connection closed 問題的解決方式

文章分類

toggle WebService (1)
  • Axis (3)
toggle DHTML (3)
  • YUI3 (1)
  • 吸A死A死 (2)
  • 吃肉是鬼 (32)
toggle Java (2)
  • 吃肉韋伯 (3)
  • 吃肉 (5)
toggle 架構 (3)
  • 死踹死1.x (1)
  • 史匹靈(Spring) (2)
  • 死踹死2.x (7)
toggle 資料庫 (2)
  • SQL (1)
  • Oracle (4)
  • 未分類文章 (1)

最新文章

  • 各瀏覽器的 navigator.userAgent 傳回來的值
  • 在使用 Spring 的 Web 專案中的一般類別,如何取得由 Spring 實例化出來的物件
  • 一鍵下載 - Chrome 限定
  • Test Geolocation API
  • DOM element 屬性 scroll、client 與 offset 的差異(以 width 為例)
  • YUI Builder 簡介與安裝
  • 當 Html Tag 被包在 <a> 之中時,使用 innerHTML 在 Firefox 上的詭異現象與解決方式
  • Struts 2.1 以上版本,在 xml 配置檔的 include tag 已經可以用萬用字元了
  • 解決使用 AXIS Client 呼叫 AXIS2 Web Service 傳檔案時發生的錯誤
  • WebService 的傳遞檔案方式 -- DataHandler (範例使用 AXIS)

最新留言

  • [19/08/27] 訪客 於文章「Oracle 好用 Fuction 介紹...」留言:
    感謝您...
  • [15/06/22] Jacqueline 於文章「各瀏覽器的 navigator.user...」留言:
    sexy babes cam to cam phone se...
  • [14/03/07] dominikaz 於文章「各瀏覽器的 navigator.user...」留言:
    A mature person free webcams e...
  • [14/02/27] Ivonna 於文章「各瀏覽器的 navigator.user...」留言:
    http://www.hugcams.com/live-se...
  • [12/11/01] aaa 於文章「Test Geolocation API...」留言:
    你好可以請問一下 你那個Geolocation 的按鈕...
  • [10/10/08] somebaby 於文章「測試 SyntaxHighlighter...」留言:
    謝謝你 我測試成功了...
  • [10/10/04] somebabyTina 於文章「測試 SyntaxHighlighter...」留言:
    請問如何在Pixnet 上使用 syntaxhighligh...

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: