posts - 165, comments - 198, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          引用
          http://blog.joycode.com/joe/archive/2005/09/06/63068.aspx
          http://www.itlearner.com/article/2006/3325.shtml


          使用方法:js


          //獲得Cookie解碼后的值
          function?GetCookieVal(offset){
          ????
          var?endstr?=?document.cookie.indexOf?(";",?offset);
          ????
          if?(endstr?==?-1)
          ????endstr?
          =?document.cookie.length;
          ????
          return?unescape(document.cookie.substring(offset,?endstr));
          }

          //設定Cookie值
          function?SetCookie(name,?value){
          ????
          var?expdate?=?new?Date();
          ????
          var?argv?=?SetCookie.arguments;
          ????
          var?argc?=?SetCookie.arguments.length;
          ????
          var?expires?=?(argc?>?2)???argv[2]?:?null;
          ????
          var?path?=?(argc?>?3)???argv[3]?:?null;
          ????
          var?domain?=?(argc?>?4)???argv[4]?:?null;
          ????
          var?secure?=?(argc?>?5)???argv[5]?:?false;
          ????
          if(expires!=null)?expdate.setTime(expdate.getTime()?+?(?expires?*?1000?));
          ????document.cookie?
          =?name?+?"="?+?escape?(value)?+((expires?==?null)???""?:?(";?expires="+?expdate.toGMTString()))
          ????
          +((path?==?null)???""?:?(";?path="?+?path))?+((domain?==?null)???""?:?(";?domain="?+?domain))
          ????
          +((secure?==?true)???";?secure"?:?"");
          }

          //刪除Cookie
          function?DelCookie(name){
          ????
          var?exp?=?new?Date();
          ????exp.setTime?(exp.getTime()?
          -?1);
          ????
          var?cval?=?GetCookie?(name);
          ????document.cookie?
          =?name?+?"="?+?cval?+?";?expires="+?exp.toGMTString();
          }

          //獲得Cookie的原始值
          function?GetCookie(name){
          ????
          var?arg?=?name?+?"=";
          ????
          var?alen?=?arg.length;
          ????
          var?clen?=?document.cookie.length;
          ????
          var?i?=?0;
          ????
          while?(i?<?clen)
          ????{
          ????????
          var?j?=?i?+?alen;
          ????????
          if?(document.cookie.substring(i,?j)?==?arg)
          ????????
          return?GetCookieVal?(j);
          ????????i?
          =?document.cookie.indexOf("?",?i)?+?1;
          ????????
          if?(i?==?0)?break;
          ????}
          ????
          return?null;
          }

          jsunit
          <!DOCTYPE?html?
          ??PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?
          ??"http://www.w3.org/TR/html4/loose.dtd"
          >
          <html>
          <head>
          <meta?http-equiv="Content-Type"?content="text/html;?charset=BIG5">
          <title>x</title>
          <script?type="text/javascript"?src="test.js"></script>
          <script?type="text/javascript"?src="lib/jsUnitCore.js"></script>
          <script?type="text/javascript">
          ????
          ????
          ????
          function?testValidArgs()?{?//?測試的函式要以test名稱作為開頭
          ????????SetCookie('li','gg');
          ????????assertEquals(
          "cookie?get?err",?'gg',?GetCookie('li')?);
          ????????assertEquals(
          "cookie?getVal?err",?'li=gg',?GetCookieVal('li')?);
          ????????
          ????????
          ????????DelCookie(
          "li");
          ????????assertEquals(
          "cookie del err ",null,?GetCookie('li')?);
          ????????
          ????????
          ????}

          ????
          ????
          </script>
          </head>
          <body>
          </body>
          </html>

          運行 Jsunit-> testRunner.html 通過測試


          posted @ 2007-11-28 17:13 G_G 閱讀(419) | 評論 (0)編輯 收藏

          環境:
          ???? private ?SessionFactory?sessionFactory;

          ????
          protected ? void ?setUp()? throws ?Exception?{
          ????????
          super .setUp();
          ????????
          // 利用java反射得到?HibernateSessionFactory?->
          ????????
          // private??static?org.hibernate.SessionFactory?sessionFactory;
          ????????
          // 要模擬?并發?要?HibernateSessionFactory?得出的?有?threadLocal?不行?
          ????????
          // 要?
          ????????HibernateSessionFactory.currentSession();
          ????????HibernateSessionFactory.closeSession();
          ????????Field?field?
          = ?HibernateSessionFactory. class .getDeclaredField( " sessionFactory " );
          ????????field.setAccessible(
          true );
          ????????sessionFactory?
          = ?(SessionFactory)?field.get(HibernateSessionFactory. class );
          ????}

          ????
          protected ? void ?tearDown()? throws ?Exception?{
          ????????
          super .tearDown();
          ????}

          悲觀鎖:
          ???? /** ?悲觀鎖問題?線程模擬?并發?
          ?????*?Table?->?T1oo(id,name)
          ?????*?????+----+------+
          ?????*????|?id?|?name?|
          ?????*????+----+------+
          ?????*????|??4?|?xx1??|
          ?????*????+----+------+
          ?????
          */
          ????
          public ? void ?ctestLock()? throws ?Exception?{
          ????????
          // ?insert?test?Data 測試數據
          ????????Session?seInsert? = ?sessionFactory.openSession();
          ????????Transaction?tr?
          = ?seInsert.beginTransaction();
          ????????T1oo?testUse?
          = ?testUse? = ? new ?T1oo();
          ????????testUse.setName(
          " liukaiyi_test " );
          ????????seInsert.save(testUse);
          ????????tr.commit();
          ????????System.out.println(?
          " **************Test?Use?Bean?:?insert******************* " ?);
          ????????seInsert.close();
          ????????Integer?testId?
          = ?testUse.getId();
          ????????
          ??????? //并發模擬
          ????????Session?session1?
          = ?sessionFactory.openSession();
          ????????Session?session2?
          = ?sessionFactory.openSession();
          ????????
          ????????
          final ?Transaction?tr1? = ?session1.beginTransaction();
          ????????Transaction?tr2?
          = ?session2.beginTransaction();
          ????????
          ????????Query?qu1?
          = ?session1.createQuery( " ?from?T1oo?t1oo?where?t1oo.name='liukaiyi_test' " );
          ????????Query?qu2?
          = ?session2.createQuery( " ?from?T1oo?t1oo?where?t1oo.name='liukaiyi_test' " );
          ????????
          ??????? //加悲觀鎖
          ????????qu1.setLockMode(
          " t1oo " ,LockMode.UPGRADE);
          ????????
          final ?Object?bean1? = ?qu1.uniqueResult();
          ????????Object?bean2?
          = ?qu2.uniqueResult();

          ????????T1oo?t1oo2?
          = ?(T1oo)bean2;
          ????????
          ????????t1oo2.setName(
          " run1 " );
          ????????
          ????????
          new ?Thread(
          ????????????????
          new ?Runnable(){
          ????????????????????
          public ? void ?run()??{
          ????????????????????????
          try ?{
          ????????????????????????????System.out.println(?
          " ********解鎖準備********* " ?);
          ????????????????????????????Thread.sleep(
          10 * 1000 );
          ????????????????????????????T1oo?t1oo1?
          = ?(T1oo)bean1;
          ????????????????????????????t1oo1.setName(
          " run2 " );
          ????????????????????????????tr1.commit();
          ????????????????????????????System.out.println(?
          " ********解鎖成功t********* " ?);
          ????????????????????????}?
          catch ?(InterruptedException?e)?{e.printStackTrace();}
          ????????????????????}
          ????????????????}
          ????????).start();

          ???????
          / /這里會 等待十秒后 tr1解鎖 /
          ????????tr2.commit();
          ????????
          ????????session1.close();
          ????????session2.close();
          ????????
          ????????
          ????????
          // ?delete?Test?Date 刪除測試數據
          ????????Session?seDelete? = ?sessionFactory.openSession();
          ????????Transaction?trD?
          = ?seDelete.beginTransaction();
          ????????Object?obj?
          = ?seDelete.createQuery( " ?from?T1oo?t?where?t.id=:id? " ).
          ????????????????????????setInteger(
          " id " ,testId.intValue()).
          ????????????????????????uniqueResult();
          ????????seDelete.delete(obj);
          ????????trD.commit();
          ????????System.out.println(?
          " **************Test?Use?Bean?:?delete************** " ?);
          ????????seDelete.close();
          ????}

          樂觀鎖:
          ???? /** ?樂觀鎖問題
          ?????*?Table?->?T1oo(id,name)
          ?????*?T2oo.hbn.xml?<class>?+>?optimistic-lock="version"
          ?????*?id下面?+>?<version?name="version"?type="integer"?column="version"?/>
          ?????*????+---------+---------+------+
          ?????*????|?Field???|?Type????|?Null?|
          ?????*????+---------+---------+------+
          ?????*????|?id??????|?int(11)?|??????|
          ?????*????|?avg?????|?int(11)?|??????|
          ?????*????|?aid?????|?int(11)?|?YES??|
          ?????*????|?version?|?int(11)?|?YES??|
          ?????*????+---------+---------+------+
          ?????*??注意:要在數據庫中多加一列?
          ?????*??mysql>?alter?table?T2OO?add?version?int;
          ?????
          */
          ????
          public ? void ?testOpLock() throws ?Exception{
          ??????? //添加測試數據
          ????????Session?session?
          = ?sessionFactory.openSession();
          ????????Transaction?trI?
          = ?session.beginTransaction();
          ????????Connection?conn?
          = ?session.connection();
          ????????T2oo?t2oo?
          = ? new ?T2oo();
          ????????T1oo?t1oo?
          = new ?T1oo( " t1ooOpLock " );
          ????????t1oo.setT2ooSet(
          new ?HashSet());
          ????????t2oo.setAvg(
          new ?Integer( 23 ));????
          ????????t2oo.setT1oo(t1oo);
          ????????t1oo.getT2ooSet().add(t2oo);
          ????????session.save(t2oo);
          ????????trI.commit();
          ????????session.clear();
          ????????session.close();

          ??????? //并發模擬
          ????????Session?se1?
          = ?sessionFactory.openSession();
          ????????Session?se2?
          = ?sessionFactory.openSession();
          ????????
          ????????Transaction?tr1?
          = ?se1.beginTransaction();
          ????????Transaction?tr2?
          = ?se2.beginTransaction();
          ???????
          ????????T1oo?obj1?
          = ?(T1oo)se1.load(T1oo. class , new ?Integer( 1 ));
          ????????T1oo?obj2?
          = ?(T1oo)se2.load(T1oo. class , new ?Integer( 1 ));
          ????????
          ????????((T2oo)obj1.getT2ooSet().iterator().next()).setAvg(
          new ?Integer( 9 ));
          ????????((T2oo)obj2.getT2ooSet().iterator().next()).setAvg(
          new ?Integer( 10 ));
          ????????????????
          ????????tr1.commit();
          ????????
          ????????
          try ?{
          ????????????tr2.commit();
          ????????}?
          catch ?(Exception?e)?{
          ????????????se2.clear();
          ????????????tr2.commit();
          ????????????
          // tr2報錯
          ????????} finally {
          ????????????se1.close();
          ????????????se2.close();
          ????????}
          ????????
          ????????
          ??????? //測試數據刪除
          ????????Session?dele?
          = ?sessionFactory.openSession();
          ????????Transaction?tr?
          = ?dele.beginTransaction();
          ????????dele.delete(obj1);
          ????????tr.commit();
          ????????dele.close();
          ????????
          ????????HibernateSessionFactory.closeSession();
          ????}

          posted @ 2007-11-26 18:57 G_G 閱讀(1097) | 評論 (0)編輯 收藏

          inverse 使用
          說明約定-如:
          1.表屬性 :T1oo->id,name
          ??? ?? ?? T2oo->id,avg,aid(
          外鍵 ),version

          2.代碼過程是:Save->t1oo對象(T1oo 外鍵 T2oo)
          ??? ??? T1oo t1oo = new T1oo();
          ??? ??? t1oo.setName("xx");??? ???
          ??? ??? t1oo.setT2ooSet(new HashSet());
          ??? ??? T2oo t2oo2 = new T2oo(24);
          ??? ??? //t2oo2.setT1oo(t1oo); (在下面的本用例表中的第3屬性 )
          ??? ??? t1oo.getT2ooSet().add(t2oo2);
          (在下面的本用例表中的第2屬性 )
          ??? ??? session.save(t1oo);

          3.本例表使用:
          T1oo.hbm.xml ->
          ??????? <set name="t2ooSet" inverse="true" cascade = "all"? >
          (在下面的本用例表中的第1,2屬性 )
          ??????????? <key column="aid"/>
          ??????????? <one-to-many class="T2oo"/>
          ??????? </set>
          T2oo.hbm.xml ->
          ??? ??? <many-to-one name="t1oo" column="aid"? class="T1oo" cascade="all" />
          (在下面的本用例表中的第1,2屬性 )
          結合上面說明得表為:
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? | all?? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+


          4.執行 Hibernate語句
          ??? Hibernate: insert into t1oo (name, id) values (?, ?)
          ??? Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          5.結果為:
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 2 |? 24 | NULL |?????? 0 | //主要就是看 aid屬性
          +----+-----+------+---------+
          1 row in set (0.00 sec)


          mysql> select * from t1oo; //
          因為 T1oo總是可以 Save 下面就不再提了
          +----+------+
          | id | name |
          +----+------+
          |? 2 | xx?? |
          +----+------+
          1 row in set (0.00 sec)

          可改項:

          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | 可改4 | 可改2? |?? ??? ?? |????????? |
          +-------+-------+-------+?????????? |?? 可改1? |
          | t2oo? |?????? | 可改3 |??? ?????? |????????? |
          +-------+-------+-------+----------+----------+



          主本:
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? | all?? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 |??? 1 |?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.00 sec)


          改1
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? | all?? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 | NULL|?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.00 sec)

          改2
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? |?????? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? | all?? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Empty set (0.00 sec)

          改2? 改1
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? |?????? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? | all?? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Empty set (0.00 sec)


          改3
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? |?????? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 |??? 1 |?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.00 sec)

          改3 改2
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? |?????? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? |?????? |??? ? ? ? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Empty set (0.00 sec)


          改3 改1
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? |?????? |??? ? ? ? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 | NULL |?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.00 sec)

          改3 改2 改1
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | true? |?????? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? |?????? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Empty set (0.00 sec)

          改4
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? | all?? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          Hibernate: update t2oo set aid=? where id=?
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 |??? 1 |?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.02 sec)

          改4 改1
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? | all?? |??? ? ? ? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          Hibernate: update t2oo set aid=? where id=?
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 |??? 1 |?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.00 sec)

          改4 改2
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false | ? ? ? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? | all?? |??? ? ? ? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: update t2oo set aid=? where id=?
          Empty set (0.00 sec)

          改4 改3
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false | all?? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? |?????? |??? ? ? ? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          Hibernate: update t2oo set aid=? where id=?
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 |??? 1 |?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.00 sec)

          改4 改3 改2

          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false |?????? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? true??? |
          | t2oo? |?????? |?????? |??? ? ? ? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: update t2oo set aid=? where id=?
          Empty set (0.00 sec)

          改4 改1 改2
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false |?????? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? | all?? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: update t2oo set aid=? where id=?
          Empty set (0.00 sec)


          改4 改1 改3
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false |? all? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? |?????? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (version, avg, aid, id) values (?, ?, ?, ?)
          Hibernate: update t2oo set aid=? where id=?
          mysql> select * from t2oo;
          +----+-----+------+---------+
          | id | avg | aid? | version |
          +----+-----+------+---------+
          |? 1 |? 24 |??? 1 |?????? 0 |
          +----+-----+------+---------+
          1 row in set (0.02 sec)

          改4 改3 改2 改1
          +-------+-------+-------+----------+----------+
          |hbn.xml|inverse|cascade|t1oo->t2oo|t2oo->t1oo|
          +-------+-------+-------+----------+----------+
          | t1oo? | false |?????? |?? ??? ?? |????????? |
          +-------+-------+-------+? true??? |? false?? |
          | t2oo? |?????? |?????? |??? ????? |????????? |
          +-------+-------+-------+----------+----------+
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: update t2oo set aid=? where id=?
          Empty set (0.00 sec)






          posted @ 2007-11-16 19:20 G_G 閱讀(1728) | 評論 (2)編輯 收藏

          緩存問題:
          ???? /** ?使用?Query.executeUpdate()?緩存中數據不同步?解決辦法
          ?????*??Table?->?T1oo(id,name)
          ?????*?Table?->?T2oo(id,avg,aid)
          ?????*?外鍵?T1oo.id->T2oo.aid
          ?????*??Session.createQuery("delete?T1oo")?->??Query.executeUpdate()?
          ????
          */
          ????
          public ? void ?testExecuteUpdate(){
          ????????System.out.println(
          " \r\n\r\n********************ExecuteUpdate************************ " );
          ????????T1oo?t1oo?
          = ? new ?T1oo();
          ????????t1oo.setName(
          " liukaiyi " );
          ????????
          ????????HibernateSessionFactory.closeSession();
          ????????
          ????????Session?session?
          = ?HibernateSessionFactory.currentSession();
          ????Transaction?tr1?
          = ?session.beginTransaction();
          ????????
          // t1?成為?持久狀態?一級緩存中?加載
          ????????session.saveOrUpdate(t1oo);?
          ????????
          // 直接一條語句刪除T1oo,緩存無法同步
          ????????
          // 一級緩存中還有?t1
          ????????Query?qu? = ?session.createQuery( " delete?T1oo " );
          ????????
          try ?{
          ????????????qu.executeUpdate();
          ????????}?
          catch ?(Exception?e)?{????
          ????????????System.out.println(
          " //err:?有級聯?單使用?delete?T1oo?還要delete?T2oo.aid?=?T1oo.id// " );
          ????????????List?list?
          = ?session.createQuery( " from?T1oo " ).list();
          ????????????
          for (Iterator?it = list.iterator();it.hasNext();){
          ????????????????Query?t2qu?
          = ?session.createQuery( " delete?T2oo??where?aid=:id " );
          ????????????????t2qu.setInteger(
          " id " ,?((T1oo)it.next()).getId().intValue());
          ????????????????t2qu.executeUpdate();????????????????
          ????????????}
          ????????????qu.executeUpdate();
          ????????}
          ????????
          ????????tr1.commit();
          ????????
          ????Transaction?tr2?
          = ?session.beginTransaction();
          ????????
          // 這直接通過一級緩存中加載t2,但DB中以沒有此條數據
          ????????t1oo? = ?(T1oo)session.load(T1oo. class ,t1oo.getId());
          ????????t1oo.setName(
          " google " );
          ????????
          try ?{
          ????????????tr2.commit();????
          ????????}?
          catch ?(Exception?e)?{
          ????????????System.out.println(
          " //err:?update(t1oo)->DB?中數據庫中沒有?t1oo?// " );
          ????????}
          ????????

          ????????System.out.println(
          " ?一級緩存清空前? " + ?session.get(T1oo. class ,t1oo.getId())?);
          ????????session.evict(t1oo);
          ????????System.out.println(
          " ?一級緩存清空后? " + ?session.get(T1oo. class ,t1oo.getId())?);
          ????????
          ????????
          // 不把t1oo?id?為空,否則當在saveOrUpdate時候就會以為是游離態?update了
          ????????t1oo.setId( null );
          ????????
          // id=null?insert?調用
          ????????session.saveOrUpdate(t1oo);????????
          ????????tr2.commit();
          ????????
          ????Transaction?tr3?
          = ?session.beginTransaction();
          ????????session.delete(t1oo);
          ????????tr3.commit();
          ????????
          ????????session.close();
          ????????HibernateSessionFactory.closeSession();
          ????????
          ????}
          結果是:
          ********************ExecuteUpdate************************
          log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
          log4j:WARN Please initialize the log4j system properly.

          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: delete from t1oo
          //err: 有級聯 單使用 delete T1oo 還要delete T2oo.aid = T1oo.id//
          Hibernate: select t1oo0_.id as id, t1oo0_.name as name0_ from t1oo t1oo0_
          Hibernate: delete from t2oo where aid=?
          Hibernate: delete from t2oo where aid=?
          Hibernate: delete from t2oo where aid=?
          Hibernate: delete from t1oo
          Hibernate: update t1oo set name=? where id=?
          //err: update(t1oo)->DB 中數據庫中沒有 t1oo //
          ?一級緩存清空前 hbn.bean.T1oo@287
          Hibernate: select t1oo0_.id as id0_, t1oo0_.name as name0_0_ from t1oo t1oo0_ where t1oo0_.id=?
          ?一級緩存清空后 null
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: delete from t1oo where id=?


          Get Load 區別 :
          ?
          ????/**?Get?Load?區別?(在commit前要?session.flush())
          ?????*?Table?->?T1oo(id,name)
          ?????*?1.如果未能發現符合條件的記錄,get方法返回null,而load方法會拋出異常
          ?????*?2.Load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。
          ?????*?3.load方法可以充分利用內部緩存和二級緩存中的現有數據,而get方法則僅僅在內部緩存中進行數據查找,
          ?????*?????????????如沒有發現對應數據,將越過二級緩存,直接調用SQL完成數據讀取。?
          ?????
          */
          ????
          public?void?testGetLoad()?throws?Exception?{
          ????????System.out.println(
          "\r\n\r\n********************Get<>Load************************");
          ????????Session?session?
          =?HibernateSessionFactory.currentSession();
          ????
          //??數據準備
          ????????T1oo?t1oo?=?new?T1oo();
          ????????t1oo.setName(
          "liu");
          ????Transaction?t1?
          =?session.beginTransaction();
          ????????session.saveOrUpdate(t1oo);
          ????????
          //?為什么這會錯?
          ????????
          //session.evict(t1oo);
          ????????
          //session.flush();
          ????????t1.commit();
          ????????session.evict(t1oo);
          ????
          ????Transaction?t2?
          =?session.beginTransaction();
          ????????System.out.println(
          "一級緩存是否有t1oo(load)->"+session.contains(t1oo));?
          ????????
          //這時候t1oo為?CGlib生成的代理類
          ????????t1oo?=?(T1oo)session.load(T1oo.class,t1oo.getId());
          ????????System.out.println(
          "?延遲加載出現:select..?t1oo0_.id=??表的其他屬性加載?");
          ????????t1oo.setName(
          "load?list");
          ????????
          //后在?update
          ????????t2.commit();
          ????????session.evict(t1oo);
          ????????
          ????Transaction?t3?
          =?session.beginTransaction();
          ????????System.out.println(
          "一級緩存是否有t1oo(get)->"+session.contains(t1oo));?
          ????????
          //這時候t1oo為?CGlib生成的代理類
          ????????t1oo?=?(T1oo)session.get(T1oo.class,t1oo.getId());
          ????????System.out.println(
          "?沒有延遲加載出現");
          ????????t1oo.setName(
          "get?list");
          ????????
          //后在?update
          ????????t3.commit();????
          ????????session.evict(t1oo);
          ????????
          ????Transaction?tr3?
          =?session.beginTransaction();
          ????????session.delete(t1oo);
          ????????tr3.commit();
          ????????
          ????????session.close();
          ????????HibernateSessionFactory.closeSession();
          ????????
          ????}
          結果
          ********************Get<>Load************************
          Hibernate: insert into t1oo (name, id) values (?, ?)
          一級緩存是否有t1oo(load)->false
          ?延遲加載出現:select.. t1oo0_.id=? 表的其他屬性加載
          Hibernate: select t1oo0_.id as id0_, t1oo0_.name as name0_0_ from t1oo t1oo0_ where t1oo0_.id=?
          Hibernate: update t1oo set name=? where id=?
          一級緩存是否有t1oo(get)->false
          Hibernate: select t1oo0_.id as id0_, t1oo0_.name as name0_0_ from t1oo t1oo0_ where t1oo0_.id=?
          ?沒有延遲加載出現
          Hibernate: update t1oo set name=? where id=?
          Hibernate: select t2ooset0_.aid as aid1_, t2ooset0_.id as id1_, t2ooset0_.id as id0_, t2ooset0_.avg as avg1_0_, t2ooset0_.aid as aid1_0_ from t2oo t2ooset0_ where t2ooset0_.aid=?
          Hibernate: delete from t1oo where id=?


          Set 集合的識別

          ????/**?Set?集合的識別
          ?????*?Table?->?T1oo(id,name)
          ?????*?Table?->?T2oo(id,avg,aid)
          ?????*?外鍵?T1oo.id->T2oo.aid
          ?????*?T1oo??<set?name="t2ooSet"?inverse="false"?cascade?=?"all"??>
          ?????*?T2oo??<many-to-one?name="t1oo"?column="aid"?class="T1oo"?/>
          ?????*?cascade='insert'?是一定要的
          ?????*?????當?T1oo沒有?inverse="true"?主動權的時候,要雙項關聯
          ?????*?????t1oo.getT2ooSet().add(t2oo1);
          ?????*????t1oo.getT2ooSet().add(t2oo2);
          ?????*????t2oo1.setT1oo(t1oo);
          ?????*????t2oo2.setT1oo(t1oo);
          ?????*??要不后sql為:
          ?????*??Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
          ?????*????Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
          ?????*????+----+-----+------+
          ?????*????|?id?|?avg?|?aid??|
          ?????*????+----+-----+------+
          ?????*????|??1?|??24?|?NULL?|
          ?????*????|??2?|??23?|?NULL?|
          ?????*????+----+-----+------+
          ?????*????當?T1oo有?inverse="false"主動權的時候
          ?????*??t1oo.getT2ooSet().add(t2oo1);
          ?????*????t1oo.getT2ooSet().add(t2oo2);
          ?????*??Sql語句為:
          ?????*??Hibernate:?insert?into?t1oo?(name,?id)?values?(?,??)
          ?????*????Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
          ?????*????Hibernate:?insert?into?t2oo?(avg,?aid,?id)?values?(?,??,??)
          ?????*????Hibernate:?update?t2oo?set?aid=??where?id=?
          ?????*????Hibernate:?update?t2oo?set?aid=??where?id=?
          ?????*????|??3?|??24?|???12?|
          ?????*????|??4?|??23?|???12?|
          ?????*????+----+-----+------+
          ????
          */
          ????
          public?void?testSet(){
          ????????System.out.println(
          "\r\n\r\n********************Set************************");
          ????????T1oo?t1oo?
          =?new?T1oo();
          ????????t1oo.setName(
          "list");
          ????????
          ????????T2oo?t2oo1?
          =?new?T2oo();?t2oo1.setAvg(new?Integer(23));
          ????????T2oo?t2oo2?
          =?new?T2oo();?t2oo2.setAvg(new?Integer(24));
          ????????
          ????????
          ????????Session?session?
          =?HibernateSessionFactory.currentSession();
          ????????Transaction?tr1?
          =?session.beginTransaction();
          ????????session.save(t1oo);
          ????????t1oo?
          =?(T1oo)?session.load(T1oo.class,t1oo.getId());

          ????????t1oo.setT2ooSet(
          new?HashSet())?;
          ????????t1oo.getT2ooSet().add(t2oo1);
          ????????t1oo.getT2ooSet().add(t2oo2);
          ?????????
          ????????System.out.println(?t1oo.getT2ooSet().size()
          +""?);????????
          ????????tr1.commit();
          ????????
          ????????System.out.println();
          ????????T2oo?t2oo3?
          =?new?T2oo();?t2oo3.setAvg(new?Integer(25));
          ????????T1oo?t1oo2?
          =?new?T1oo();?t1oo2.setName("mz");
          ????????t2oo3.setT1oo(t1oo2);
          ????????
          ????????Transaction?tr2?
          =?session.beginTransaction();
          ????????session.save(t2oo3);
          ????????
          try?{
          ????????????tr2.commit();????
          ????????}?
          catch?(Exception?e)?{
          ????????????System.out.println(
          "//err:?沒有主動權?cascade?=?'all'?不可以級聯save?t1oo???//");
          ????????}
          ????????session.close();
          ????????HibernateSessionFactory.closeSession();
          ????}
          ???

          結果是:
          ********************Set************************
          2
          Hibernate: insert into t1oo (name, id) values (?, ?)
          Hibernate: insert into t2oo (avg, aid, id) values (?, ?, ?)
          Hibernate: insert into t2oo (avg, aid, id) values (?, ?, ?)
          Hibernate: update t2oo set aid=? where id=?
          Hibernate: update t2oo set aid=? where id=?

          //err: 沒有主動權 cascade = 'all' 不可以級聯save t1oo?? //


          posted @ 2007-11-12 16:29 G_G 閱讀(2072) | 評論 (3)編輯 收藏

          學習:http://visualjquery.com/1.1.2.html
          DOM
          Attributes

          1.attr(key, value)
          $("img").attr("title", "xx");
          也是對屬性的添加但可以動態
          eg:??? 在每次給title時 動態了開始
          <img title="pic" /><img title="pic" /><img title="pic" />
          通過$("img").attr("title", function(index) { return this.title + (i + 1); });
          <img title="pic1" /><img title="pic2" /><img title="pic3" />

          2.? html 內容取、賦值
          取??<div><input/></div>? ->>??$("div").html(); ->>? 結果:<input/>
          賦? $("div").html("<b>new stuff</b>"); ->><div><b>new stuff</b></div>
          通過這 ajax 就很簡單了。^_^

          Manipulation
          1.位置調換 after, append、before
          $("p").after("<b>Hello</b>");??? <p>后 添加 <b>..
          $("p").after( $("#foo")[0] );? 把id為foo的標簽移動到<p>后

          $("input[@name='butt1']").clone().prependTo("form"); //clone in form

          posted @ 2007-11-09 10:34 G_G 閱讀(317) | 評論 (0)編輯 收藏

          參考:
          ??? http://visualjquery.com/1.1.2.html

          1.定位
          $(?'xx'?)
            $("p[a]").hide();
          $("p:eq(0)").show();
          $("div:visible").hide();
          $("ul/li")
          /* valid too: $("ul > li") */
          $("p.foo[a]");
          $("input[@name=bar]").val();
          $("input[@type=radio][@checked]")


          2.事件添加
          ?? <a href="#" name="li" >Link</a>

          ?? $(document).ready(
          function()?{
          ???????? $(
          "a").click(function()?{????????????????????
          ?????????????? $("div").hide(); //跌代不可見 <a>

          ????? });
          ??? });

          3.頁面 javascript 輸入(和jsp的 out.print(...))$(html)
          $("<div?id='div1'><font?color='red''>Hello</font></div>").appendTo("body");

          4.寫css
          $(document.body).css(?"background",?"black"?);

          5.包含定位
          <p>one</p> <div><p>two</p></div> <div>three</div>

          $(
          "div?>?p") //定位two <p>two</p>

          6.范圍定位
          <body>
          ????????
          <form>
          ????????????
          <input?type="button"?value="哈哈"/>
          ????????
          </form>
          </body>

          $("input:button",?document.forms[0])[0].setAttribute("value","google");
          ? $("div", xml.responseXML) 等

          7.表達試定位
          $("p[@name='p1']").hide();//hide不要?$(..)[0]

          $("input[@name='butt1']:button",?document.forms[0])[0].setAttribute("value","google");

          8.$(..).fun.. 添加方法
          ????????<form>
          ????????????
          <input?name="butt1"?type="button"?value="google"/>
          ????????
          </form>
          ????????
          <script>
          ????????????????
          ????????jQuery.fn.extend({
          ??????????check:?
          function()?{
          ????????????alert('check');
          ??????????}
          ????????});
          ????????$(
          "input[@name='butt1']:button",?document.forms[0]).check();
          ????????
          </script>


          jQuery.extend({
          min: function(a, b) { return a < b ? a : b; },
          max: function(a, b) { return a > b ? a : b; }
          });


          9.
          $.noConflict()
          ????<body>
          ????????
          <form>
          ????????????
          <input?name="butt1"?type="button"?value="google"/>
          ????????
          </form>
          ????????
          <a?href="#"?temp_href="#"?name="li"?>Link</a>
          ????????
          <script>
          ????????????????
          ?????
          var?$j?=?jQuery.noConflict();??
          ???????
          ?????
          //?Use?jQuery?via?$j()??
          ?????$j(document).ready(function(){??
          ????????$(
          "a").click(function()?{???
          ???????????????$j(document.forms[
          0]).hide();??
          ???????????});
          ?????});?
          ????????
          </script>
          ????
          </body>

          10. $ 一般方法
          //each(fn)
          $("img").each(function(i){
          ??this.src?=?"test"?+?i?+?".jpg";
          });
          <img/><img/>
          <img?src="test0.jpg"/><img?src="test1.jpg"/>


          $("p").eq(1) //后1個
          $("p").lt(1) //正取 1 開始

          $("img").get();//全取
          $("img").get(0); //順序取 0開始
          $("p").gt(0) //反取從0開始

          $("*").index( $('#foo')[0] )
          <div id="foobar"><b></b><span id="foo"></span></div>
          返回結果 2

          $("img").length; //總長度
          $("img").size();







          posted @ 2007-11-08 17:12 G_G 閱讀(487) | 評論 (1)編輯 收藏

          直接看代碼..
          dom4j 的一般使用都在里面了
          /lib/dom4j-1.6.1.jar
          /lib/jaxen-1.1-beta-6.jar
          package?useDom4j.test.supper;

          import?java.io.File;
          import?java.io.FileOutputStream;
          import?java.io.IOException;
          import?java.io.InputStream;
          import?java.io.OutputStream;
          import?java.net.URL;
          import?java.util.Iterator;
          import?java.util.List;
          import?java.util.regex.Matcher;
          import?java.util.regex.Pattern;

          import?javax.xml.parsers.DocumentBuilder;
          import?javax.xml.parsers.DocumentBuilderFactory;

          import?junit.framework.TestCase;

          import?org.dom4j.Document;
          import?org.dom4j.DocumentFactory;
          import?org.dom4j.DocumentHelper;
          import?org.dom4j.Element;
          import?org.dom4j.Node;
          import?org.dom4j.QName;
          import?org.dom4j.Visitor;
          import?org.dom4j.VisitorSupport;
          import?org.dom4j.XPath;
          import?org.dom4j.io.DOMReader;
          import?org.dom4j.io.HTMLWriter;
          import?org.dom4j.io.OutputFormat;
          import?org.dom4j.io.SAXReader;
          import?org.dom4j.io.XMLWriter;


          public?class?useDom4jTest?extends?TestCase?{

          ????
          //use?all
          ????private?String?path?;
          ????
          private?ClassLoader?clo;
          ????
          //?file?path?->?bin?
          ????private?String?classPath?;
          ????
          //use?save?
          ????static?private?Document?doc;
          ????
          private?String?filese;

          ????
          protected?void?setUp()?throws?Exception?{
          ????????
          super.setUp();
          ????????path?
          =?"useDom4j/test/config/test.xml";
          ????????clo?
          =?this.getClass().getClassLoader();
          ????????classPath?
          =?System.getProperty("java.class.path").split(";")[0]???;
          ????????filese?
          =?System.getProperty("file.separator");
          ????}

          ????
          protected?void?tearDown()?throws?Exception?{
          ????????
          super.tearDown();
          ????}

          ????
          ????
          public?void?testRead()throws?Exception{
          ????????SAXReader?sax?
          =?new?SAXReader();
          ????????
          //File?read
          ????????Document?docF?=??sax.read(
          ????????????????
          new?File(clo.getResource(path).getFile())
          ????????????????????);
          ????????assertNotNull(
          "is?File?saxReader?err",docF);
          ????????
          ????????
          //InPutStream?read?
          ????????Document?docI?=?sax.read(?clo.getResourceAsStream(path)?);
          ????????assertNotNull(
          "is?InPutStream?saxReader?err",docI);
          ????????
          ????????
          //URL?read?
          ????????Document?docU?=?sax.read(?clo.getResource(path)?);
          ????????assertNotNull(
          "is?Url?saxReader?err",docU);
          ????????
          ????}
          ????
          ????
          /**?converts?a?W3C?DOM?document?into?a?dom4j?document?*/
          ????
          public?void?testConversion()?throws?Exception{
          ??????????DocumentBuilderFactory?domfac
          =DocumentBuilderFactory.newInstance();
          ??????????DocumentBuilder?dombuilder
          =domfac.newDocumentBuilder();
          ??????????InputStream?input?
          =??clo.getResourceAsStream(path)?;
          ??????????org.w3c.dom.Document?doc3c?
          =?dombuilder.parse(?input?);
          ??????????DOMReader?xmlReader?
          =?new?DOMReader();
          ??????????assertEquals(?
          "?Conversion?:?W3C?DOM->?dom4j?DOM?err",
          ??????????????????xmlReader.read(doc3c)?
          instanceof?Document,true?);
          ??????}
          ??????
          ????
          public?void?testCreate()throws?Exception{
          ??????????DocumentFactory?factory?
          =?DocumentFactory.getInstance();
          ??????????doc?
          =?factory.createDocument();
          ????????
          //root?Create
          ??????????Element?root?=?doc.addElement("testElement");
          ??????????assertNotNull(
          "is?root?Create?err",root);
          ??????????
          ???????????Element?author2?
          =?root.addElement(?"author"?)
          ??????????????.addAttribute(?
          "name",?"Toby"?)
          ??????????????.addAttribute(?
          "location",?"Germany"?)
          ??????????????.addText(?
          "Tobias?Rademacher"?);

          ????????????Element?author1?
          =?root.addElement(?"author"?)
          ??????????????.addAttribute(?
          "name",?"James"?)
          ??????????????.addAttribute(?
          "location",?"UK"?)
          ??????????????.addText(?
          "James?Strachan"?);
          ????????????
          ????????????
          //Test?Create?
          ????????????
          //use?XPath?->jaxen-xxx.jar??
          ????????????assertEquals("create?Element?author2?err",
          ????????????????????doc.selectSingleNode(
          "/testElement/author[@name='Toby']").getText()
          ????????????????????,
          "Tobias?Rademacher");
          ????????????assertEquals(
          "create?Element?author1?err",
          ????????????????????doc.selectSingleNode(
          "/testElement/author[@location='UK']/@name").getText()
          ????????????????????,
          "James");
          ????}



          ?????
          public?void?testPrintingHTML()throws?Exception{
          ???????????String?testSaveXml?
          =?"useDom4j/test/config/testHtml.html";
          ???????????
          ???????????testSaveXml?
          =?classPath+filese+testSaveXml;
          ??????????
          ???????????File?file?
          =?getFile(testSaveXml);
          ???????????
          //Save?file.html?
          ???????????HTMLWriter?writer?=?new?HTMLWriter(new?FileOutputStream(?file?));
          ???????????writer.write(
          new?SAXReader().read(?clo.getResource(path)?));
          ???????????writer.flush();
          ?????}
          ????
          ????
          public?void?testIterator(){
          ????????Element?root?
          =?this.doc.getRootElement();
          ????????
          ????????
          //Iterator
          ????????Iterator?elementIterator?=?root.elementIterator();
          ????????
          while(elementIterator.hasNext()){
          ??????????Element?element?
          =?(Element)elementIterator.next();
          ??????????assertNotNull(
          "not?attr?name",?element.selectSingleNode("./@name")?);
          ??????????assertNotNull(
          "not?attr?location",?element.selectSingleNode("./@location")?);
          ??????????assertNotNull(
          "not?Text?",?element.selectSingleNode(".").getText()?);
          ????????}
          ????????
          ????????
          //for?->?./XX
          ????????for?(?int?i?=?0,?size?=?root.nodeCount();?i?<?size;?i++?)?{
          ????????????Node?node?
          =?root.node(i);
          ????????????
          if?(?node?instanceof?Element?)?{
          ??????????????Element?element?
          =?(Element)node;
          ??????????????assertNotNull(
          "not?attr?name",?element.selectSingleNode("./@name")?);
          ????????????????assertNotNull(
          "not?attr?location",?element.selectSingleNode("./@location")?);
          ????????????????assertNotNull(
          "not?Text?",?element.selectSingleNode(".").getText()?);
          ????????????}
          ????????}
          ????????
          ????????
          //List?
          ????????List?elements?=?root.elements();
          ????????
          int?size?=?elements.size()?;
          ????????
          if?(?size?>?4?)?{
          ??????????elements.subList(?
          3,?4?).clear();
          ??????????assertEquals(
          "List?is?not?clear",size-elements.size()==1,true);
          ????????}

          ????}
          ????
          ????
          /**?use?test.xml?test
          ?????????xpath?->?/project/organization/
          ?????????<organization>
          ?????????????<name>MetaStuff?Ltd.</name>
          ?????????????<url>
          http://sourceforge.net/projects/dom4j</url>
          ?????????????<logo>
          http://sourceforge.net/sflogo.php?group_id=16035</logo>
          ??????????</organization>?
          ??????????
          ??????????xpath?->?/project/dependencies/dependency[groupId='msv']
          ????????????<dependency>
          ??????????????<groupId>msv</groupId>
          ??????????????<artifactId>xsdlib</artifactId>
          ??????????????<version>20030807</version>
          ??????????????<url>
          https://msv.dev.java.net/</url>
          ????????????</dependency>
          ????
          */
          ????
          public?void?testXpath()throws?Exception{
          ????????XPath?xpathSelector?
          =?DocumentHelper.createXPath("/project/organization/*");
          ????????Document?docT?
          =?new?SAXReader().read(?clo.getResourceAsStream(path)?);
          ????????List?results?
          =?xpathSelector.selectNodes(docT);
          ????????
          for?(?Iterator?iter?=?results.iterator();?iter.hasNext();?)?{
          ??????????Element?element?
          =?(Element)?iter.next();
          ??????????
          if(element.getName().equals("name")){
          ??????????????assertEquals(
          "name?err",?element.getText().equals("MetaStuff?Ltd."),true);
          ??????????}
          ??????????
          if(element.getName().equals("url")){
          ??????????????assertEquals(
          "url?err",?element.getText().equals("http://sourceforge.net/projects/dom4j"),true);
          ??????????}
          ??????????
          if(element.getName().equals("logo")){
          ??????????????assertEquals(
          "logo?err",?element.getText().equals("http://sourceforge.net/sflogo.php?group_id=16035"),true);
          ??????????}
          ????????}
          ????????
          ????????
          //?select?
          ????????String?url?=?docT.valueOf(?"/project/dependencies/dependency[groupId='msv']/url"?);
          ????????assertEquals(
          "Url?err",?url.equals("https://msv.dev.java.net/"),true);
          ????????Number?count?
          =?docT.numberValueOf(?"/project/dependencies/dependency[groupId='msv']/version"?);
          ????????assertEquals(
          "Url?err",?count.intValue()==20030807,true);
          ????????
          ????}

          ????
          ????
          public?void?testVisitor(){
          ????????Visitor?visitor?
          =?new?VisitorSupport()?{
          ????????????
          public?void?visit(Element?element)?{
          ??????????????System.out.println(
          ????????????????
          "Entity?name:?"?+?element.getName()??+?"?text?:"?+?element.getText()
          ??????????????);
          ????????????}
          ??????????};

          ??????????doc.accept(?visitor?);
          ????}

          ????
          //??element.clone?;??element.createCopy?;???
          ????public?void?testInsertElementAt()?throws?Exception{
          ????????Element?root?
          =?this.doc.getRootElement();
          ????????Element?oldElement?
          =?(Element)doc.selectSingleNode("/testElement/author[@name='Toby']");
          ????????Element?newElement?
          =?(Element)?oldElement.clone();
          ????????List?list?
          =?root.content();
          ????????list.add(?root.indexOf(oldElement)
          +1,newElement?);

          ?????}
          ????
          ????
          ????
          ????
          ?????
          public?void?testSave()throws?Exception{
          ???????????String?testSaveXml?
          =?"useDom4j/test/config/testSave.xml";
          ???????????
          ???????????testSaveXml?
          =?classPath+filese+testSaveXml;
          ??????????
          ???????????File?file?
          =?getFile(testSaveXml);
          ???????????
          //Save?file.xml?
          ???????????XMLWriter?writer?=?new?XMLWriter(new?FileOutputStream(?file?));
          ???????????writer.write(doc);
          ???????????writer.flush();
          ?????}

          ?????
          ?????
          ????
          private?File?getFile(String?testSaveXml)?throws?IOException?{
          ????????File?file?
          =?null?;
          ???????????URL?url?
          =?clo.getResource(testSaveXml);
          ???????????
          if(url==null){
          ???????????????file?
          =?new?File(testSaveXml);
          ???????????????file.createNewFile();
          ???????????}
          else{
          ???????????????file?
          =?new?File(??url.getFile()?);
          ???????????}
          ????????
          return?file;
          ????}
          ????
          ????
          }

          引用:http://freezingxu.blog.com.cn/archives/2006/1892647.shtml
          /**
          ??*?對指定的節點增加屬性和文本
          ??*?
          @param?elmt
          ??*?
          @param?name
          ??*?
          @param?value
          ??*?
          @param?text
          ??*?
          @return
          ??
          */
          ?
          public?Element?addAttribute(Element?elmt,String?name,String?value){
          ??elmt.addAttribute(name,value);
          ??
          return?elmt;
          ?}
          ?
          ?
          /**
          ??*?修改指定節點的屬性和文本
          ??*?
          @param?elmt
          ??*?
          @param?name
          ??*?
          @param?value
          ??*?
          @param?text
          ??*?
          @return
          ??
          */
          ?
          public?Element?setAttribute(Element?elmt,String?name,String?value){
          ??Attribute?attribute?
          =?elmt.attribute(name);
          ??
          //attribute.setName(name);
          ??attribute.setValue(value);
          ??List?list?
          =?new?ArrayList();
          ??list.add(attribute);
          ??elmt.setAttributes(list);
          ??
          return?elmt;
          ?}
          ?
          ?
          /**
          ??*?刪除指定節點的指定屬性
          ??*?
          @param?elmt
          ??*?
          @param?name
          ??*?
          @return
          ??
          */
          ?
          public?Element?removeAttribute(Element?elmt,String?name){
          ??elmt.remove(elmt.attribute(name));
          ??
          return?elmt;
          ?}
          ?
          ?
          /**
          ??*?輸出為文件
          ??*?
          @param?doc
          ??*?
          @throws?IOException
          ??
          */
          ?
          public?void?writeFile(Document?doc)?throws?IOException{
          ??FileWriter?out?
          =?new?FileWriter(?"d:/newQuery.xml"?);
          ??doc.write(out);
          ??out.flush();
          ??out.close();
          ?}

          posted @ 2007-11-06 15:24 G_G 閱讀(2094) | 評論 (3)編輯 收藏

          看hbn 源代碼 發現用了 CGlib 這就看看這個jar 。特留個文 ^_^(轉)http://www.nirvanastudio.org/java/cglib-%E6%8C%87%E5%8D%97.html

          CGlib 就2個例能說明一切?
          先是使用類? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
          public?class?MyClass?{
          ?
          ????
          public?void?method()?{
          ????????System.out.println(
          "MyClass.method()");
          ????}

          ????
          public?void?method2()?{
          ????????System.out.println(
          "MyClass.method2()");
          ????}
          }

          例1:
          import?java.lang.reflect.Method;
          ?
          import?net.sf.cglib.proxy.Enhancer;
          import?net.sf.cglib.proxy.MethodProxy;
          import?net.sf.cglib.proxy.MethodInterceptor;
          ?
          public?class?Main?{
          ?
          ????
          public?static?void?main(String[]?args)?{
          ?
          ????????Enhancer?enhancer?
          =?new?Enhancer();
          ??? ??
          ??? ??? //在這代理了
          ????????enhancer.setSuperclass(MyClass.
          class);
          ????????enhancer.setCallback(?
          new?MethodInterceptorImpl()?);
          ?
          ??????? // 創造 代理 (動態擴展了MyClass類)
          ????????MyClass?my?
          =?(MyClass)enhancer.create();
          ?
          ????????my.method();
          ????}
          ?
          ????
          private?static?class?MethodInterceptorImpl?implements?MethodInterceptor?{
          ????????
          ????????
          public?Object?intercept(Object?obj,?
          ????????????????????????????????Method?method,?
          ????????????????????????????????Object[]?args,?
          ????????????????????????????????MethodProxy?proxy)?
          throws?Throwable?{
          ?
          ????????????System.out.println(method);
          ?
          ????????????proxy.invokeSuper(obj,?args);
          ?
          ????????????
          return?null;
          ????????}
          ????}
          }


          例2:
          import?java.lang.reflect.Method;


          import?net.sf.cglib.proxy.Enhancer;
          import?net.sf.cglib.proxy.MethodProxy;
          import?net.sf.cglib.proxy.MethodInterceptor;
          import?net.sf.cglib.proxy.NoOp;
          import?net.sf.cglib.proxy.Callback;
          import?net.sf.cglib.proxy.CallbackFilter;
          ?
          ?
          public?class?Main2?{
          ?
          ????
          public?static?void?main(String[]?args)?{
          ?
          ????????Callback[]?callbacks?
          =
          ????????????
          new?Callback[]?{?new?MethodInterceptorImpl(),??NoOp.INSTANCE?};
          ?
          ????????Enhancer?enhancer?
          =?new?Enhancer();
          ?
          ????????enhancer.setSuperclass(MyClass.
          class);
          ????????enhancer.setCallbacks(?callbacks?);
          ??????? //添加 方法過濾器? 返回1為不運行 2 為運行
          ????????enhancer.setCallbackFilter(?
          new?CallbackFilterImpl()?);
          ?
          ?
          ????????MyClass?my?
          =?(MyClass)enhancer.create();
          ?
          ????????my.method();
          ????????my.method2();
          ????}
          ?
          ????
          private?static?class?CallbackFilterImpl?implements?CallbackFilter?{
          ?
          ????????
          public?int?accept(Method?method)?{
          ?
          ????????????
          if?(?method.getName().equals("method2")?)?{
          ????????????????
          return?1;
          ?
          ????????????}?
          else?{
          ????????????????
          return?0;
          ????????????}
          ????????}
          ????}
          ?
          ????
          private?static?class?MethodInterceptorImpl?implements?MethodInterceptor?{
          ????????
          ????????
          public?Object?intercept(Object?obj,?
          ????????????????????????????????Method?method,?
          ????????????????????????????????Object[]?args,?
          ????????????????????????????????MethodProxy?proxy)?
          throws?Throwable?{
          ?
          ????????????System.out.println(method);
          ?
          ????????????
          return?proxy.invokeSuper(obj,?args);
          ????????}
          ????}
          }


          簡單不 哈哈 比jdk 中的動態代理好用 ,那還要接口? 不太方便 。

          posted @ 2007-11-05 10:22 G_G 閱讀(5782) | 評論 (3)編輯 收藏

          參照:容器外的JSP頁面測試技術
          由于上面給出例 復雜 。一般人很難理解。我也是 ^_^
          但仔細看我還是自己寫出一個比較簡單的,望大家一起討論。

          被測試jsp
          <%@?taglib?prefix="html"?uri="/WEB-INF/struts-html.tld"?%>
          <%@?taglib?prefix="c"?uri="/WEB-INF/c-1_0-rt.tld"?%>
          <html:html>
          ????
          <c:if?test="${name?!=?pass}">
          ???????${name}??
          <br>
          ???????${pass}?
          <br>
          ??? ?? <!-- <html:text property="in" ></html:text> -->
          ????</c:if>
          </html:html>





          ant直接把他放在 eclipes 工程的根目錄下 build.xml
          ???
          但有有3個參數要設置 tomcat.home? Tomcat 的地址
          ??? ??? ??? ??? ??? ??? webapp.path 工程中的根目錄,下面有WEB-INF
          ??? ??? ??? ??? ??? ??? src 原代碼 (到時候jsp會翻譯成.java
          ??? ??? ??? ??? ??? ??? ??? ??? ??? 到這個目錄的 org.apache.jsp.jsp 下)
          <project?name="Webapp?Precompilation"?default="all"?basedir=".">?

          ??
          <!--?tomcat?dir?-->
          ??
          <property?name="tomcat.home"?value="D:\Tomcat?5.0"/>
          ??
          ??
          <!--?this=..//WEB-INF?(in?eclipes)??-->
          ??
          <property?name="webapp.path"?value=".\WebRoot"/>
          ??
          <!--?src?(in?eclipes)?-->
          ??
          <property?name="src"?value="./src"/>

          ??
          <target?name="jspc">?
          ????
          <taskdef?classname="org.apache.jasper.JspC"?name="jasper2"?>?
          ??????
          <classpath?id="jspc.classpath">?
          ????????
          <pathelement?location="${java.home}/../lib/tools.jar"/>?
          ????????
          <fileset?dir="${tomcat.home}/bin">?
          ??????????
          <include?name="*.jar"/>?
          ????????
          </fileset>?
          ????????
          <fileset?dir="${tomcat.home}/server/lib">?
          ??????????
          <include?name="*.jar"/>?
          ????????
          </fileset>?
          ????????
          <fileset?dir="${tomcat.home}/common/lib">?
          ??????????
          <include?name="*.jar"/>?
          ????????
          </fileset>?
          ??????
          </classpath>?
          ????
          </taskdef>?

          ????
          <jasper2?
          ?????????????
          validateXml="false"?
          ?????????????uriroot
          ="${webapp.path}"?
          ?????????????webXmlFragment
          ="${webapp.path}/WEB-INF/generated_web.xml"?
          ?????????????outputDir
          ="${src}"?/>?
          ??
          </target>

          ??
          <target?name="compile">

          ????
          <mkdir?dir="${webapp.path}/WEB-INF/classes"/>
          ????
          <mkdir?dir="${webapp.path}/WEB-INF/lib"/>

          ????
          <javac?destdir="${webapp.path}/WEB-INF/classes"
          ???????????optimize
          ="off"
          ???????????debug
          ="on"?failonerror="false"
          ???????????srcdir
          ="${src}"?
          ???????excludes
          ="**/*.smap">
          ??????
          <classpath>
          ????????
          <pathelement?location="${webapp.path}/WEB-INF/classes"/>
          ????????
          <fileset?dir="${webapp.path}/WEB-INF/lib">
          ??????????
          <include?name="*.jar"/>
          ????????
          </fileset>
          ????????
          <pathelement?location="${tomcat.home}/common/classes"/>
          ????????
          <fileset?dir="${tomcat.home}/common/lib">
          ??????????
          <include?name="*.jar"/>
          ????????
          </fileset>
          ????????
          <pathelement?location="${tomcat.home}/shared/classes"/>
          ????????
          <fileset?dir="${tomcat.home}/shared/lib">
          ??????????
          <include?name="*.jar"/>
          ????????
          </fileset>
          ????????
          <fileset?dir="${tomcat.home}/bin">?
          ??????????
          <include?name="*.jar"/>?
          ????????
          </fileset>?
          ??????
          </classpath>
          ??????
          <include?name="**"?/>
          ??????
          <exclude?name="tags/**"?/>
          ????
          </javac>

          ??
          </target>

          ??
          <target?name="all"?depends="jspc,compile">
          ??
          </target>

          ??
          <target?name="cleanup">
          ??????
          <delete>
          ????????
          <fileset?dir="${webapp.path}/WEB-INF/src"/>
          ????????
          <fileset?dir="${webapp.path}/WEB-INF/classes/org/apache/jsp"/>
          ??????
          </delete>
          ??
          </target>

          </project>

          TEST
          package?jetty.test.supper;


          import?javax.servlet.http.HttpServletRequest;
          import?javax.servlet.http.HttpServletResponse;

          import?org.apache.jsp.jsp.MyJsp_jsp;

          import?com.meterware.httpunit.GetMethodWebRequest;
          import?com.meterware.httpunit.WebRequest;
          import?com.meterware.httpunit.WebResponse;
          import?com.meterware.servletunit.InvocationContext;
          import?com.meterware.servletunit.ServletRunner;
          import?com.meterware.servletunit.ServletUnitClient;

          import?junit.framework.TestCase;

          public?class?JSPCTest?extends?TestCase{
          ????
          private?InvocationContext?ic?=?null?;

          ????
          protected?void?setUp()?throws?Exception?{
          ????????ServletRunner?sr?
          =?new?ServletRunner();
          ???????????
          //?向環境中注冊 jsp
          ????????sr.registerServlet("HelloWorld",?MyJsp_jsp.class.getName());
          ????????ServletUnitClient??sc?
          =?sr.newClient();
          ????????WebRequest?request?
          =?new?GetMethodWebRequest("http://localhost/HelloWorld");
          ?????????ic?
          =?sc.newInvocation(request);

          ????}
          ????
          ????
          public?void?testJspC()?throws?Exception{
          ????????HttpServletRequest?re?
          =??ic?.getRequest();
          ????????HttpServletResponse?rq?
          =??ic.getResponse();
          ????????re.setAttribute(
          "name","liukaiyi");
          ????????re.setAttribute(
          "pass","123456");
          ????????
          ????????MyJsp_jsp?is?
          =?(MyJsp_jsp)?ic.getServlet();
          ????????is._jspService(re,rq);
          ????????
          ????????WebResponse?response?
          =?ic.getServletResponse();
          // 輸出
          ????????System.out.println(?response.getText()?);
          ????????
          ????}
          }

          結果是
          <html>
          ????
          ???????liukaiyi??
          <br>
          ???????123456?
          <br>
          ????
          ????
          </html>

          后面用 HttpUnit 和 HtmlUnit 測試就不用我說了把 網上一大把。




          posted @ 2007-11-02 17:11 G_G 閱讀(1233) | 評論 (0)編輯 收藏

          學習測試留個印


          測試 Servlet 使用:

          package ?jetty.test.supper;

          import ?java.io.File;

          import ?javax.servlet.http.HttpServletRequest;

          import ?jetty.LoginServlet;

          import ?com.meterware.httpunit.GetMethodWebRequest;
          import ?com.meterware.httpunit.WebConversation;
          import ?com.meterware.httpunit.WebRequest;
          import ?com.meterware.httpunit.WebResponse;
          import ?com.meterware.servletunit.InvocationContext;
          import ?com.meterware.servletunit.ServletRunner;
          import ?com.meterware.servletunit.ServletUnitClient;

          import ?junit.framework.TestCase;

          public ? class ?HttpUnitTest? extends ?TestCase?{
          ????
          public ? void ?ctestUrl() throws ?Exception{
          ????????System.out.println(
          " 直接獲取網頁內容: " );
          ????????WebConversation?wc?
          = ? new ?WebConversation();
          ????????WebResponse?wr?
          = ?wc.getResponse(? " http://www.google.com " ?);
          ????????System.out.println(?wr.getText()?);
          ????}
          ????
          ????
          public ? void ?testRun1() throws ?Exception{
          ????????System.out.println(
          " 無參數測試: " );
          ????????
          // 建立服務器
          ????????ServletRunner?sr? = ? new ?ServletRunner( new ?File( " WebRoot\\WEB-INF\\test.xml " ));
          ????????
          // 模擬客戶端
          ????????ServletUnitClient?sc? = ?sr.newClient();
          ????????
          // URL?定位
          ????????WebRequest?request??? = ? new ?GetMethodWebRequest(? " http://localhost:7000/cactusDemo " ?);
          ????????WebResponse?response?
          = ?sc.getResponse(?request?);
          ????????
          // 運行
          ????????System.out.println(response.getText() + " \n " );
          ????}
          ????
          ????
          public ? void ?testRun2() throws ?Exception{
          ????????System.out.println(
          " Session?和?request?測試: " );
          ????????ServletRunner?sr?
          = ? new ?ServletRunner( new ?File( " WebRoot\\WEB-INF\\test.xml " ));
          ????????ServletUnitClient?sc?
          = ?sr.newClient();
          ????????WebRequest?request???
          = ? new ?GetMethodWebRequest(? " http://localhost/cactusDemo " ?);
          ????????
          // Parameter?加參?use?
          ????????request.setParameter( " use " , " web " );
          ????????
          ????????
          // 取出?Servlet?:?LoginServlet?方法準備執行
          ????????InvocationContext?ic? = ?sc.newInvocation(?request?);
          ????????LoginServlet?se?
          = ?(LoginServlet)ic.getServlet();
          ????????HttpServletRequest?re?
          = ?ic.getRequest()?;

          ????????
          // request?session??加參?use?
          ????????re.setAttribute( " use " , " re " );
          ????????re.getSession(
          true ).setAttribute( " use " , " re " );

          ????????se.doGet(re,ic.getResponse());
          // 關鍵:運行測試方法
          ????????
          ????????
          // 獲取?out
          ????????WebResponse?response? = ?ic.getServletResponse();
          ????????System.out.println(response.getText());
          ????}
          }

          test.xml

          <? xml?version="1.0"?encoding="UTF-8" ?>
          < web-app? xmlns ="http://java.sun.com/xml/ns/j2ee" ?xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" ?version ="2.4" ?xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee???http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
          ??
          < servlet >
          ????
          < servlet-name > cactusDemo </ servlet-name >
          ????
          < servlet-class > jetty.LoginServlet </ servlet-class >
          ??
          </ servlet >

          ??
          < servlet-mapping >
          ????
          < servlet-name > cactusDemo </ servlet-name >
          ????
          < url-pattern > /cactusDemo </ url-pattern >
          ??
          </ servlet-mapping >
          </ web-app >


          測試 JSP:
          Cookbook 參考?
          不使用容器 進行 測試 jsp

          測試Struts:
          StrutsTestCase 參考?

          posted @ 2007-11-02 12:44 G_G 閱讀(1011) | 評論 (0)編輯 收藏

          僅列出標題
          共16頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 Last 
          主站蜘蛛池模板: 河津市| 井冈山市| 东乡族自治县| 墨竹工卡县| 呼伦贝尔市| 鹤庆县| 普洱| 塔城市| 宣化县| 舒兰市| 临汾市| 辽源市| 葵青区| 喜德县| 湖州市| 资溪县| 南昌市| 抚松县| 通渭县| 蓬溪县| 华安县| 西乡县| 县级市| 南华县| 阿坝| 永修县| 雷波县| 澄城县| 东辽县| 肇东市| 双桥区| 梁河县| 石林| 珲春市| 柳州市| 乌什县| 乌恰县| 昌都县| 潮州市| 卢氏县| 西林县|