posts - 193,  comments - 520,  trackbacks - 0
           
               摘要: ibatis DAO 框架提供了事務(wù)管理模塊。而這個事務(wù)管理可以應(yīng)用到很多場合,包括JDBC、Hibernate、JTA、SQLMAP等。下面以最簡單的JDBC來分析一下其如何實現(xiàn)事務(wù)管理。首先來看一段代碼: public class OrderService {  private DaoManager daoManager;...  閱讀全文
          posted @ 2006-01-20 17:50 ronghao 閱讀(7226) | 評論 (6)編輯 收藏
          一、執(zhí)行期根據(jù)方法的名稱來執(zhí)行方法
          下面的示例演示了這一操作:
          import java.lang.reflect.*;
          public class method2 {
             
          public int add(int a, int b) {
                 
          return a + b;
             }

             
          public static void main(String args[]) {
                 
          try {
                     Class cls 
          = Class.forName("method2");
                     Class partypes[] 
          = new Class[2];
                     partypes[
          0= Integer.TYPE;
                     partypes[
          1= Integer.TYPE;
                     Method meth 
          = cls.getMethod("add", partypes);
                     method2 methobj 
          = new method2();
                     Object arglist[] 
          = new Object[2];
                     arglist[
          0= new Integer(37);
                     arglist[
          1= new Integer(47);
                     Object retobj 
          = meth.invoke(methobj, arglist);
                     Integer retval 
          = (Integer) retobj;
                     System.out.println(retval.intvalue());
                 }
           catch (Throwable e) {
                     System.err.println(e);
                 }

             }

          }

          注:上面劃線的粗體字最好用Object methobj =  cls.newInstance();來代替,原因很明顯如果這個類及方法事先都是清楚的也不需要用reflection了
              假如一個程序在執(zhí)行的某處的時候才知道需要執(zhí)行某個方法,這個方法的名稱是在程序的運行過程中指定的 (例如,JavaBean 開發(fā)環(huán)境中就會做這樣的事),那么上面的程序演示了如何做到。上例中,getMethod 用于查找一個具有兩個整型參數(shù)且名為 add 的方法。找到該方法并創(chuàng)建了相應(yīng)的 Method 對象之后,在正確的對象實例中執(zhí)行它。執(zhí)行該方法的時候,需要提供一個參數(shù)列表,這在上例中是分別包裝了整數(shù) 37 和 47 的兩個 Integer 對象。執(zhí)行方法的返回的同樣是一個 Integer 對象,它封裝了返回值 84。

          二、執(zhí)行期創(chuàng)建新的對象

          對于構(gòu)造器,則不能像執(zhí)行方法那樣進行,因為執(zhí)行一個構(gòu)造器就意味著創(chuàng)建了一個新的對象 (準確的說,創(chuàng)建一個對象的過程包括分配內(nèi)存和構(gòu)造對象)。所以,與上例最相似的例子如下:

          import java.lang.reflect.*;
          public class constructor2 {
             
          public constructor2() {
             }

             
          public constructor2(int a, int b) {
                 System.out.println(
          "a = " + a + " b = " + b);
             }

             
          public static void main(String args[]) {
                 
          try {
                     Class cls 
          = Class.forName("constructor2");
                     Class partypes[] 
          = new Class[2];
                     partypes[
          0= Integer.TYPE;
                     partypes[
          1= Integer.TYPE;
                     Constructor ct 
          = cls.getConstructor(partypes);
                     Object arglist[] 
          = new Object[2];
                     arglist[
          0= new Integer(37);
                     arglist[
          1= new Integer(47);
                     Object retobj 
          = ct.newInstance(arglist);
                 }
           catch (Throwable e) {
                     System.err.println(e);
                 }

             }

          }

          三、改變字段(域)的值

          reflection 的還有一個用處就是改變對象數(shù)據(jù)字段的值。reflection 可以從正在運行的程序中根據(jù)名稱找到對象的字段并改變它,下面的例子可以說明這一點:

          import java.lang.reflect.*;
          public class field2 {
             
          public double d;
             
          public static void main(String args[]) {
                 
          try {
                     Class cls 
          = Class.forName("field2");
                     Field fld 
          = cls.getField("d");
                     field2 f2obj 
          = new field2();
                     System.out.println(
          "d = " + f2obj.d);
                     fld.setDouble(f2obj, 
          12.34);
                     System.out.println(
          "d = " + f2obj.d);
                 }
           catch (Throwable e) {
                     System.err.println(e);
                 }

             }

          }
          這個例子中,字段 d 的值被變?yōu)榱?12.34。
          實際開發(fā)時用Common BeanUtils
          posted @ 2006-01-17 17:41 ronghao 閱讀(586) | 評論 (0)編輯 收藏
           其實很早就有這個愿望了,只是一直沒有實施。在買筆記本還是自己配臺式機的問題上一直拿不定主意。去年十一的時候就打算買了,朋友說,你一天上班要接受電腦9、10個小時的輻射,下班回來還要接著輻射啊。去年一年的工作,給我印象最深的恐怕就是:學(xué)到很多東西,但大部分都未能實際實施。想一想,報表、搜索引擎、工作流、郵件、lunix、css、webservice自己都有做過。工作中交給你一個未實現(xiàn)過的功能實現(xiàn),google-->開源項目-->讀它的英文文檔-->跑出第一個demo-->應(yīng)用到自己的模塊中-->研究它的源碼,這個過程是一個很愜意的事情。但問題是不能深入。懂點皮毛根本沒什么用!呵呵,用公司的電腦學(xué)自己想學(xué)的東西根本就沒那個時間。
           買臺電腦,多寫代碼,多鉆研點東西,這就是今年的愿望。
          posted @ 2006-01-05 17:39 ronghao 閱讀(424) | 評論 (1)編輯 收藏

           項目終于上線運行了,但是還是問題多多,但還好都不是涉及到邏輯的大問題。這兩天把數(shù)據(jù)備份這塊重做了一下,原先是自己寫的一個線程池,功能其實就是每天對mysql進行備份(當(dāng)初設(shè)計為什么會把這個功能放到程序里實現(xiàn)??)。這完全是重復(fù)的造輪子!開始是用Jrontab重構(gòu)了下,后來討論后決定在程序里把這項功能刪除,改在Linux里寫個備份腳本。每天的晚上12點進行備份,然后本機一份,ftp到另一臺服務(wù)器一份。有段時間沒操作Linux了,結(jié)果好多命令都忘了,寒!為什么會重復(fù)的造輪子??

          posted @ 2005-12-28 18:19 ronghao 閱讀(826) | 評論 (4)編輯 收藏

          在數(shù)據(jù)庫里新建兩個表
          A、用戶表
          create table users (user_name varchar(20) not null,
                                         user_pass varchar(20) not null,
                                         PRIMARY KEY (user_name)) ;
          B、用戶與角色關(guān)聯(lián)表
          create table user_roles (user_name varchar(20) not null,
                                                  role_name varchar(20) not null,
                                                  PRIMARY KEY (user_name)) ;
          C、插入數(shù)據(jù)
          insert into users values('user1', 'password');
          insert into user_roles values('user1', 'manager');

          在tomcat的server.xml里加入描述
                <Realm  className="org.apache.catalina.realm.JDBCRealm"
                        driverName="org.gjt.mm.mysql.Driver"
                        connectionURL="jdbc:mysql://localhost/databaseName"
                        connectionName=yourname connectionPassword=yourpassword
                        userTable="users" userNameCol="user_name" userCredCol="user_pass"
                        userRoleTable="user_roles" roleNameCol="role_name" />

          在自己應(yīng)用程序的web.xml里加入描述(基于表單)
          <security-constraint>
            <web-resource-collection>
             <web-resource-name>My Test</web-resource-name>
             <url-pattern>/get.jsp</url-pattern>
            </web-resource-collection>
            <auth-constraint>
              <role-name>manager</role-name>    //能夠訪問的角色,可以多個
            </auth-constraint>
          </security-constraint>

          <login-config>
            <auth-method>FORM</auth-method>
              <realm-name>My Test</realm-name>
            <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/fail_login.html</form-error-page>  //認證失敗后跳轉(zhuǎn)的頁面
            </form-login-config>
          </login-config>

          登錄表單必須包含輸入用戶姓名和口令的字段,它們必須被分別命名為j_username和j_password,表單將這二個值發(fā)送給j_security_check邏輯名字。
            下面是一個該表單如何在HTML網(wǎng)頁中實現(xiàn)的例子:
          <form method="POST" action="j_security_check">
            <input  type="text" name="j_username">
            <input  type="password" name="j_password">
              <input  type="submit" value="確定"/>
          </form>

          這樣當(dāng)對get.jsp進行訪問時,tomcat就會自動轉(zhuǎn)到login.jsp頁面實現(xiàn)認證。對于簡單的認證,小型系統(tǒng),采用Tomcat實現(xiàn)容器內(nèi)認證是方便的。

          posted @ 2005-12-28 14:00 ronghao 閱讀(1418) | 評論 (3)編輯 收藏
          僅列出標(biāo)題
          共39頁: First 上一頁 31 32 33 34 35 36 37 38 39 下一頁 
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          關(guān)注工作流和企業(yè)業(yè)務(wù)流程改進。現(xiàn)就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

          常用鏈接

          留言簿(38)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          常去的網(wǎng)站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 康定县| 枞阳县| 荥经县| 蛟河市| 长岭县| 股票| 河北区| 长春市| 拜城县| 临沂市| 龙陵县| 石楼县| 保德县| 浠水县| 宁南县| 通山县| 高邮市| 浦北县| 巴中市| 大余县| 灯塔市| 正镶白旗| 海晏县| 龙胜| 南漳县| 泰顺县| 承德县| 沅江市| 吉木乃县| 汨罗市| 泰州市| 丹江口市| 武清区| 安庆市| 凤山县| 满城县| 台前县| 兰州市| 隆德县| 辽中县| 永兴县|