JAVA日志

          JAVA日志

           

          2007年5月8日

          請大家?guī)兔?關(guān)于異常:org.springframework.transaction.TransactionSystemException

               摘要: 最近在項目中間遇到一個棘手的問題,希望有經(jīng)驗的朋友能幫幫小弟,感激不盡。 具體問題是:在工程部署到tomcat,然后啟動tamcat,登錄工程,無任何問題,但是問題出在大概一個小時以后,重新訪問工程,登錄時拋出如下異常:  1Exception Type: org.springframework.transaction.TransactionSystemExc...  閱讀全文

          posted @ 2007-12-15 11:54 小木 閱讀(19228) | 評論 (4)編輯 收藏

          JS之OOP

          在寫面向?qū)ο蟮腤EB應用程序方面JavaSciprt是一種很好的選擇.它能支持OOP.因為它通過原型支持繼承的方式和通過屬性和方法的方式一樣好.很多開發(fā)者試圖拋棄JS,試著用C#或JAVA僅是因為JS不是他認為合適的面向?qū)ο蟮恼Z言.許多人還沒有認識到javascript支持繼承.當你寫面向?qū)ο蟮拇a時.它能給你很強大的能量.你也可以使用它寫出可復用,可封裝的代碼.

          對象為何如此偉大?
              面向?qū)ο笏枷氲某晒κ怯捎谒抡樟爽F(xiàn)實中的事物和事物的聯(lián)系.事物有屬性和方法.如果我們描述一個臺燈.我們會說它的高度和寬度,比如12CM."開燈"這個動作是它的方法.當它是處于開著的狀態(tài)時.它可以被調(diào)亮一點或暗一點(也就是亮度這個屬性值變大或變小).
             
          javascript 給予了為WEB應用程序創(chuàng)建對象的能力.對象在需要的時候相應的事件會被觸發(fā),代碼封裝后,它能被實例化很多次.在javascript里有幾種創(chuàng)建對象的方法,在不同的場合可用不同的方法

          1.1JS創(chuàng)建對象方式之一用 new Object() 來創(chuàng)建對象

          .最簡單的就是用new 操作符,例如:
          <script language="javascript" type="text/javascript">
          person = new Object()
          person.name = "Tim Scarfe"
          person.height = "6Ft"
          person.run = function() {
                 this.state = "running"
                 this.speed = "4ms^-1"
          }
          </script>
          我們在這個例子里定義了person這個對象,然后加入了它的屬性和方法.在這個例子里,自定義的方法里有兩個屬性.

          1.2.用文字記號Literal Notation創(chuàng)建對象
          用文字記號也可以創(chuàng)建對象,但要javascript 1.2以上版本.它的創(chuàng)建形式是多樣的.
          <script language="javascript" type="text/javascript">
          // Object Literals
          timObject = {
                property1 : "Hello",
                property2 : "MmmMMm",
                property3 : ["mmm", 2, 3, 6, "kkk"],
                method1 : function(){
                   alert("Method had been called" + this.property1)
                 }
          };
          timObject.method1();
          alert(timObject.property3[2]) // 結(jié)果為3

          var circle = { x : 0, y : 0, radius: 2 } // another example
          // 嵌套也是允許的哦.
          var rectangle = {
                    upperLeft : { x : 2, y : 2 },
                   lowerRight : { x : 4, y : 4}
          }
          alert(rectangle.upperLeft.x) // 結(jié)果為2
          </script>
          文字記號可是是數(shù)組,也可以是任意的javascript表達式或值.
          用 new 操作符或文字記號創(chuàng)建一個自定義對象都是簡單的,也是符合邏輯的.但它最大的缺點就是結(jié)果不可復用.也不能很容易的用不同的版本初始化創(chuàng)建對象.例如上面的第一個例子,如果 person 的 name 不是 "Tim Scarfe",那樣我們不得不重新定義整個對象,僅僅為了適應它的一點點改變.

          1.3.對象的構(gòu)造和原型
             在OOP的世界里,用先前的方法定義對象在許多場合都有限制.我們需要一種創(chuàng)建對象的方法,類型可以被多次使用而不用重新定義.對象在實例化時每次都可以按需分配不同的值.實現(xiàn)這個目標的標準方法是用對象構(gòu)造器函數(shù).

             一個對象構(gòu)造器只不過是個有規(guī)則的javascript函數(shù),它就象一個容器(定義參數(shù),調(diào)用其他函數(shù)等等).它們兩者所不同的是構(gòu)造器函數(shù)是由 new 操作符調(diào)用的.(你將在下面的例子中看到).基于函數(shù)語法形式的對象定義,我們可以使它工作得最好.

          讓我們用現(xiàn)實世界中的貓來舉個例子.貓的 name 和 color 是貓的屬性.meeyow(貓叫)是它的一個方法.重要的是任何不同的貓都可能有不同的 name 和 meeyow 的叫聲.為了建立適應這些特征的對象類,我們將使用對象構(gòu)造器.
          <script language="javascript" type="text/javascript">
          function cat(name) {
                 this.name = name; 
                 this.talk = function() {
                        alert( this.name + " say meeow!" )
                 }
          }
          cat1 = new cat("felix")
          cat1.talk() //alerts "felix says meeow!"
          cat2 = new cat("ginger")
          cat2.talk() //alerts "ginger says meeow!"
          </script>
          在這里,函數(shù) cat() 是一個對象構(gòu)造器,它的屬性和方法在函數(shù)體里用this來定義,用對象構(gòu)造器定義的對象用 new 來實例化.主意我們?nèi)绾畏浅H菀椎亩x多個cat 的實例.每一個都有自己的名字,這就是對象構(gòu)造器帶給我們的靈活性.
          構(gòu)造器建立了對象的藍圖.并不是對象本身.

          在原型里增加方法.
          在上面我們看到的例子里,對象的方法是在構(gòu)造器里定義好的了.另外一種實現(xiàn)的途徑是通過原型(prototype).xxx
          原型是javascript繼承的一種形式.我們可以為對象定義好后,再創(chuàng)造一個方法.原來所有對象的實例都將共享.
          讓我們來擴展最初的 cat 對象.增加一個改名的方法.用 prototype 的方式.
          <script language="javascript" type="text/javascript">

          cat.prototype.changeName = function(name) {
                    this.name = name;
          }
          firstCat = new cat("pursur")
          firstCat.changeName("Bill")
          firstCat.talk() //alerts "Bill says meeow!"
          </script>
          就象你所看到的.我們僅只用了 關(guān)鍵字 prototype 實現(xiàn)了在對象定義后馬上增加了changeName方法.這個方法被所有的實例共享.

          用原型(prototype) 重載 javascript 對象
          原型 在自定義對象和有選擇性的重載對象上都可以工作.比如 Date() 或 String .這可能是無止境的.

          1.4.子類和超類
          下面一個例子演示了如何繼承
          <script language="javascript" type="text/javascript">
          function superClass() {
                   this.supertest = superTestMethod; //attach method superTest
          }

          function superTestMethod() {
                   return "superTest";
          }

          function subClass() {
                   this.inheritFrom = superClass;
                   this.inheritFrom();
                   this.subtest = subTestMethod; //attach method subTest
          }

          function subTestMethod() {
                  return "subTest";
          }

          var newClass = new subClass();
          alert(newClass.subtest()); // 彈出"subTest"
          alert(newClass.supertest()); // 彈出 "superTest"
          </script>
          1.5.訪問對象屬性
          正如你所知, (.)操作符能夠用來操作對象屬性和方法,而([]) 操作符用來操作數(shù)組.
          <script language="javascript" type="text/javascript">
          // 這兩種用法是相同的
          object.property
          object["property"]
          </script>
          <script language="javascript">
          function Circle (xPoint, yPoint, radius) {
                 this.x = xPoint;
                 this.y = yPoint;
                 this.r = radius;
          }
          var aCircle = new Circle(5, 11, 99);
          alert(aCircle.x);
          alert(aCircle["x"]);
          </script>
          我們可以通過for in循環(huán)來遍歷對象的屬性。
          <script language="javascript" type="text/javascript">
          var testObj = {
                prop1 : "hello",
                prop2 : "hello2",
                prop3 : new Array("hello",1,2)
          }
          for(x in testObj) {
               alert( x + "-" + testObj[ x ] )
          }
          </script>
          <script language="javascript">
          var Circle = { // another example
                 x : 0,
                 y : 1,
                radius: 2
          }

          for(p in Circle) {
                 alert( p + "-" + Circle[ p ] )
          }
          </script>

          posted @ 2007-09-18 11:02 小木 閱讀(1695) | 評論 (1)編輯 收藏

          在使用displaytag出現(xiàn)的錯誤! 忘大家?guī)兔鉀Q!

          在使用displaytag出現(xiàn)這個異常  很久都沒有解決!

          Failed to load or instantiate TagExtraInfo class: org.displaytag.tags.TableTagExtraInfo 

          posted @ 2007-08-29 22:12 小木 閱讀(916) | 評論 (0)編輯 收藏

          求助高手

           請問哪位大俠做過一個Web IM,如果有例子務必給小弟借鑒一下,謝謝!

          posted @ 2007-06-05 11:13 小木 閱讀(777) | 評論 (1)編輯 收藏

          請教高手

          為什么我在使用SSH(struts+spring+hibernate)構(gòu)建一個J2EE時為什么會時常出現(xiàn)這種錯誤:


          請哪位知道的高手務必指導一下小弟,謝謝!

          posted @ 2007-05-21 16:04 小木 閱讀(986) | 評論 (12)編輯 收藏

          Hibernate中實體對象的生命周期

          實體對象的生命周期在Hibernate應用中是一個很關(guān)鍵的概念,正確的理解實體對象的生命周期將對我們應用Hibernate做持久層設計起到很大的作用.而所謂的實體對象的生命周期就是指實體對象由產(chǎn)生到被GC回收的一段過程.在這過程中我們需要理解的就是實體對象生命周期中的三種狀態(tài).

          1.自由狀態(tài)(Transient)
          所謂的Transient狀態(tài),即實體對象在內(nèi)存中自由存在,與數(shù)據(jù)庫中的記錄無關(guān),通常是我們的J2EE中VO,并沒有被納入Hibernate的實體管理容器.

          1    Test test = new Test();
          2        test.setName("energykk");
          3        //此時的test對象處于Transient(自由狀態(tài))并沒有被Hibernate框架所管理
          4        

          2.持久狀態(tài)(Persistent)
          何謂 Persistent? 即實體對象已經(jīng)處于被Hibernate實體管理容器容器所管理的狀態(tài).這種狀態(tài)下這個實體對象的引用將被納入Hibernate實體管理容器容器所管理.
          處于Persistent狀態(tài)的實體對象,對它的變更也將被固化到數(shù)據(jù)庫中.
          在J2EE中通常指的是一個PO.
          Transaction tr = session.beginTransaction();
                  session.save(test);
                  
          //此時的test對象已經(jīng)處于Persistent(持久狀態(tài))它被Hibernate納入實體管理容器
                  tr.commit();
                  Transaction tr2 
          = session.beginTransaction();
                  test.setName(
          "xukai");
                  
          //在這個事務中我們并沒有顯示的調(diào)用save()方法但是由于Persistent狀態(tài)的對象將會自動的固化到
                  
          //數(shù)據(jù)庫中,因此此時正處在Persistent狀態(tài)的test對象的變化也將自動被同步到數(shù)據(jù)庫中
                  tr2.commit();

          處于Persistent狀態(tài)的實體可以簡單的理解為:如果一個實體對象與session發(fā)生了關(guān)聯(lián),并且處于session的有效期內(nèi),那么這個實體對象就處于Persistent狀態(tài).

          3.游離狀態(tài)(Detached)
          處于Persistent狀態(tài)的實體對象,其對應的session關(guān)閉以后,那么這個實體就處于Detached狀態(tài).
          我們可以認為session對象就是一個Persistent的宿主,一旦這個宿主失效,那么這個實體就處于Detached狀態(tài).

          session.close();
                  
          //與test對象關(guān)聯(lián)的session被關(guān)閉,因此此時的test對象進入Detached(游離狀態(tài))
                  
                  session2 
          = HibernateSessionFactory.getSession();
                  Transaction tr3 
          = session2.beginTransaction();
                  session2.update(test);
                  
          //此時正處于Detached狀態(tài)的test對象由于再次借助與session2被納入到Hibernate的實體管理容器所以此時的
                  
          //test對象恢復到Persistent狀態(tài)
                  test.setName("jjjj");
                  tr3.commit();
                  
                  session2.close();

          既然Transient狀態(tài)的實體與Detached狀態(tài)的實體都與Hibernate的實體管理容器沒有關(guān)系,那他們到底存在哪些差異?
          差異就在于處于Transient狀態(tài)的只有一個Name的屬性.此時的test對象所包含的數(shù)據(jù)信息僅限于此,他與數(shù)據(jù)庫中的記錄沒有任何瓜葛.
          但是處于Detached狀態(tài)的實體已經(jīng)不止包含Name這個屬性,還被賦予了主鍵也就是通常POJO里的id屬性,由于id是主鍵,他可以確定數(shù)據(jù)庫表中的一條
          唯一的記錄,那么自然的處于Detached狀態(tài)的實體就能與數(shù)據(jù)庫表中擁有相同id的記錄相關(guān)聯(lián).
          這就是他們之間所存在的差異,簡而言之,Transient狀態(tài)的實體缺乏與數(shù)據(jù)庫表記錄之間的聯(lián)系,而Detached狀態(tài)的試題恰恰相反.只不過是脫離了session這個數(shù)據(jù)庫操作平臺而已.

          posted @ 2007-05-08 14:02 小木 閱讀(3206) | 評論 (0)編輯 收藏

          導航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          隨筆檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大安市| 西林县| 临邑县| 类乌齐县| 武功县| 三门峡市| 资阳市| 龙胜| 涡阳县| 清远市| 勐海县| 山阳县| 西乡县| 施甸县| 石泉县| 泸溪县| 泗阳县| 马边| 麦盖提县| 罗平县| 社会| 合川市| 吉林省| 新巴尔虎左旗| 舒兰市| 马龙县| 马鞍山市| 银川市| 天长市| 色达县| 都兰县| 光泽县| 西充县| 滦南县| 建宁县| 东明县| 鹤壁市| 内黄县| 仙游县| 海伦市| 烟台市|