欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
J2EE環(huán)境下的log4j - [Matrix - 與 Java 共舞]
    A previous article of mine explained the basics of log4j. log4j is an
    我前面的文章(previous article)介紹了log4j的一些基礎知識。Log4j是在jakarta apache 項目下開(kāi)發(fā)的一個(gè)開(kāi)源的日志記錄工具。前面的文章主要介紹了如何在jsp/servlet的環(huán)境下使用log4j.但是這僅僅是j2ee環(huán)境的一半。下面我們還要介紹另外一半,EJBs環(huán)境下log4j的使用和配置。它需要一些更微妙的方法去操縱log4j的配置。下面的文章將會(huì )介紹為什么要這么做,如何做。

大綱
    Log4j是一個(gè)很流行的日志記錄工具。根據java項目不同的日志需求和調試需求。他可以提供非常靈活的控制。它可以對輸出信息進(jìn)行分級控制。也可以在運行時(shí)改變輸出信息的表現格式。而這一切都不需要改變源程序。
    Log4j用三個(gè)對象來(lái)控制日志的記錄。Logger,appenders,和layouts。logger會(huì )以特定的layouts(樣式)將日志記錄到appenders中。在這個(gè)操作過(guò)程中常常需要指定具體的外部配置文件。(指定外部配置文件也是最好的一種方式)。這些配置信息會(huì )在你的應用開(kāi)始時(shí)加載進(jìn)來(lái),也可能在運行的時(shí)候被改變。
    在使用log4j的時(shí)候將會(huì )用到以下這些步驟:
    1.寫(xiě)配置文件,在文件中需要:
       ? 指定root logger的級別并且和一個(gè)appender綁定
       ? 指定appender的屬性
       ? 為appender指定一個(gè)layout
      2.在你的代碼中,需要根據class或name得到一個(gè)logger.典型的一種做法是將logger  
         與當前的類(lèi)的進(jìn)行關(guān)聯(lián)。
    3.用你從第二步得到的logger的任何一種方法(log.debug(),log.info(),log.warn
          (),log.error())進(jìn)行寫(xiě)日志。

設置安裝
    在這本書(shū)的例子是運行在weblogic 7.0 sp2 demo上。我們之所以用weblogic代替開(kāi)源的產(chǎn)品(如jboss)是因為weblogic為在項目組中配置log4j提出了更多的挑戰。它也是最流行的應用服務(wù)器。自從我發(fā)表的之前的文章。我收的絕大多數問(wèn)題都是關(guān)于它的。但是這里決不是暗示推薦使用weblogic。這只是提供一個(gè)測試環(huán)境。說(shuō)明在j2ee環(huán)境下如何配置log4j

Weblogic的設置安裝
    Weblogic7.0sp2可以從BEA's trial page下載。選擇你需要的版本類(lèi)型進(jìn)行下載。注意你必須要在bea上面進(jìn)行一些個(gè)人信息的注冊。而且下載的文件很巨大。大約有150M。當然你也有別的選擇。你可以選擇免費的測試CD
    如果你得到了安裝文件。安裝就很簡(jiǎn)單了。你只需要按照安裝向導一步一步安裝就可以了。我們的測試環(huán)境選擇典型安裝。當安裝到最后,安裝向導會(huì )問(wèn)你是否需要配置Domain.選擇yes然后就會(huì )運行Domain的配置向導。第一屏、選擇Domain的類(lèi)型和名字。選擇WLSDomain作為Domain的類(lèi)型,給它起個(gè)名字叫mydomain.第二屏、設置server的類(lèi)型為單一server(standalone server).再下一屏選擇缺省路徑做為Domain的路徑,再點(diǎn)擊next為server進(jìn)行配置。然后一路next就可以了。最后需要你為domain輸入管理員賬號和密碼。我一般就是以admin作為管理員賬號,password最為密碼(很原始的做法)。接下來(lái)選擇是否將service注冊成windows的services(在windows環(huán)境下安裝),一般選擇no。最后選擇yes在windows開(kāi)始菜單上方置快捷方式。最后點(diǎn)擊create建立Domain.
    運行weblogic就很簡(jiǎn)單了。從開(kāi)始菜單Start->All Programs->BEA WebLogic Platform 7.0->User Projects->mydomain->Start Server這樣可以啟動(dòng)server.不過(guò)更常用的方式是從dos命令行,進(jìn)入BEA的HOME目錄。進(jìn)入user_projects\mydomain后,運行startWebLogic.cmd.就可以了。啟動(dòng)的時(shí)候會(huì )要求你輸入管理員賬號和密碼。最后你可以看到server開(kāi)始啟動(dòng)。當你看到Server start in running mode表示啟動(dòng)成功。如果要關(guān)閉你只要關(guān)閉Dos窗口就可以了。
    如果你安裝運行成功。你可以在瀏覽器中輸入如下地址http://localhost:7001/console.你會(huì )進(jìn)入webogic的管理界面。你可以對applications和server進(jìn)行各種配置。當然你要輸入管理員賬號和密碼。就和啟動(dòng)時(shí)輸入的一樣。進(jìn)入后你可以看到各種管理任務(wù)的界面。你也可以執行相應的管理任務(wù)。
