拾貝殼

          走過的路
          隨筆 - 39, 文章 - 1, 評論 - 14, 引用 - 0
          數(shù)據(jù)加載中……

          2006年9月5日

          System.getProperty()參數(shù)大全

          System.getProperty()參數(shù)大全  
        1.   
        2. java.version            Java Runtime Environment version  
        3. java.vendor            Java Runtime Environment vendor  
        4. java.vendor.url            Java vendor URL  
        5. java.home            Java installation directory  
        6. java.vm.specification.version                    Java Virtual Machine specification version  
        7. java.vm.specification.vendor                    Java Virtual Machine specification vendor  
        8. java.vm.specification.name                    Java Virtual Machine specification name  
        9. java.vm.version            Java Virtual Machine implementation version  
        10. java.vm.vendor            Java Virtual Machine implementation vendor  
        11. java.vm.name            Java Virtual Machine implementation name  
        12. java.specification.version                Java Runtime Environment specification version  
        13. java.specification.vendor             Java Runtime Environment specification vendor  
        14. java.specification.name        Java Runtime Environment specification name  
        15. java.class.version                        Java class format version number  
        16. java.class.path                  Java class path  
        17. java.library.path                        List of paths to search when loading libraries  
        18. java.io.tmpdir                Default temp file path  
        19. java.compiler            Name of JIT compiler to use  
        20. java.ext.dirs            Path of extension directory or directories  
        21. os.name                Operating system name  
        22. os.arch                Operating system architecture  
        23. os.version            Operating system version  
        24. file.separator            File separator ("/" on UNIX)  
        25. path.separator            Path separator (":" on UNIX)  
        26. line.separator            Line separator ("\n" on UNIX)  
        27. user.name            User's account name  
        28. user.home            User's home directory  
        29. user.dir                User's current working directory 
        30. posted @ 2008-02-18 17:43 binge 閱讀(701) | 評論 (0)編輯 收藏

          axis userguide(3)

          服務類型

          在axis中有4中服務類型
          RPC服務采用soap rpc的標準,and also the SOAP "section 5" encoding.
          Document 服務沒有采用任何編碼(所以你在組裝時不會看到復雜對象的序列化以及soap-style數(shù)組),但是仍然作了xml和java對象的互映射。
          Wrapped服務和Document服務類似
          Message 服務接受和返回soap Envelope中的任意的xml而不需要mapping/data得榜定。如果你想處理來自外部的原始的xml,可以采用Message 服務。

          RPC服務
             這個服務是axis默認的服務。我們在前面的例子中寫的就是rpc服務。<service ... provider="java:RPC"> 。rpc服務遵從soap rpc規(guī)范和編碼規(guī)則,意味著來自rpc服務的xml將類似上面例子中的“echoString”--每個rpc調(diào)用被模塊化為一個外部元素,匹配操作名稱,并包含了很多內(nèi)部元素,每一個都是操作的一個參數(shù)。axis將把這些xml轉(zhuǎn)化為java對象,配送給你得服務,并將序列化來自服務的java對象為xml.因為rpc服務默認采用soap section 5規(guī)則,對象將會通過"multi-ref" 序列化來編碼。
          Document / Wrapped 服務
           這2個服務很類似,都不需要用soap編碼來處理數(shù)據(jù)。他就是一個普通的xml格式。無論哪種情況,axis還是對他們做了xml到java得榜定,所以你最終處理的還是java對象,而不是xml結(jié)構(gòu)的字符串。
           下面的例子來說明他們2個之間的區(qū)別。
           <soap:Envelope xmlns="http://xml.apache.org/axis/wsdd/"
              xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
            <soap:Body>
              <myNS:PurchaseOrder xmlns:myNS="http://commerce.com/PO">
                <item>SK001</item>
                <quantity>1</quantity>
                <description>Sushi Knife</description>
              </myNS:PurchaseOrder>
            </soap:Body>
          </soap:Envelope>

          相關的PurchaseOrder類型定義如下:

          <schema targetNamespace="http://commerce.com/PO">
            <complexType name="POType">
              <sequence>
                <element name="item" type="xsd:string"/>
                <element name="quantity" type="xsd:int"/>
                <element name="description" type="xsd:string"/>
              </sequence>
            </complexType>
            <element name="PurchaseOrder" type="POType"/>
          </schema>

          對于一個document服務來說,他將對應到這樣的方法
          public void method(PurchaseOrder po)

          換句話說,整個PurchaseOrder元素將被處理為一個單一的對象,包含3個屬性。
          而對于wrapped服務來說,他對應于下面的方法
          public void purchaseOrder(String item, int quantity, String description)
          注意到,在wrapped中,PurchaseOrder元素被映射為代表了一個方法。他的參數(shù)就是他的那些元素。
          他們在wsdd得使用如下
          <service ... style="document"> for document style
          <service ... style="wrapped"> for wrapped style
          Message 服務
            當你需要處理純xml而不是java對象時,你將會用到這種服務。
            message服務的方法有4中簽名
          public Element [] method(Element [] bodies);
          public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
          public Document method(Document body);
          public void method(SOAPEnvelope req, SOAPEnvelope resp);

          posted @ 2008-02-17 20:31 binge 閱讀(625) | 評論 (0)編輯 收藏

          axis userguide(2)

          發(fā)布service
          有2種發(fā)布方式,一種是實例發(fā)布,一種是描述符發(fā)布
          實例發(fā)布很簡單
            把我們的java源文件拷貝到axis目錄下,改擴展名為jws
            然后就可以直接訪問了,例如:
          java samples.userguide.example2.CalcClient -p8080 add 2 5
           他將調(diào)用add方法,傳遞的2個變量分別為2和5。
          很顯然,第一種方法有很多弊端,比如需要源文件,不能有包路徑等等
          描述符發(fā)布
          一個最簡單的例子如下:
          <deployment xmlns="http://xml.apache.org/axis/wsdd/"
              xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
            <service name="MyService" provider="java:RPC">
              <parameter name="className" value="samples.userguide.example3.MyService"/>
              <parameter name="allowedMethods" value="*"/>
            </service>
          </deployment>
          一個服務是一個targeted chain ,可能包含下面的一些或者全部:請求Handler,pivot Handler 支點Handler,響應Handler。支點hander在服務中叫做provider,在例子中我們的provider是java:RPC,他被axis內(nèi)嵌,代表了Java RPC service,具體的類是org.apache.axis.providers.java.RPCProvider.
          我們告訴RPCProvider 我們要調(diào)用的服務MyService,并以參數(shù)的形式告訴他具體的目標以及可以被調(diào)用的方法。
          我們也可以給我們要調(diào)用的對象設置作用范圍scope,和servlet的scope一樣,有request,session,application.
          我們需要把這個描述符定義的內(nèi)容告訴應用服務器才能真正提供我們需要的服務。
          如果已經(jīng)部署axis到tomcat,我們可以這樣發(fā)布
          org.apache.axis.client.AdminClient deploy.wsdd
          這樣我們的服務就可以通過soap來訪問了
          測試一下
          java samples.userguide.example3.Client
            -lhttp://localhost:8080/axis/services/MyService "test me!"
          可以通過下面來查看所有已經(jīng)部署的服務
          java org.apache.axis.client.AdminClient list
          來看看更進一步的應用,使用一下request handler
          <deployment xmlns="http://xml.apache.org/axis/wsdd/"
              xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
            <!-- define the logging handler configuration -->
            <handler name="track" type="java:samples.userguide.example4.LogHandler">
              <parameter name="filename" value="MyService.log"/>
             </handler>

            <!-- define the service, using the log handler we just defined -->
            <service name="LogTestService" provider="java:RPC">
              <requestFlow>
                <handler type="track"/>
              </requestFlow>

              <parameter name="className" value="samples.userguide.example4.Service"/>
              <parameter name="allowedMethods" value="*"/>
            </service>
          </deployment>
          這個例子會在客戶端掉用LogTestService的時候,先調(diào)用samples.userguide.example4.LogHandler作記錄操作
          遠程管理
          默認狀態(tài)下,axis只允許在axis部署的機器上使用管理請求,如果希望在其他的機器上進行管理操作可以參照下面的例子

          <service name="AdminService" provider="java:MSG">
            <parameter name="className" value="org.apache.axis.util.Admin"/>
            <parameter name="allowedMethods" value="*"/>
            <parameter name="enableRemoteAdmin" value="true"/>
          </service>
          注意,這樣配置需要作必要的安全配置

          posted @ 2008-02-17 12:17 binge 閱讀(606) | 評論 (0)編輯 收藏

          osworkflow幾個主要組件和概念

          原文見:

          http://blog.csdn.net/huabingl/archive/2008/02/12/2089145.aspx

          posted @ 2008-02-17 10:36 binge 閱讀(778) | 評論 (0)編輯 收藏

          Javascript 的dtree

          說dtree是使用最廣泛的目錄樹javascript應該也不為過.這得意于他簡單的使用方式和良好的結(jié)構(gòu).

          可能這里是他最早的發(fā)源地之一http://www.destroydrop.com/javascripts/tree/

          上面有他的示例和api文檔.

          dtree使用簡單,使用起來就是引入一個dtree.js,dtree.css和一些小圖片文件。.在需要顯示樹的地方,插入類似下面的代碼

          可以參照這里做些配置,觀看效果.可選的選項有folderLinks, useIcons, useLines, useSelection, useStatusText, closeSameLevel

          http://www.destroydrop.com/javascripts/tree/example/ 

          你可以放置radio或者checkbox在相應的節(jié)點上,或者在節(jié)點上加上鏈接.

          posted @ 2008-02-17 10:35 binge 閱讀(1533) | 評論 (0)編輯 收藏

          用opencms java API獲取資源信息

          原文見

          http://blog.csdn.net/huabingl/archive/2008/02/12/2088711.aspx

          posted @ 2008-02-17 10:34 binge 閱讀(738) | 評論 (0)編輯 收藏

          opencms分頁

          opencms列表顯示
           先準備要顯示的數(shù)據(jù)。比如在站點下建立一個sports目錄,里面以news的格式放入一些xmlpage.
            注意給這些xmlpage準備好detail顯示頁面。
          <%@ taglib prefix="cms" uri=" <%@ page import="java.util.*"%>
          <%@ page import="org.opencms.jsp.*"%>

          <%
          String sPageIndex=request.getParameter("pageIndex");
          int iPageIndex=1;
          if(sPageIndex!=null){
          iPageIndex=Integer.parseInt(sPageIndex);
          }

           pageContext.setAttribute("pageIndex", iPageIndex+"");
          %>
          <cms:contentload collector="allInFolderDateReleasedDesc" param="/myfirstsite/sports/%(number)_news.html|news" pageIndex="%(pageContext.pageIndex)" pageSize="2">
          <cms:contentinfo var="contentInfo" scope="request" />
          <a href="<cms:link><cms:contentshow element="%(opencms.filename)"/></cms:link>" target=_blank><cms:contentshow element="Title"/> </a>
          <%out.println("---");%>
          </cms:contentload>
          <%
          CmsContentInfoBean info  = (CmsContentInfoBean)request.getAttribute("contentInfo");
          int totalNum=info.getResultSize();
          %>
          共<%=totalNum%>條數(shù)據(jù),當前第<%=info.getPageIndex()%>/<%=info.getPageCount()%>
          <a href="list_taglib?pageIndex=<%=info.getPageNavStartIndex()%>">第一頁</a>
          <a href="list_taglib?pageIndex=<%=(info.getPageNavStartIndex()-1)>0?(info.getPageNavStartIndex()-1):1%>">上一頁</a>
          <a href="list_taglib?pageIndex=<%=(info.getPageNavStartIndex()+1)>info.getPageCount()?info.getPageCount():(info.getPageNavStartIndex()+1)%>">下一頁</a>
          <a href="list_taglib?pageIndex=<%=info.getPageNavEndIndex()%>">最后頁</a>
          上面的例子力求盡可能少的使用標簽。主要使用了CmsContentInfoBean ,CmsJspXmlContentBean ,I_CmsXmlContentContainer(CmsJspTagContentLoad )等多個對象。分頁的關鍵在CmsContentInfoBean 和 CmsJspTagContentLoad的關系上。 

          參考資料:

          http://www.javaedu.com/bbs/viewthread?thread=128

          http://wangyi878750.blog.sohu.com/41725191.html

          http://l--w.blog.sohu.com/47996664.html

          http://wangyi878750.blog.sohu.com/41378072.html

           

          posted @ 2008-02-17 10:31 binge 閱讀(1642) | 評論 (0)編輯 收藏

          Ruby之Blocks&Iterator

          Ruby之Blocks,Iterator
          -------讀《Programming Ruby 2nd》

          posted @ 2007-08-09 10:22 binge 閱讀(363) | 評論 (0)編輯 收藏

          Ruby簡介

          Ruby是”一種用于迅速和簡便的面向?qū)ο缶幊痰慕忉屝阅_本語言”;這意味著什么?
          解釋性腳本語言:

          • 有直接呼叫系統(tǒng)調(diào)用的能力
          • 強大的字符串操作和正則表達式
          • 開發(fā)中快速回饋

          迅速和簡便:

          • 無需變量聲明
          • 變量無類型
          • 語法簡單而堅實
          • 自動內(nèi)存管理

          面向?qū)ο缶幊?/p>

          • 任何事物都是一個對象
          • 類,繼承,方法,等等
          • 單態(tài)方法
          • 模塊糅合
          • 迭代器和閉包(closures)

          以及:

          • 多精度整數(shù)
          • 異常處理模式
          • 動態(tài)裝載
          • 線程

          如果你對上面的那些概念還不熟悉,繼續(xù)讀,別擔心.Ruby的箴言是”迅速和簡便”.

          posted @ 2007-08-02 10:16 binge 閱讀(446) | 評論 (0)編輯 收藏

          ruby日記

          ruby初體驗
          參考網(wǎng)址:
          http://sitekreator.com/satishtalim/ruby_tools.html
          http://blog.linuxmine.com/23633/viewspace-5329

            ror  制作簡單網(wǎng)頁
          helloworld達成
          (啟動服務器的時候,錯誤的直接切到script目錄去啟動,耽誤了不少時間)
          參考網(wǎng)址:
          http://www.javaeye.com/article/35929
          ror實現(xiàn)簡單的mvc
          參考資料:
          http://www.onlamp.com/pub/a/onlamp/2007/01/05/revisiting-ruby-on-rails-revisited-2.html?page=1
          http://www.ibm.com/developerworks/cn/linux/l-rubyrails/   (最后的修改的 form標簽應該寫成<%= start_form_tag :action => 'update', :id => @contact.id %>)
          ror作復雜的mvc
          制作中。。。。
          需要解決的問題有:
          1,登陸以及session處理
          參考文檔:
          http://wiki.rubyonrails.org/rails/pages/UnderstandingSessions
          2,多表關聯(lián)以及復雜查詢
          參考文檔:
          http://tech.it168.com/j/d/2006-10-20/200610200913835_2.shtml
          3,分頁實現(xiàn)
          參考文檔:
          http://wiki.rubyonrails.com/rails/pages/HowtoPagination



           

          posted @ 2007-07-31 16:40 binge 閱讀(598) | 評論 (0)編輯 收藏

          javascript操作word控件

          <script language="javascript">
          //定義全局變量,用于清理工作
          var word;
          var doc;
          function editFile(){
          //調(diào)用word控件
           word= new ActiveXObject("Word.Application");
          //屏蔽“另存為”按鈕
           word.CommandBars("File").Controls(5).Enabled= false;
            word.CommandBars("File").Controls(5).visible= false;
          //屏蔽"另存為網(wǎng)頁"按鈕

           word.CommandBars("File").Controls(6).Enabled= false;
           word.CommandBars("File").Controls(6).visible= false;

           word.visible = true;
           // word.activate();
          try{
          //打開文件
            doc=word.Documents.Open("  //痕跡保留
            word.ActiveDocument.TrackRevisions   =true; 
          //切換成web視圖
            word.ActiveDocument.ActiveWindow.View.Type=3
           
                }catch(e){
                 alert(e.message);
                };  
          }
          function myfinalize(){
          //文檔保存
              doc.save();
          //文檔關閉
             doc.close();
          //把屏蔽的功能打開
             word.CommandBars("File").Controls(5).Enabled= true;
            word.CommandBars("File").Controls(5).visible= true;
          //word退出
           word.quit();
           
          }
          //參考文檔
            
          http://bbs.hidotnet.com/712/ShowPost.aspx

          posted @ 2007-07-25 10:54 binge 閱讀(3165) | 評論 (0)編輯 收藏

          DB2

          原文:

          http://blog.csdn.net/huabingl/archive/2008/02/11/2088477.aspx

          posted @ 2007-07-09 16:20 binge 閱讀(343) | 評論 (0)編輯 收藏

          AXIS User Guide(1)

               摘要: AXIS User Guide(1)  閱讀全文

          posted @ 2007-01-03 20:54 binge 閱讀(1175) | 評論 (0)編輯 收藏

          Sliding into WebDAV

               摘要: Sliding into WebDAV  閱讀全文

          posted @ 2007-01-03 20:49 binge 閱讀(2423) | 評論 (0)編輯 收藏

          HibernateTemplate方法

               摘要: HibernateTemplate方法索引  閱讀全文

          posted @ 2006-12-26 15:47 binge 閱讀(4397) | 評論 (0)編輯 收藏

          小心對js函數(shù)命名,避免和它的內(nèi)置函數(shù)重名

          最近又遇到個對js取名不帥導致錯誤的問題,特開此貼,以示警戒:
          不要把自己的js函數(shù)取成close(),open(),start()之類的名字!!

          window得resizeto和resizeby方法對模式窗口無效。

          posted @ 2006-12-10 13:25 binge 閱讀(720) | 評論 (0)編輯 收藏

          webdav使用指南

            最近研究了一下webdav,關于webdav的詳細信息可以在 google上搜索或者參看官方網(wǎng)站 筆者簡單的嘗試了它下面的slide和mod_dav.
          slide是jakarta下面的子項目,分為服務端和客戶端.個人認為服務端是專門為tomcat定做的一個webdav實現(xiàn).關于slide,javaeye上有些討論,可以參考
          http://www.javaeye.com/t/5267.html.本人涉入的不是很深,中文問題讓我碰到了,slide提供2中存儲方式,文件形式和數(shù)據(jù)庫形式,限于時間,筆者沒有對數(shù)據(jù)庫形式進行測試.slide的工作目錄默認在服務器bin目錄下.
          用mod_dav來實現(xiàn)相比就簡單多了,如果你熟悉apache httpserver,應該很容易搞定.http://www.webdav.org/mod_dav/ 上的有部分資料.可以根據(jù)http://www.webdav.org/mod_dav/install.html 的講解來配置.apache server1.3以后(包括1.3)在發(fā)布的時候都自帶了mod_dav包.需要做的就是加載和配置它.
          LoadModule dav_module libexec/libdav.so
          AddModule mod_dav.c
          筆者在配置的時候由于沒有認真看文檔,犯了個小小的錯誤.所以注意下面的文字:
          "In the following example, the DAV lock database will be stored in the /usr/local/apache/var directory (which must be writable by the server process). The file's name will be DAVLock when mod_dav needs to create it.
          (actually, mod_dav will create one or more files using this file name plus an extension)

          DAVLockDB /usr/local/apache/var/DAVLock"
          然后你需要配置一個webdav的工作目錄,由于訪問apache服務的用戶會默認是nobody用戶,所以你至少得讓工作目錄對nobody可讀寫.在目錄的定義中加入DAV on這樣的屬性就 ok了
          eg:
          "Alias /pages /home/www/davhome
          <Location /pages>
              DAV On
          </Location>
          "
          測試webdav
          安裝完webdav后,你可以做簡單的測試:
             IE瀏覽器-〉文件-〉打開,然后輸入配置的url,客戶端API.
          如果是 java可以 采用slide的客戶端.(php用戶咋辦?).
          這個最新的客戶端使用的是最新的jdom,注意哦..
          參考資料:
          http://www.uplinux.com/www/net/02/131.shtml

          posted @ 2006-12-10 12:40 binge 閱讀(6009) | 評論 (0)編輯 收藏

          mvnforum權限系統(tǒng)分析

          ?? mvnforum是一個開源的論壇軟件.網(wǎng)址如下:
          http://sourceforge.net/projects/mvnforum/
          ?? 本文主要研究它的權限部分,以作為使用借鑒.
          ?? 這里有篇中文的文檔,以作參考:
          ? http://www.cn-java.com/target/news.php?news_id=3298


          權限部分的UML圖如下:
          ??

          數(shù)據(jù)流程:
          1,系統(tǒng)從OnlineUserManager這個入口進入.這個部件有個Map用來存儲當前的非過期用戶。OnlineUserManager會先根據(jù)當前時間和最后一個用戶的請求時間做對比,檢查是否有刷新過期用戶的必要,如果超過所設置的時間,那么先更新Map。然后OnlineUserManager根據(jù)提供的用戶的 sessionid和username在這個Map中查找。如果找到,則刷新該用戶的最后一次訪問時間;否則,OnlineUserManager調(diào)用OnlineUserFactory部件創(chuàng)建該OnlineUser,并把這個OnlineUser存入Map之中。
          判對用戶是否過期的原理是:從OnlineUser的OnlineUserAction中取出最后一次的訪問時間和當前時間做對比.
          2,OnlineUserFactory負責創(chuàng)建OnlineUser并為該OnlineUser提供完整的權限信息.OnlineUser包括3大部分信息,一部分是用戶的基本信息,一部分是用戶的權限信息,一部分是用戶的在線信息.在線信息由OnlineUserManager負責管理,其他2部分信息由OnlineUserFactory從持久層獲得.
          獲得權限信息并把它設置到OnlineUser部件上,提供給OnlineUserManager管理.
          3.CNMPermissionFactory類似我們常說的service.主要負責和持久層通信,最終返回一個CNMPermission部件供OnlineUserFactory合成OnlineUser部件.在下面的章節(jié)里,筆者會對他細化討論.
          權限結(jié)構(gòu):
          用來實現(xiàn)用戶權限的主要的是CNMPermission接口和他是2個子類AbstractPermission和CNMPermissionImpl.CNMPermission接口負責定義權限有關的常量和對外API.AbstractPermission設置了保存權限信息的變量并實現(xiàn)了CNMPermission接口中定義的抽象方法,因此,筆者把這個抽象類叫做鑒權類.CNMPermissionImpl 則負責對AbstractPermission使用的變量進行設值,因此,筆者稱之為賦權類.
          先看看AbstractPermission的結(jié)構(gòu)。這里涉及到這么幾個概念:全局權限,特定權限,單個權限,組合權限。
          全局權限用true/false來設置。
          特定權限是指某一個動作所作用的不同的對象。比如:某用戶只能將寫操作作用于1,2,4這3個論壇板塊之上。表示為這個特定權限內(nèi)部的ArrayList容器中只有1,2,4三個編號。
          單個權限是指單個動作。比如讀操作。
          組合權限是為了方便設置提供的對單個權限的組合。比如對某用戶一次設置某板塊的“讀”和“發(fā)布”2種權限。
          前2種權限是一個緯度的劃分,后2個是另一個緯度的劃分。
          如何鑒權?
          鑒權的接口都會在CNMPermission中定義。對全局權限,直接返回對應的標志位的值,對于特定權限,則先判斷是否特定權限全開,否,則然后判斷其ArrayList中是否包含對應的對象編號。
          如何賦權?
          這里要承接到上述數(shù)據(jù)流程的第三步。由CNMPermissionFactory根據(jù)一定先后循序(其實無關順序,因為采用的為真覆蓋原則,即持久層返回的權限都是真值,后面的真值對前面的真值可覆蓋)從持久層獲得所有的全局權限和特定權限。mvnforum只有用戶和角色2種概念(當然也可以擴展),因此它的順序是:用戶全局全縣-〉用戶特定權限-〉角色全局全縣-〉角色特定權限。當然無論哪一部都是對同一個CNMPermission進行操作。
          無論在設置全局權限還是特定權限的時候都可能會遇到所定義的組合權限。具體的組合權限拆分是由CNMPermissionImpl來做的.
          相關的表結(jié)構(gòu):
          ?? member表,存貯用戶基本信息。
          ?? membergroup ,存儲用戶和組(角色)的對應關系。
          ?? groups表,存儲組/角色的基本信息
          ?? grouppermission,存儲組/角色的全局權限,字段為groupid permissionid
          ?? groupforum,存儲組/角色 的論壇權限, 字段為groupid ,forum,permissionid
          ?? memberpermission 存貯用戶的全局權限,字段為 memberid permissionid
          ?? memberforum 存貯用戶的論壇權限,字段為memberid ,forum,permissionid


          ? 修改于2006/12/16? 晚8時

          posted @ 2006-09-19 10:07 binge 閱讀(1548) | 評論 (0)編輯 收藏

          Log4j/common log和各種服務器集成的問題

          ? 目前的很多商業(yè)和非商業(yè)的服務器中間件都默認集成了common-log甚至是log4j.因此當我門把我們的應用發(fā)布在上面的時候,都會遇到關于log方面的問題.
          ? 1.webshpere下面集成log4j.
          ? "WebSphere的類裝入器方式有兩種方式:PARENT_FIRST和PARENT_LAST。默認值是PARENT_FIRST,這種方式在載入當前classpath的類之前先載入其上一級classloader能夠裝入的類。這是標準的JVM classloader的默認策略。如果采用PARENT_LAST,則過程正好相反,即先載入當前classpath的類,再載入其上一級classloader能夠裝入的類,這樣可以用當前classpath中更新的類覆蓋其上一級classloader的相同類。受類裝入器方式影響的classloader包括application classloader、WAR classloader以及共享類庫的classloader。"
          ?因為websphere在共享類庫的classloader中有一套common logging,但是確沒有合適配置文件.如果我們把配置正確的log4j.properties文件放在共享類庫下,我們會發(fā)現(xiàn)log4j可以運行.但還有另外一個很通用的方式--改變webshpere的類庫加載順序.我們讓他先加載我們web應用所需的類庫.即我們把web應用的加栽方式改為PARENT_LAST.
          ? 哎,盡管我小心的提防,今天還是中招了,在我的配置里,log4j的配置文件只能讀取一次,不能一個應用一個配置文件.為了讓它加載自己的配置,可以自己寫(或者用spring的)servlet/listener去手動加載這個配置文件.
          ?2.jboss下面的集成log4j
          ? 大家可能都曾在為jboss下面配置log4j郁悶過.jboss比webshpere走的還遠.無論你的項目是否使用了log4j,jboss在自己啟動的時候就已經(jīng)運行他了.也就是說在jboss加載自己共享類庫的時候,已經(jīng)讀取了自己log4j.xml文件配置.這個文件在conf中可以找到.如果你需要為你的應用單獨配置一個catagory,你需要直接在這里配置.
          ???在webloader裝載應用的時候,如果應用中有l(wèi)og4j的包,似乎總出現(xiàn)appender已被占用的問題.筆者把log4j的包連帶應用中的log4j配置文件一并移去,世界清凈了.
          關于為了讓應用自帶的log4j配置文件生效,有人建議修改
          ?<attribute name="Java2ClassLoadingCompliance">false</attribute>

          ?<attribute name="UseJBossWebLoader">false</attribute>
          這兩個屬性.
          ?。常畇unone下面集成log4j
          ??? 距離上次用SunOne服務器已經(jīng)好長時間了,似乎sunOne的log有些類似jboss,也是一個服務器的log集中管理.由于使用的不是很多,暫且在這里站個位子.
          隨手貼點關于log的信息:
          http://wiki.apache.org/jakarta-commons/Logging/FrequentlyAskedQuestions
          http://www-128.ibm.com/developerworks/cn/websphere/library/techarticles/0408_baigang/part3.html

          ?

          posted @ 2006-09-05 17:23 binge 閱讀(1490) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 汉川市| 阿合奇县| 盱眙县| 宁安市| 孟津县| 获嘉县| 江口县| 佛山市| 华池县| 宾川县| 延川县| 监利县| 衡水市| 安顺市| 渝中区| 铜山县| 达尔| 平邑县| 广德县| 都安| 桂平市| 汽车| 揭西县| 博乐市| 桐城市| 宜丰县| 武威市| 澎湖县| 清河县| 和顺县| 鄢陵县| 惠安县| 黄冈市| 望江县| 汉寿县| 金山区| 新巴尔虎右旗| 安义县| 海林市| 隆尧县| 灵山县|