每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
          最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks

          #

          key words: REST webservice

          轉(zhuǎn)自廖宇雷的Weblog

          REST 是由 Roy Fielding 在他的論文《Architectural Styles and the Design of Network-based Software Architectures》中提出的一個術(shù)語。

          REST 是英文 Representational State Transfer 的縮寫,有中文翻譯為“具象狀態(tài)傳輸”(參考:《SIP/IMS網(wǎng)絡(luò)中的Representational State Transfer (REST)和數(shù)據(jù)分布》)。

          —————————————

          前面的內(nèi)容比較枯燥,我說說我自己的理解。

          但是 REST 到底是什么呢?論文我看不懂,不過找到一篇更簡單易懂的東西:《Building Web Services the REST Way》

          根據(jù)這篇文章,我整理了一下我自己對 REST 的理解:

          REST 首先只是一種架構(gòu)樣式,不是一種標準。這點和 Ajax 類似,兩者都是利用現(xiàn)有的成熟技術(shù)。

          在 REST 的定義中,一個 Web 應(yīng)用總是使用固定的 URI 向外部世界呈現(xiàn)(或者說暴露)一個資源

          URI 是英文 Uniform Resource Identifier 的縮寫,中文翻譯“通用資源標志符”。

          “通用資源標志符”是指唯一標識一個資源(xhtml 文件、圖片、css 樣式表)的字符串。當然了,RFC 中定義的 URI 復雜得多,不過我們此處將 URI 想象成一個人的身份證號碼就行了(你不能有兩個同時有效的身份證號碼,一個號碼也不可能同時對應(yīng)兩個人)。而我們天天掛在嘴邊的 URL 地址就是 URI 的一種表現(xiàn)形式(個人理解,有錯請糾正)。

          知道什么是 URI 后,我們來看一個實際例子:

          http://www.example.com/photo/logo 指向 example.com 網(wǎng)站(可以視為一個 Web 應(yīng)用)中類型為 photo,名字為 logo 的資源。我們用瀏覽器訪問這個 URI,看到的將可能是一個 xhtml 文檔,其中用 <img src=”……” /> 來顯示實際的照片。

          http://www.example.com/photo/logo 很容易讓你想到 URL 重寫。事實上,這個地址很可能會在服務(wù)器內(nèi)部處理為 http://www.example.com/photo.php?name=logo 這樣的地址。photo.php 是服務(wù)器端的一個動態(tài)腳本文件,根據(jù) name 參數(shù)生成 xhtml 文檔返回給瀏覽器。

          現(xiàn)在假設(shè)我們要獲取這張照片的 XML 文檔。XML 文檔中包含照片的文件名、文件大小、拍攝日期等等信息。也就是說我們要獲取“同一個資源的不同表現(xiàn)形式的數(shù)據(jù)”。對于這個要求,我們可以很容易的用另一個 URL 地址達到:http://www.example.com/xml/logo。

          但是,這就違背了“URI 唯一標識一個資源”的定義。如果我們要獲取同一個資源的多種表現(xiàn)形式,那么就要使用更多的 URL,從而給一個資源指定了多個不同的 URI。

          而在 REST 中,不管是獲取照片的 xhtml 文檔還是 XML 文檔,或者照片文件本身,都是用同一個 URI,就是 http://www.example.com/photo/logo。

          那這是怎么辦到的呢?Ruby On Rails 中是通過分辨 HTTP Request Header 信息來分辨客戶端是想要取得資源的哪一種表現(xiàn)形式的數(shù)據(jù)。

          當我們用瀏覽器訪問一個網(wǎng)址時,瀏覽器會構(gòu)造一個 HTTP 請求。這個請求有一個頭信息,其中包括了本次請求接受何種類型的數(shù)據(jù)。通常瀏覽器發(fā)送的 HTTP 請求頭中,Accept 的值都是 */*,也就說接受服務(wù)器返回的任何類型的數(shù)據(jù)。

          看到這里,聰明的家伙應(yīng)該知道了。只要我們指定一個特定的 Accept 參數(shù),那么服務(wù)器就可以通過判斷該參數(shù)來決定返回什么類型的數(shù)據(jù)。所以在一個采用 REST 架構(gòu)的應(yīng)用中,要獲取同一個資源的不同表現(xiàn)形式的數(shù)據(jù),只需要使用不同的 HTTP 請求頭信息就行了。

          如果考慮為 Web 應(yīng)用增加 Web Services,這種技術(shù)的價值就體現(xiàn)出來了。比如我寫了一個 Delphi 程序,現(xiàn)在只需要構(gòu)造一個包含 Accept: text/xml 的 HTTP 請求頭,然后將請求發(fā)送到 http://www.example.com/photo/logo 就可以了。返回的結(jié)果就是一個 XML 文檔,而不是 xhtml 文檔。

          因為我們的 HTTP 請求頭信息有不同的狀態(tài),從而可以獲得不同的數(shù)據(jù),所以叫做“具象狀態(tài)傳輸” :)

          —————————————

          除了上面的用法,REST 還有進一步的擴展。

          我們在 Web 應(yīng)用中處理來自客戶端的請求時,通常只考慮 GET 和 POST 這兩種 HTTP 請求方法。實際上,HTTP 還有 HEAD、PUT、DELETE 等請求方法。而在 REST 架構(gòu)中,用不同的 HTTP 請求方法來處理對資源的 CRUD(創(chuàng)建、讀取、更新和刪除)操作:

          • POST: 創(chuàng)建
          • GET: 讀取
          • PUT: 更新
          • DELETE: 刪除

          經(jīng)過這樣的一番擴展,我們對一個資源的 CRUD 操作就可以通過同一個 URI 完成了:

          http://www.example.com/photo/logo(讀取)
          仍然保持為 [GET] http://www.example.com/photo/logo

          http://www.example.com/photo/logo/create(創(chuàng)建)
          改為 [POST] http://www.example.com/photo/logo

          http://www.example.com/photo/logo/update(更新)
          改為 [PUT] http://www.example.com/photo/logo

          http://www.example.com/photo/logo/delete(刪除)
          改為 [DELETE] http://www.example.com/photo/logo

          從而進一步規(guī)范了資源標識的使用。

          通過 REST 架構(gòu),Web 應(yīng)用程序可以用一致的接口(URI)暴露資源給外部世界,并提供對資源的操作服務(wù)。這對于以資源為中心的 Web 應(yīng)用來說非常重要。例如照片共享網(wǎng)站、用戶社區(qū)等。

          —————————————

          Ruby On Rails 1.2 版對 REST 有很好的支持,但要在 PHP 中應(yīng)用 REST 還需要解決不少問題:

          • 如何在服務(wù)端判斷 PUT、DELETE 請求方法;
          • 如何獲取用 PUT、DELETE 請求方法中傳遞的數(shù)據(jù);
          • 如何獲取 HTTP 請求頭信息中的 Accept 參數(shù)值;
          • 如何在瀏覽器端發(fā)起 PUT 和 DELETE 請求。

          不過我仔細看了 PHP 文檔,我覺得上面幾個問題都是可以解決的。

          服務(wù)端綜合使用 $_SERVER[’HTTP_ACCEPT’]、$_SERVER[’REQUEST_URI’]、$_SERVER[’REQUEST_METHOD’]、$_SERVER[’QUERY_STRING’] 這些變量應(yīng)該可以搞定前面三個問題。而第四個問題則可以用 JavaScript 的 XMLHttpRequest 對象來實現(xiàn)。

          不過我想 REST 的真正價值在于 Web Services,而不是通過瀏覽器操作的應(yīng)用程序。

          —————————————

          參考:

          posted @ 2007-01-23 08:30 Alex 閱讀(452) | 評論 (0)編輯 收藏

          key words : web快速開發(fā)

          web快速開發(fā)是一個值得期待的東西,最早我接觸過codecharge,是一個商業(yè)軟件,功能據(jù)說很強大,我試用過,支持php,asp,jsp等多語言,但是感覺對java的支持不是很順手,接著就是asp,這個好也不好,原因就不說了,因為我對java關(guān)注。

          2. 接著就是dorado ,剛看到的,感覺也不錯,有asp的風格,不過更適合j2ee的環(huán)境 ,這里是他們的在線演示demo,有興趣的可以看一下

          3. 最后,剛google了一下,Oracle也有一個基于Oracle數(shù)據(jù)庫的快速開發(fā)產(chǎn)品? : APEX,基于瀏覽器做DB 開發(fā),原來的名字叫做HTML DB,名字很直觀,據(jù)說Oracle的metalink就是用這個實現(xiàn)的,應(yīng)該功能不賴。

          4.對了,再補充一個現(xiàn)在很熱的,Ror,聽說javaeye的網(wǎng)站要重新用ruby1.2開發(fā),試用過一點,感覺確實令人震驚,值得關(guān)注。

          java的技術(shù)其實是看著很熱鬧,比較大的東西也不少,但是真正關(guān)注web這一塊的其實不多,無論是struts還是webwork,離我們所說的真正的“快速開發(fā)”的距離很遠,而以上一些工具的出現(xiàn)也許會逐步改善j2ee在這一領(lǐng)域的現(xiàn)狀。

          我之所以對這個目前有點興趣,確實有一種強烈的反差在折磨著我,因為我相信在j2ee的web開發(fā)里確實存在本來要開發(fā)1周多的工作量很可能用一個好的工具幾個小時就搞定了,這是一件多么荒唐搞笑的事情?如果dorado在它的產(chǎn)品中真的能做到這樣那我們的java開發(fā)那么坑吃坑吃的折騰個什么勁啊? 也許真的有奇跡,我寧愿相信有這樣的奇跡。

          大家有什么好的想法可以討論一下。
          posted @ 2007-01-20 22:56 Alex 閱讀(3786) | 評論 (7)編輯 收藏

          key words: powerdesign,power , design

          引言:
          發(fā)現(xiàn)powerdesign的文檔真的是不多,不過powerdesign還是很有用的,見到此類文檔就收藏下吧.

          轉(zhuǎn)自edeed

          ?附上一些使用pd11的心得:

          1、安裝PD v11.0版

          2、由pdm生成建表腳本時,字段超過15字符就發(fā)生錯誤(oracle)
          原因未知,解決辦法是打開PDM后,會出現(xiàn)Database的菜單欄,進入Database - Edit Current DBMS -script-objects-column-maxlen,把value值調(diào)大(原為30),比如改成60。出現(xiàn)表或者其它對象的長度也有這種錯誤的話都可以選擇對應(yīng)的objects照此種方法更改!
          或者使用下面的這種方法:
          生成建表腳本時會彈出Database generation提示框:把options - check model的小勾給去掉,就是不進行檢查(不推薦)!
          或者可以修改C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\DBMS\oracl9i2.xdb文件
          修改好后,再cdm轉(zhuǎn)為pdm時,選擇“Copy the DBMS definition in model”把把這個資源文件拷貝到模型中。

          3、生成的建表腳本中如何把對象的雙引號去掉?
          打開cdm的情況下,進入Tools-Model Options-Naming Convention,把Name和Code的標簽的Charcter case選項設(shè)置成Uppercase或者Lowercase,只要不是Mixed Case就行!
          或者選擇Database->Edit current database->Script->Sql->Format,有一項CaseSensitivityUsingQuote,它的 comment為“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否適用雙引號來規(guī)定標識符的大小寫,可以看到右邊的values默認值為“YES”,改為“No”即可!
          或者在打開pdm的情況下,進入Tools-Model Options-Naming Convention,把Name和Code的標簽的Charcter case選項設(shè)置成Uppercase就可以!

          4、建立一個表后,為何檢測出現(xiàn)Existence of index的警告
          A table should contain at least one column, one index, one key, and one reference.
          可以不檢查 Existence of index 這項,也就沒有這個警告錯誤了!
          意思是說沒有給表建立索引,而一個表一般至少要有一個索引,這是一個警告,不用管也沒有關(guān)系!

          5、創(chuàng)建一個表在修改字段的時候,一修改name的內(nèi)容,code也跟著變化,如何讓code不隨著name變化
          Name和Code 的右側(cè)都有一個按鈕“=”,如果需要不同步的話,把這個按鈕彈起來就可以了。
          Tools->General Options->Dialog->Name to Code Mirroring (去掉)

          6、由CDM生成PDM時,自動生成的外鍵的重命名
          PDM Generation Options->Detail->FK index names默認是%REFR%_FK,改為FK_%REFRCODE%,其中%REFRCODE%指的就是CDM中Relationship的code!另外自動生成的父字段的規(guī)則是PDM Generation Options->Detail->FK column name template中設(shè)置的,默認是%.3:PARENT%_%COLUMN%,可以改為Par%COLUMN%表示是父字段!

          7、如何防止一對一的關(guān)系生成兩個引用(外鍵)
          要定義關(guān)系的支配方向,占支配地位的實體(有D標志)變?yōu)楦副怼?br />在cdm中雙擊一對一關(guān)系->Detail->Dominant role選擇支配關(guān)系

          8、修改報表模板中一些術(shù)語的定義
          即文件:C:\Program Files\Sybase\PowerDesigner Trial 11\Resource Files\Report Languages\Chinese.xrl
          Tools-Resources-Report Languages-選擇Chinese-單擊Properties或雙擊目標
          修改某些對象的名稱:Object Attributes\Physical Data Model\Column\
          ??????? ForeignKey:外鍵
          ??????? Mandatory:為空
          ??????? Primary:主鍵
          ??????? Table:表
          用查找替換,把“表格”替換成“表”
          修改顯示的內(nèi)容為別的:Values Mapping\Lists\Standard,添加TRUE的轉(zhuǎn)化列為是,F(xiàn)ALSE的轉(zhuǎn)化列為空
          另外Report-Title Page里可以設(shè)置標題信息
          posted @ 2007-01-17 09:55 Alex 閱讀(3167) | 評論 (3)編輯 收藏

          key words : beanShell ,動態(tài)腳本

          原來第一次是在osworkflow中聽說過beanShell,最近又碰到,感覺還是挺有用的,比如對于我來說我就想有一些class文件拿過來直接調(diào)用看看,但有不想搭建一個麻煩的環(huán)境,而beanshell就可以滿足我這個需求。

          假設(shè)我欲調(diào)用的java為MyShit
          package?com.app;

          public?class?MyShit
          {
          ????
          static{
          ????????System.out.println(
          "this?is?in?static?blog");
          ????}

          ????
          public?static?void?main(String[]?args){
          ????????System.out.println(
          "this?is?in?main?method?:?hello?shit");
          ????}

          ????
          public?void?shit(){
          ????????System.out.println(
          "hello?shit!!!");
          ????}


          ????
          public?static?void?haha(){
          ????????System.out.println(
          "this?is?static?method?haha");
          ????}

          }


          javac ...
          java ..

          在dos中設(shè)置classpath,指向該class文件

          set classpath=%classpath%;c:\beanshell

          編寫一個 bsh的bat文件,便于dos直接調(diào)用beanshell腳本
          ?
          java?bsh.Interpreter?%1


          編寫一個test.bsh腳本
          //mytest
          import?com.app.*;

          print(
          "hello,it's?a?beanShell?test");

          List?list??
          =?new?ArrayList();
          list.add(
          "111");
          list.add(
          "222");
          list.add(
          "333");

          print(
          "the?list?=?"?+?list);

          Date?date?
          =?new?Date();
          print(
          "the?date?=?"?+?date);

          //method?test

          add(?a,?b?)?
          {
          ????
          return?a?+?b;
          }


          foo?
          =?add(1,?2);????????????//?3
          print("foo?=?"?+?foo);
          foo?
          =?add("Oh",?"?baby");???//?"Oh?baby"
          print("foo?=?"?+?foo);

          //about?object
          foo()?{
          ????print(
          "foo");
          ????x
          =5;

          ????bar()?
          {
          ????????print(
          "foo's?method?bar()");
          ????}


          ????
          return?this;
          }


          myfoo?
          =?foo();????//?prints?"foo"
          print(?myfoo.x?);?//?prints?"5"
          myfoo.bar();??????//?prints?"bar"

          MyShit?shit?
          =?new?MyShit();
          shit.shit();
          shit.main(
          null);
          print(
          "do?you?shit");

          //MyShit.haha();


          在dos下運行 bsh test.bsh就OK了

          另外,beanshell作為動態(tài)腳本語言可以結(jié)合 spring2.0的新特性,你新寫的業(yè)務(wù)類可以直接修改而不用重新發(fā)布,怎么樣,是不是比較方便,詳細操作請參考Springframework 2.0 與 ZK 混合開發(fā)實例

          試一試!

          詳細使用請參考官方文檔
          posted @ 2007-01-09 20:01 Alex 閱讀(6522) | 評論 (7)編輯 收藏

          key words: 連接池 數(shù)據(jù)庫

          發(fā)現(xiàn)一個有意思的現(xiàn)象,好多人在開發(fā)過程中不知道是出于訓練自己編碼還是為了重新發(fā)明輪子,總之明明已經(jīng)存在的功能他非要自己實現(xiàn)一遍。

          今天又碰到一個。

          jdbc的連接,好多人也喜歡自己實現(xiàn)一個連接池,但是對于app server來說本身一般都有支持連接池的,為什么不用呢?
          寫了一通又長又臭的代碼,自己以為牛B的很,其實算個球啊。

          不要浪費,不要自己發(fā)明輪子,你不是最牛的,一定還有比你更牛的!

          對于weblogic或者oracle以及ibm的產(chǎn)品來說,大家還是比較習慣于用容器的jndi,但是即使對于tomcat,我個人也建議用tomcat自帶的。

          附: jndi連接數(shù)據(jù)庫

          public?final?static?synchronized?Connection?getConnection(String?inputJNDI)?throws
          ??????DBMException?
          {
          ????Connection?conn?
          =?null;
          ????String?strConnJNDI?
          =?null;
          ????
          try?{
          ??????Context?ctx?
          =?new?InitialContext();
          ??????_log.debug(ctx);

          ??????
          if?(null?!=?inputJNDI)?{
          ????????
          if(inputJNDI.length()?>?0)
          ??????????strConnJNDI?
          =?inputJNDI;
          ????????
          else
          ??????????strConnJNDI?
          =?dbJndiName;
          ??????}

          ??????
          else?{
          ????????strConnJNDI?
          =?dbJndiName;
          ??????}

          ??????DataSource?ds?
          =?(DataSource)?ctx.lookup(strConnJNDI);
          ??????_log.debug(ds);
          ??????conn?
          =?ds.getConnection();
          ????}

          ????
          catch?(Exception?ex)?{
          ??????_log.error(
          "It's?error?to?get?connection",?ex);
          ??????
          throw?new?DBMException("Error?to?get?connection");
          ????}

          ????_log.debug(conn);
          ????
          return?conn;
          ??}


          以此類推,類似于xml解析等的工作也沒有必要自己一步一步地用dom或者什么亂七八糟的sax自己去搞一遍,搞了半天就使為了得到其中的一個value,何苦來著???? 如果你不是為了做研究,那么,效率第一,安全第一.

          隨便說說,也許有人不同意我的觀點,沒關(guān)系,盡管談?wù)劊? :)
          posted @ 2007-01-04 20:58 Alex 閱讀(1951) | 評論 (8)編輯 收藏

          key words: 2007 plans

          新的一年開始了,制定一個計劃吧

          說說你有什么計劃

          如圖:

          2007-plans.png
          posted @ 2007-01-03 23:31 Alex 閱讀(1508) | 評論 (12)編輯 收藏

          key words: tomcat,數(shù)據(jù)源配置,datasource

          把一個應(yīng)用從4.1移到5.5數(shù)據(jù)源死活不出來,用probe察看了一下居然datasource配置錯誤.

          4.x的配置如下:

          <Context?path="/cpms"?docBase="cpms"???debug="99"?privileged="true">
          ????????????
          <Resource?name="jdbc/report"?auth="Container"?type="javax.sql.DataSource"/>
          ????????????
          <ResourceParams?name="jdbc/report">?
          ????????????????
          <parameter>
          ????????????????????
          <name>username</name>
          ????????????????????
          <value>root</value>
          ????????????????
          </parameter>
          ????????????????
          <parameter>
          ????????????????????
          <name>password</name>
          ????????????????????
          <value>XXX</value>
          ????????????????
          </parameter>
          ????????????????
          <parameter>
          ????????????????????
          <name>driverClassName</name>?
          ????????????????????
          <value>org.gjt.mm.mysql.Driver</value>
          ????????????????
          </parameter>
          ????????????????
          <parameter>
          ????????????????????
          <name>url</name>?
          ????????????????????
          <value>jdbc:mysql://localhost/app</value>
          ????????????????
          </parameter>?
          ????????????????
          <parameter>
          ??????????
          <name>RemoveAbandoned</name>
          ??????????
          <value>true</value>
          ????????
          </parameter>
          ????????
          <parameter>
          ??????????
          <name>LogAbandoned</name>
          ??????????
          <value>true</value>
          ????????
          </parameter>
          ????????
          <parameter>
          ??????????
          <name>RemoveAbandonedTimeout</name>
          ??????????
          <value>60</value>
          ????????
          </parameter>
          ??????????????
          </ResourceParams>?
          ????
          </Context>??


          5.x的配置如下:

          <Context?path="/app"?docBase="cpms"
          ????????debug
          ="5"?reloadable="true"?crossContext="true">



          ??
          <Resource?name="jdbc/report"?auth="Container"?type="javax.sql.DataSource"
          ???????????????maxActive
          ="100"?maxIdle="30"?maxWait="10000"
          ???????????????username
          ="develop"?password="XX"?driverClassName="com.mysql.jdbc.Driver"
          ???????????????url
          ="jdbc:mysql://localhost:3306/app?autoReconnect=true"/>
          </Context>


          沒有具體看原因.知道的兄弟可以發(fā)表高見

          tomcat的管理和監(jiān)控推薦用probe,自帶的那個admin管理太濫了。

          posted @ 2006-12-22 12:04 Alex 閱讀(1726) | 評論 (1)編輯 收藏

          key words: sql server,單用戶,master恢復

          ?作者:jankie
          日期:2006-12-1

          一、MASTER數(shù)據(jù)庫備份與恢復
          ? ?1、數(shù)據(jù)庫master正常情況下對master進行(完全)備份;
          若要恢復:
          ? ?2、停止SQL Server服務(wù);
          ? ?3、以單用戶實例的方式啟動SQL Server,啟動時不要把窗口關(guān)閉;(具體看二)
          ? ?4、然后再對MASTE數(shù)據(jù)庫進行恢復即可;

          二、MSSQL單用戶實例的啟動方法:
          ??如何在單用戶模式下啟動SQL Server的命名實例(命令提示符)? ?
          ??在單用戶模式下從命令提示符啟動SQL Server 的命名實例? ???
          ??從命令提示符輸入:? ???
          ??sqlservr.exe -c??-m? ?-s? ?{instancename}? ?

          例1:
          ??1、sqlserver.exe -c -m 回車(默認實例)
          ??2、sqlserver.exe -c -m -s benet (實例名為benet)
          ? ?
          ??說明在啟動 sqlservr.exe之前,必須在命令窗口中切換到適當?shù)哪夸?br />如:c:\program files\microsoft sql server\mssql\bin目錄下
          posted @ 2006-12-21 15:08 Alex 閱讀(509) | 評論 (0)編輯 收藏

          key words: dll,ocx,注冊控件

          最近項目中用到了收銀,需要在顧顯上顯示金額.


          1.將.dll、.ocx等考到system32下。
          2.用命令注冊regsvr32.exe? .dll。(eg:regsvr32.exe? OWC11.dll)
          3.在注冊表中查看:利用名稱或與其唯一對應(yīng)的clsid("clsid:0002E55D-0000-0000-C000-???000000000046")可查找到相關(guān)信息
          posted @ 2006-12-20 15:13 Alex 閱讀(703) | 評論 (0)編輯 收藏

               摘要: key words: bea world2006 ,workshop studio, 快速開發(fā)

          bea world 2006 北京已經(jīng)過去好幾天了,早就想記錄一下一直忙 :)
            閱讀全文
          posted @ 2006-12-20 11:39 Alex 閱讀(2672) | 評論 (10)編輯 收藏

          key words: commons log,log4j,apache log

          前言: 對于log4j雖然在用,但是也存在一個疑問,怎么有的用apache的commons logging有的直接用log4j,下面的這篇文章解釋了我的疑問.

          轉(zhuǎn)自 here

          Apache組織開發(fā)了一套用于支持Logging的Log4J,Java?1.4版本也引入了一套內(nèi)置的 Logging框架,如果開發(fā)者想在這兩套Logging系統(tǒng)之間自由的切換,該怎么辦呢?答案就是,使用Commons?Logging。 Commons?Logging定義了一套抽象的Logging接口,用戶可以通過配置,使這些接口指向任何一個已存在的Logging系統(tǒng)。

          ?使用抽象Logging接口
          問題:
          你在編寫一個可以重復使用的庫,需要寫入Log信息,但你不想使你的Logging功能綁定在Apache?Log4J或者JDK?1.4?Logging框架上。
          解決方案:

          public?static?void?main(String[]?args)?{//自己替換[]

          ??System.setProperty("org.apache.commons.logging.Log",
          ??????"org.apache.commons.logging.impl.Jdk14Logger");
          ??Log?log?=?LogFactory.getLog("com.discursive.jccook.SomeApp");

          ??if?(log.isTraceEnabled())?{
          ????log.trace("This?is?a?trace?message");
          ??}

          ??if?(log.isDebugEnabled())?{
          ????log.debug("This?is?a?debug?message");
          ??}

          ??log.info("This?is?an?informational?message");
          ??log.warn("This?is?a?warning");
          ??log.error("This?is?an?error");
          ??log.fatal("This?is?fatal");

          }


          LogFactory.getLog方法會根據(jù)底層環(huán)境返回一個適當?shù)腖og實現(xiàn)。如果用戶想指定一個具體的Logging系統(tǒng)實現(xiàn),可以設(shè)置org.apache.commons.logging.Log系統(tǒng)屬性。例如:
          System.setProperty("org.apache.commons.logging.Log",
          "org.apache.commons.logging.impl.Log4JLogger");
          這樣就會使用Log4J作為Logging系統(tǒng)。
          org.apache.commons.logging.Log可以設(shè)定為:
          ?org.apache.commons.logging.impl.Log4JLogger??使用Log4J
          ?org.apache.commons.logging.impl.Jdk14Logger??使用JDK?1.4?Logging框架
          ?org.apache.commons.logging.impl.SimpleLog??使用Commons?Logging內(nèi)置的簡單Log實現(xiàn)
          其他:
          總結(jié)一下,Commons?Logging會按照下列順序來指定具體的Log實現(xiàn)。
          ?如果定義了org.apache.commons.logging.Log系統(tǒng)參數(shù),實用指定的Logging實現(xiàn)。
          ?如果在CLASSPATH里發(fā)現(xiàn)了Log4J,使用Log4J。
          ?如果使用的是JDK1.4,使用JDK1.4內(nèi)置的Logging框架。
          ?如果都沒有找到,則使用Commons?Logging內(nèi)置的簡單Log實現(xiàn)。
          posted @ 2006-12-18 15:38 Alex 閱讀(717) | 評論 (0)編輯 收藏

          key words : 職業(yè)規(guī)劃? 高薪

          原文見robbin的pdf,我整理了一下腦圖

          職業(yè)規(guī)劃與高薪之路.png
          posted @ 2006-12-17 13:25 Alex 閱讀(3458) | 評論 (6)編輯 收藏

          注意:這篇文章是由無人工介入的自動的機器翻譯系統(tǒng)翻譯完成。這些文章是微軟為不懂英語的用戶提供的, 以使他們能夠理解這些文章的內(nèi)容。微軟不保證機器翻譯的正確度,也不對由于內(nèi)容的誤譯或者客戶對它的使用所引起的任何直接的, 或間接的可能的問題負責。

          概要

          Microsoft SQL Server 2000 支持同一計算機上同時運行的多個 SQLServer 數(shù)據(jù)庫引擎實例。 以下是兩種類型的 SQLServer 數(shù)據(jù)庫引擎實例: 默認和命名。 只能有, 任何計算機上運行一個默認實例并且由默認實例運行計算機上的名稱標識它。 通常指定以下列格式: 計算機名和實例名稱
          computer_name\instance_name
          要 MicrosoftSQLServer2000JDBC, 連接命名實例通過 SQL 服務(wù)器 2000 MicrosoftTextDriver 必須指定端口號與命名實例, 代替的命名實例名稱相關(guān)聯(lián)如前面。

          更多信息

          要查找 SQLServer 實例端口號, 請按照下列步驟:
          1.在 Microsoft SQL Server 2000 服務(wù)器, 啟動 SQL Server 網(wǎng)絡(luò)實用工具。
          2.要從 實例 下拉菜單實例依次, 常規(guī) 選項卡。
          3.TCP/IP, 依次 屬性 。 注意, 在 屬性 對話框中出現(xiàn)端口號為此實例。

          當您連接到 SQLServer 通過 JDBC 連接 URL 中使用只要有該值,。 下面是典型連接 URL 的示例:

          jdbc:microsoft:sqlserver: / 1433; yourServerName / 用戶 = yourUser ; 密碼 = yourPwd :
          在本示例, 使用默認端口是 1433。 將此默認替換端口號為您命名實例。
          posted @ 2006-12-17 00:35 Alex 閱讀(1243) | 評論 (0)編輯 收藏

          key words: jsp,jstl,1.0,1.1,fn函數(shù)

          原來一直用struts,最近項目里有人用jstl,我也就順便拿來用,感覺還是不錯。

          過程中碰到一些小的問題總結(jié)如下:

          一。版本問題
          jstl存在1.0和1.1的差異問題,用EL建議需要在1.1的版本下,1.1的URI的標志為:
          <%@?taglib?uri="http://java.sun.com/jsp/jstl/core"?prefix="c"%>
          <%@?taglib?uri="http://java.sun.com/jsp/jstl/functions"?prefix="fn"%>

          注意,1.0版本沒有/jsp/.

          如果用的1.0會出現(xiàn)如下異常
          org.apache.jasper.JasperException:?/public/left_tree.jsp(100,24)?According?to?TLD?or?attribute?directive?in?tag?file,?attribute?items?does?not?accept?any?expressions
          ????org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:
          510)
          ????org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:
          375)
          ????org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:
          314)
          ????org.apache.jasper.servlet.JspServlet.service(JspServlet.java:
          264)
          ????javax.servlet.http.HttpServlet.service(HttpServlet.java:
          802)
          ????org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:
          75)
          ????org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:
          77)
          ????com.wellsoon.zfzw.webapp.common.VabAccessFilter.doFilter(VabAccessFilter.java:
          43)


          root?cause?



          二。打開EL

          <%@?page?contentType="text/html;charset=gb2312"?language="java"?isELIgnored="false"?%>

          前提是容器支持2.0,即使支持默認也未必打開,最安全的方式就是顯示打開 isELIgnored="false"

          三.fn的用法
          對于Vo里的一個List作length的計算或判斷很方便
          <table?width="160"?border="0"?cellspacing="0"?cellpadding="4">
          ????????????????????????
          <c:forEach?items="${menuInfos}"?var="m">
          ????????????????????????????
          <c:if?test="${fn:length(m.subMenus)>0}">
          ??????????????????????????
          <tr>
          ????????????????????????????
          <td>
          ????????????????????????????????
          <script?language="JavaScript">
          ??????????????????????????????????????
          var?tObj?=?new?treeClass("A1")
          ??????????????????????????????????????tObj.start();
          ?????????????????????????????????????tObj.m_start(
          "<c:out?value="${m.menuModule}"/>",0);
          ????????????????????????????????????
          <c:forEach?items="${m.subMenus}"?var="sub">
          ??????????????????????????????????????tObj.add_Sub(
          "<c:out?value="${sub.menuName}"/>","<%=path%>
          <c:out?value=
          "${sub.url}"/>","mymain");
          ????????????????????????????????????
          </c:forEach>
          ?????????????????????????????????????tObj.m_end();
          ??????????????????????????????????????tObj.end();
          ??????????????????????????????????????tObj.print();
          ?????????????????????????????????
          </script>
          ????????????????????????????
          </td>
          ????????????????????????
          </tr>
          ????????????????????????????
          </c:if>
          ????????????????????????
          </c:forEach>

          ????????????????????
          </table>
          ?
          四.tld的聲明可以在web.xml作顯式聲明也可以用http作直接URL聲明
          推薦用本地的方式.

          posted @ 2006-12-11 19:21 Alex 閱讀(2808) | 評論 (2)編輯 收藏

          key words: MiddleGen,hibernate,many to many,多對多

          如果你有如下表結(jié)構(gòu)

          user(user_id,user_name)
          role(role_id,role_name)

          user_role(id,user_id,role_id)

          那么默認MiddleGen生成的是兩個一對多,但我們更多的情況是用many to many

          需要修改middlegen的build.xml文件

          <many2many>
          ????????????
          <tablea?generate="true"?name="user"/>
          ????????????
          <jointable?name="user_role"?generate="false"/>
          ????????????
          <tableb?generate="true"?name="role"/>
          ?????????
          </many2many>

          posted @ 2006-12-07 20:26 Alex 閱讀(911) | 評論 (0)編輯 收藏

          僅列出標題
          共15頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 临安市| 南郑县| 博乐市| 惠州市| 叶城县| 伊川县| 高密市| 肇东市| 武清区| 乐平市| 察雅县| 壤塘县| 东乌珠穆沁旗| 西贡区| 香港| 大安市| 根河市| 如皋市| 江源县| 秦皇岛市| 咸丰县| 永城市| 临沂市| 阜阳市| 治多县| 新竹县| 香港 | 大港区| 张家界市| 册亨县| 上饶市| 滨州市| 二连浩特市| 元江| 宜昌市| 平凉市| 兴仁县| 康平县| 霞浦县| 长沙市| 香格里拉县|