log4j的安裝
    和前面提到的一樣。Log4j可以從log4j web site.下載。請按照前面的文章介紹進(jìn)行下載和安裝log4j的二進(jìn)制代碼。在這章最后我們會(huì )介紹log4j的配置。
類(lèi)加載器的概念有什么不一樣。
    雖然有關(guān)類(lèi)加載器的討論在本文以外已經(jīng)有很多了。但是我還是盡力解釋一下類(lèi)加載器是如何影響應用服務(wù)器中log4j的配置的。
類(lèi)加載器。顧名思義,表示在java虛擬機中加載calsses.在我們的class執行和被訪(fǎng)問(wèn)之前。它必須通過(guò)類(lèi)加載器加載使之有效。給定一個(gè)class名字,類(lèi)加載器會(huì )定位class并且將它加載到j(luò )ava虛擬機。但是類(lèi)加載器本事就是class。這就帶來(lái)一個(gè)問(wèn)題。是誰(shuí)來(lái)加載這些類(lèi)加載器呢。
    當你運行一個(gè)java程序。(例如在命令行內輸入java命令),它就會(huì )執行并且啟動(dòng)一個(gè)本地的native java launcher(我叫他java 啟動(dòng)者,估計不太準確注明一下)。這里本地的意思是指針對你的平臺和運行環(huán)境而言。這個(gè)本地的java啟動(dòng)者包含一個(gè)類(lèi)加載器,這個(gè)類(lèi)加載器的名字叫做bootstrap 類(lèi)加載器.(引導類(lèi)加載器).這個(gè)引導類(lèi)加載器.是本地的和你的環(huán)境有關(guān)。而且它不是用java寫(xiě)成的。這個(gè)引導類(lèi)加載器的主要功能是加載java的核心類(lèi)。
IMG http://www.matrix.org.cn/upload/forum/2003128174648.jpg[/IMG]
                            
