成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡單解決復雜的Oracle IAS問題

數據庫 Oracle 數據庫運維
本文作者最近碰到了一個簡單的NoClassDefFoundError問題,不過針對這個涉及Oracle IAS的錯誤,卻有十分簡單的解決方案。

筆者做了一個小的系統輔助功能,可以周期性訪問某個URL、執行某個SQL語句 or 執行某個系統命令。

執行SQL語句和系統命令比較簡單,這里不再詳述,主要說一下訪問某個URL。

實際上JDK自身已有工具類用于創建HTTP請求,類名是:java.net.HttpURLConnection,但考慮到基礎類通常比較粗糙,很多情況要自己考慮和處理,就轉頭去Google了下,發現果然有開源的工具包可以使用,幾個工具包中以HttpClient較為常用,而且是apache的東東,于是決定采用HttpClient。

從apache上down了包commons-httpclient-3.1.jar和commons-codec-1.3.jar兩個包,后者是HttpClient依賴的包。

幫助寫的很好,即便是像我這樣英文很爛,也能很快上手。

    public boolean visitURL(String url) {
       
        // Commons HttpClient 3.1
        HttpClient client = new HttpClient();
        HttpMethod method = new GetMethod(url);

        // Provide custom retry handler is necessary
        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
       
        boolean rs = false;
       
        try {
           
            // Execute the method.
            int statusCode = client.executeMethod(method);

            if (statusCode != HttpStatus.SC_OK) {
                logger.error("Method failed: " + method.getStatusLine());
            }
            else {
                rs = true;   
            }

        } catch (HttpException e) {
            logger.error("Fatal protocol violation: " + e.getMessage());
        } catch (IOException e) {
            logger.error("Fatal transport error: " + e.getMessage());
        } finally {
            // Release the connection.
            method.releaseConnection();
        }
       
        return rs;
    }

本機Tomcat下run一下,工作正常,隨即丟到服務器(Oracle IAS環境)上測試,程序應該出乎意料的報了個錯。

09/03/16 19:03:43 java.lang.NoClassDefFoundError
09/03/16 19:03:43 at org.apache.commons.httpclient.HttpMethodBase.writeRequestLine(HttpMethodBase.java:2015)
09/03/16 19:03:43 at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:1864)
09/03/16 19:03:43 at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:975)
09/03/16 19:03:43 at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:368)
09/03/16 19:03:43 at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:164)
09/03/16 19:03:43 at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:437)
09/03/16 19:03:43 at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
09/03/16 19:03:43 at com.zbht.util.TimerTaskManager.runURLTask(TimerTaskManager.java:237)
09/03/16 19:03:43 at _system._timer__task._test._jspService(_test.java:182)
09/03/16 19:03:43 at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59)
09/03/16 19:03:43 at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462)
09/03/16 19:03:43 at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594)
09/03/16 19:03:43 at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518)
09/03/16 19:03:43 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
09/03/16 19:03:43 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713)
09/03/16 19:03:43 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370)
09/03/16 19:03:43 at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871)
09/03/16 19:03:43 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453)
09/03/16 19:03:43 at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:302)
09/03/16 19:03:43 at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:190)
09/03/16 19:03:43 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
09/03/16 19:03:43 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
09/03/16 19:03:43 at java.lang.Thread.run(Thread.java:595)

錯誤信息看上去比較低級:NoClassDefFoundError,類沒找到,迅速了檢查了一下本機和服務器上的jar包是否相同,“一模一樣”!這就奇怪了。

檢查本機的開發環境,只添加了這兩個jar,其他的都沒有動過,又檢查服務器的運行環境,一樣沒有變化。于是刪掉本機開發環境下的這兩個jar,問題浮出來了,類中對httpclient的7、8個引用中只有1個提示未找到指定的類,看來Oracle自己的某個包中已經包含某個較低版本的httpclient,jar包沖突的問題是件讓人沮喪的事情,嘗試解決這種問題會所耗費的時間也許是其他方法的N倍,無心戀戰。