Figure 1; 類(lèi)加載器 委托層次
    
      Java虛擬機缺省會(huì )執行其他兩個(gè)類(lèi)加載器.引導類(lèi)加載器會(huì )加載extension(擴展)類(lèi)加載器和application(應用)類(lèi)加載器到內存中。這些都是用java寫(xiě)成的。和前面提到的一樣。引導類(lèi)加載器會(huì )加載java的核心類(lèi)(例如:java.util包下的類(lèi))。擴展類(lèi)加載器會(huì )加載擴展的java核心類(lèi)(例如:javax.包下的類(lèi),或者是在運行環(huán)境中類(lèi)路徑ext目錄下的java類(lèi)。)應用類(lèi)加載器會(huì )加載你應用下的各種class文件。
    所有三種類(lèi)加載器都遵循委托模式。當低一級的類(lèi)加載器需要定位一個(gè)類(lèi)。它會(huì )將這個(gè)任務(wù)委托給父一級類(lèi)加載器.當你的應用需要一個(gè)特殊的類(lèi)。應用類(lèi)加載器會(huì )將這個(gè)任務(wù)委托給擴展類(lèi)加載器.而擴展類(lèi)加載器又會(huì )將這個(gè)任務(wù)委托個(gè)引導類(lèi)加載器.。如果你請求的類(lèi)是一個(gè)核心類(lèi)。那么引導類(lèi)加載器會(huì )將這個(gè)類(lèi)加載,使你可以使用這個(gè)類(lèi)。但是如果找不到這個(gè)類(lèi)。這個(gè)請求就會(huì )返回到擴展類(lèi)加載器.最后在返回到應用類(lèi)加載器.這樣的做法就使每個(gè)類(lèi)加載器會(huì )先讓它的父一級的類(lèi)加載器搜索需要的類(lèi)。只有當父一級的類(lèi)加載器沒(méi)有找到。才會(huì )讓子一級的類(lèi)加載器為它自己搜索所需的類(lèi)。
    在應用服務(wù)器當中,每一個(gè)獨立部署的web應用和EJB都會(huì )取得屬于自己的類(lèi)加載器(正常情況下,這也是weblogic的處理方式)。這種類(lèi)加載器來(lái)源于應用類(lèi)加載器.它們主要用來(lái)加載特定的ejb和web應用。(注意一點(diǎn),當我們的web應用打包成ear文件――ejb和webapps的混合,這時(shí)候只會(huì )有一個(gè)類(lèi)加載器,不會(huì )再分成ejb和webapp兩種)這種新的類(lèi)加載器會(huì )加載所有webapp和ejb所需要的類(lèi)包。當然首先這些類(lèi)包不存在于java核心類(lèi)中和擴展類(lèi)中(ext)。它可以加載也可以卸載類(lèi)包。但它有一種缺省類(lèi)加載器所沒(méi)有的特性。這個(gè)特性就是可以對應用進(jìn)行熱部署。
    當weblogic啟動(dòng)的時(shí)候。它會(huì )用java提供的應用類(lèi)加載器加載相應的類(lèi)。并且構造相應的運行環(huán)境。然后它會(huì )啟動(dòng)特定的類(lèi)加載器.這種特定的類(lèi)加載器來(lái)源于java的應用類(lèi)加載器.java的應用類(lèi)加載器會(huì )為特定的類(lèi)加載器加載相應的classes.這種特定的類(lèi)加載器對于其他的應用的類(lèi)加載器是不可見(jiàn)。因此。一個(gè)特定應用所加載的classes.對于其他應用是不可見(jiàn)的。
         IMG http://www.matrix.org.cn/upload/forum/2003128174949.jpg[/IMG]
        
Figure 2: 特定的應用 類(lèi)加載器

      那么我們如何使一個(gè)單獨的類(lèi)對所有的應用都起作用呢。只有使用上層的類(lèi)加載器.可以把這個(gè)類(lèi)方在weblogic中classpath里面。當weblogic啟動(dòng)的時(shí)候。缺省的java 應用類(lèi)加載器會(huì )自動(dòng)把類(lèi)加載到內存中去。所有的子應用都是可以訪(fǎng)問(wèn)到這個(gè)類(lèi)的。但是。這中方法的缺點(diǎn)也很明顯。首先你失去了在所有特定應用中對指定類(lèi)進(jìn)行熱部署的能力。第二、這些類(lèi)發(fā)生任何變化意味著(zhù)server必須從新啟動(dòng)。因為沒(méi)有一種機制可以讓java應用類(lèi)加載器從新加載這些類(lèi)。所以當你采用這種方法的時(shí)候你要權衡一下得失。
    對你的j2ee應用來(lái)說(shuō),Log4j是一種擴展類(lèi)庫。那么我們應該把這個(gè)類(lèi)庫放到那里去呢。前面提到一種建議是。將它放到weblogic啟動(dòng)時(shí)的classpath中。但是前面也講到了它的缺點(diǎn)。不太建議使用這種方法。但是在j2ee環(huán)境下配置log4j會(huì )因為ejb無(wú)法得知由webapp類(lèi)加載器加載的classes而有一些自己的特點(diǎn)(ejb和webapp用的類(lèi)加載器不相同)。除非你的包和應用使用的相同類(lèi)加載器加載ejb和webapp.下面我為說(shuō)明這一點(diǎn)舉個(gè)例子。
      我們會(huì )在我們安裝的weblogic中部署一個(gè)非常簡(jiǎn)單的應用它包括jsp和ejb.這個(gè)ejb是個(gè)非常簡(jiǎn)單的ejb。當它被調用的時(shí)候會(huì )返回”hello world”
Example: Why Doesn't It Work?
例子:“它為什么不工作?!?br>    讓我們用weblogic 的控制臺安裝.war文件和。Ejb的.jar(EJB .jar file)文件。當我們想要安裝ejb的.jar文件的時(shí)候。我們會(huì )發(fā)現org.apache.log4j.logger找不到的錯誤。
Ejb的.jar文件無(wú)法從與它相對應的webapp的目錄下的web-inf目錄得到log4j的消息。因為ejb和webapp使用的是不的類(lèi)加載器.甚至是我們將ejb和webapp打包到同一個(gè)ear文件中(.ear file)。我們還是得到錯誤信息。這是為什么?即使我們將ejb和webapp打包到ear文件中使用相同的類(lèi)加載器。我們還沒(méi)有告訴我們的ejb去那里訪(fǎng)問(wèn)log4j.jar文件。
Example: Why It Will Work
例子:為什么它工作了。
    這里有個(gè)升級后可以工作的ear文件(updated .ear file)讓我們看看都做了那些改動(dòng)。
    ? 我將log4j.jar文件從webapp的lib目錄下面一移到了外層目錄。與.war和ejb.jar文件平級。這
      樣使得.jar文件對ejb來(lái)講是可見(jiàn)的。
    ?  我更改的Ejb.jar文件中的Manifest.mf,增加一個(gè)條目,使他包含了指向log4j.jar的classpath
         (Class-Path: log4j.jar)
    這些更改已經(jīng)可以使我們將這個(gè)應用部署到weblogic上。當我們用控制臺部署的時(shí)候已經(jīng)沒(méi)有出錯信息了。因為現在ejb可以訪(fǎng)問(wèn)log4j。對于loa4jDemoEar2這個(gè)應用只有一個(gè)類(lèi)加載器.它為整個(gè)應用加載類(lèi)庫和classes。在EJB中的.mf文件中添加的classpath條目主要用來(lái)解決對log4j.jar文件的依賴(lài)和加載。Webapp也可以訪(fǎng)問(wèn)到log4j.jar.即使我們將它移到了lib目錄的外邊。因為他們用的是同一個(gè)類(lèi)加載器。

對于一個(gè)j2ee環(huán)境采用的策略
    根據你的需求。我建議如下策略。你會(huì )發(fā)現這不僅僅與log4j相關(guān)。而適用于所有需要部署擴展的classes的應用。
    ? 如果你的classes僅僅被你的webapplication使用。那么把它部署到web-info/lib這個(gè)目錄。
    ? 如果你的web應用和ejb都需要這個(gè)classes。那么在你的ejb的.mf文件增加相應的classpath條目。指明需要的classes。并且將classes放到ear文件中的最上一層。和.war、ejb.jar放在同一層次。這樣你的ejb和webapp都可以訪(fǎng)問(wèn)這個(gè)classes而不需要反復的部署。
結論
    如果你不清出類(lèi)加載器的工作方式。J2ee的打包工作就會(huì )變的非常繁瑣。清楚的了解“帽子下面“機制。對成功部署j2ee應用非常重要。它會(huì )幫助部署工程師明確自己如何連接這些classes.
      Log4j在j2ee環(huán)境下的工作沒(méi)有什么不同。只是需要能夠進(jìn)行正確的配置。希望這片文章對你有所幫助。

Resources
? Tyler Jewell's commentary on EJB 2 and J2EE packaging explains this strategy in more
   detail.
? IBM has published a document on Websphere-specific classloader issues.
? WebLogic's classloader architecture can be accessed here.
? Some information on log4j and classloader issues can be found in the log4j
    troubleshooting docs.

Vikram Goyal is a serious Java lover with 6+ years of experience.
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Jetty類(lèi)加載機制
談?wù)?Java 類(lèi)加載機制
java~通過(guò)ClassLoader動(dòng)態(tài)加載~tomcat模型
一步之差進(jìn)入大廠(chǎng),下定決心鉆透java所有面試題,順利通過(guò)!
java筆試題大匯總(二)
java面試
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久