其實此處要進行的操作很簡單,就是訪問指定的URL,根據返回的內容檢查是否成功,HttpClient是完整模擬瀏覽器,考慮了很多種問題,使用起來反倒是復雜了,決定轉用JDK的基礎類:java.net.HttpURLConnection

事情出奇的順利,空間里找到了之前寫的一個方法,正好解決這個問題,以下是代碼清單:

    private boolean visitURL(String strUrl, String successFlag) {
       
        boolean rs = false;
        HttpURLConnection jconn = null;
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

        try {
            URL url = new URL(strUrl);

            jconn = (HttpURLConnection) url.openConnection();
            jconn.setDoOutput(true);
            jconn.setDoInput(true);
            jconn.connect();
           
            InputStream in = jconn.getInputStream();
            byte[] buf = new byte[4096];

            int bytesRead;
            while ((bytesRead = in.read(buf)) != -1) {
                byteArrayOutputStream.write(buf, 0, bytesRead);
            }

            String strRead = new String(byteArrayOutputStream.toByteArray());
           
            logger.debug(strRead);
           
            strRead = StringUtil.NVL(strRead);
           
            if(strRead.indexOf(successFlag) != -1) {
                logger.info("Visit URL < " + strUrl + " > success !");
                rs = true;
            }
           
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            jconn.disconnect();

            try {
                byteArrayOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       
        return rs;
    }

【編輯推薦】

  1. 實例講解Oracle 9i數據壞塊的處理
  2. Oracle 11g中實現自我調整功能
  3. Oracle數據庫設計提升性能的五條法則
責任編輯:彭凡 來源: 百度空間
相關推薦

2012-04-06 09:45:41

開發

2022-12-12 09:46:49

Kubernetes容器

2010-04-16 17:31:22

ORACLE回滾段

2010-04-15 14:33:47

刪除Oracle服務

2010-04-29 17:46:31

Oracle死鎖

2024-06-11 07:54:53

2023-06-28 06:33:37

2024-11-04 13:17:12

2010-05-07 10:06:10

Oracle PL D

2009-09-15 17:45:34

Linq多條件

2011-10-13 10:59:44

ADSL貓遠程控制網絡維護

2010-04-28 18:01:15

Unix系統

2014-04-18 09:30:49

基于網絡的APMAPM應用管理

2020-11-11 07:09:05

隔離直播系統

2022-09-05 17:26:27

技術

2022-04-18 09:00:00

數據庫向量機器學習

2010-04-26 13:38:34

Oracle dele

2010-04-13 14:25:24

Oracle問題解決

2015-10-21 14:27:18

ORACLE 超長字符解決辦法

2010-05-06 17:24:05

Unix命令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区电影 | 99精品99 | 成在线人视频免费视频 | 99欧美精品 | 日韩a视频 | 中文字幕在线第一页 | 精品乱码一区二区三四区 | 亚洲午夜精品一区二区三区他趣 | av中文字幕在线观看 | 国产一二三视频在线观看 | 国产精品不卡 | 国产精品一区一区三区 | 欧美一区二区三区在线观看 | 欧美成年人 | 91丨国产| 欧美一级小视频 | 一区二区三区四区免费观看 | 日韩一区二区福利 | 国产精品美女久久久久久久久久久 | 男人天堂网址 | xxx.在线观看 | 久久久精品视频一区二区三区 | 欧美激情 亚洲 | www国产亚洲精品 | 亚洲一二三区精品 | 在线播放国产一区二区三区 | 日韩在线观看网站 | 欧美性一区二区三区 | 亚洲欧美日韩一区 | 自拍视频网| 欧美日韩综合一区 | 中文字幕在线看人 | 亚洲精品免费在线 | 三级在线免费观看 | 成人在线中文字幕 | 久久久久久久久久影视 | 成人免费视频观看 | 久久999| 高清国产午夜精品久久久久久 | 2018国产大陆天天弄 | 成人在线小视频 |