隨筆-23  評論-6  文章-1  trackbacks-0

          ??????????????????????????????????????????????????????????測試源代碼

          CapabilityForConnection?主運行程序,讀取配置文件init.properties、reference.properties初始化參數(shù)。調用POOLTEST(一次完整的測試用例),計算其平均時間與使用連接數(shù)

          package?com.cea.repository.test;

          import
          ?org.apache.commons.logging.LogFactory;
          import
          ?org.apache.commons.logging.Log;
          import
          ?java.util.Properties;
          import
          ?java.io.FileInputStream;
          import
          ?java.io.InputStream;

          public?class
          ?CapabilityForConnection?{
          ????
          private?static?Log?log?=?LogFactory.getLog(CapabilityForConnection.class
          );
          ????
          /**

          ?????*?計算一次測試所消耗的時間
          ?????
          */
          ????
          public?static?long?times?=?0;
          ????
          /**

          ?????*?連接數(shù)
          ?????
          */
          ????
          public?static?long?psize?=?0;

          ????
          public?static?void?main(String[]?args)?throws
          ?Exception?{
          ????????
          /**

          ?????????*?運行的次數(shù)
          ?????????
          */
          ????????
          int?size?=?1;
          ????????
          /**

          ?????????*?見POOLTEST說明
          ?????????
          */
          ????????
          int?execsum?=?0;
          ????????
          /**

          ?????????*?見POOLTEST說明
          ?????????
          */
          ????????
          int?opencon?=?0;
          ????????
          /**

          ?????????*?execsum對應properties的命名
          ?????????
          */
          ????????String?execs?
          =?null;
          ????????
          /**

          ?????????*?opencon對應properties的命名
          ?????????
          */
          ????????String?openc?
          =?null;

          ????????
          long?sumtime?=?0
          ;
          ????????Properties?prop?
          =?initProperty("reference.properties"
          );
          ????????Properties?init?
          =?initProperty("init.properties"
          );

          ????????
          if?(init.size()?>?0
          )?{
          ????????????Object?o?
          =?init.get("init"
          );
          ????????????size?
          =
          ?Integer.parseInt(o.toString());
          ????????????execs?
          =?init.get("name0"
          ).toString();
          ????????????openc?
          =?init.get("name1"
          ).toString();
          ????????}

          ????????
          for?(int?i?=?0;?i?<?prop.size()?/?2;?i++
          )?{
          ????????????execsum?
          =?Integer.parseInt(prop.getProperty(execs?+
          ?i).toString());
          ????????????opencon?
          =?Integer.parseInt(prop.getProperty(openc?+
          ?i).toString());
          ????????????sumtime?
          =?0
          ;
          ????????????psize?
          =?0
          ;
          ????????????log.info(
          ""?+?(i?+?1)?+?"組數(shù)據:"
          );
          ????????????log.info(
          "并發(fā)應用數(shù):"?+?execsum?+?"?模擬連接數(shù):"?+
          ?opencon);

          ????????????String[]?reference?
          =?{""?+?execsum,?""?+
          ?opencon};
          ????????????
          for?(int?j?=?0;?j?<?size;?j++
          )?{
          ????????????????times?
          =?0
          ;
          ????????????????PoolTest.main(reference);
          ????????????????sumtime?
          +=
          ?times;
          ????????????}
          ????????????log.info(
          ""?+?(i?+?1)?+?"組數(shù)據共執(zhí)行"?+?size?+?"次;平均耗時為:"?+

          ?????????????????????sumtime?
          /?(size?*?execsum)?+?"毫秒");
          ????????????log.info(
          "平均使用"?+?psize?/?size?+?"個連接"
          );

          ????????}
          ????}

          ????
          private?static?Properties?initProperty(String?filename)?throws
          ?Exception?{
          ????????InputStream?is?
          =?new
          ?FileInputStream(filename);
          ????????Properties?prop?
          =?new
          ?Properties();
          ????????prop.load(is);
          ????????
          return
          ?prop;

          ????}
          }

          POOLTEST計算一次完整過程耗時,統(tǒng)計消耗的連接
          package?com.cea.repository.test;

          import
          ?com.cea.repository.test.testdata.MainExecute;
          import
          ?java.util.HashMap;
          import
          ?java.util.Map;
          import
          ?com.cea.repository.connection.PoolSupper;
          import
          ?org.apache.commons.logging.LogFactory;
          import
          ?org.apache.commons.logging.Log;
          /**

          ?*
          ?*?

          Title:?連接池性能測試


          ?*
          ?*?

          Description:?測試不合理的利用連接對WEB應用所造成影響.


          ?*
          ?*?

          Copyright:?Copyright?(c)?2005


          ?*
          ?*?

          Company:?


          ?*
          ?*?
          @author?小舟
          ?*?
          @version
          ?1.0
          ?
          */

          public?class?PoolTest?extends?Thread?{
          ????
          private?static?Log?log?=?LogFactory.getLog(PoolTest.class
          );
          ????
          /**

          ?????*?并發(fā)執(zhí)行MainExecute的數(shù)量
          ?????
          */
          ????
          private?static?int?EXECUTESUM?=?35;
          ????
          /**

          ?????*?一次MainExecute執(zhí)行所請求的連接數(shù)
          ?????
          */
          ????
          public?static?int?CONNECTIONS?=?3;
          ????
          /**

          ?????*?記錄所使用的連接
          ?????
          */
          ????
          public?static?Map?poolTestMap?=?new?HashMap();
          ????
          /**

          ?????*?第sum次執(zhí)行MainExecute所需要的時間
          ?????
          */
          ????
          public?int?sum?=?0;

          ????
          public?void
          ?run()?{
          ????????
          try
          ?{
          ????????????
          long?s?=
          ?System.currentTimeMillis();
          ????????????com.cea.repository.test.testdata.MainExecute.main(
          null
          );
          ????????????
          long?t?=?System.currentTimeMillis()?-
          ?s;
          ????????????CapabilityForConnection.times?
          +=
          t;
          //
          ????????????if(CapabilityForConnection.times?//????????????????CapabilityForConnection.times?=?t;
          //
          ????????????}

          //
          ????????????log.info("time"?+?(++sum)?+?":"?+
          //???????????????????????????????(System.currentTimeMillis()?-?s));

          ????????}?catch?(Exception?ex)?{
          ????????}
          ????}

          ????
          public?static?void?main(String[]?args)?throws
          ?Exception?{
          ????????
          if(args!=?null?&&?args.length>1
          ){
          ????????????EXECUTESUM?
          =?Integer.parseInt(args[0
          ]);
          ????????????CONNECTIONS?
          =?Integer.parseInt(args[1
          ]);
          ????????}

          ????????PoolSupper.initPool();
          ????????startExec(EXECUTESUM);
          ????????
          //設定足夠長的時間等待所有程序執(zhí)行完,得到準確的并發(fā)執(zhí)行所消耗的時間

          ????????try?{
          ????????????Thread.sleep(
          6000
          );
          ????????}?
          catch
          ?(InterruptedException?ex)?{
          ????????????ex.printStackTrace();
          ????????}
          ????????log.info(
          "運行平均耗時:"?+?CapabilityForConnection.times/
          EXECUTESUM);
          ????????
          //如果條件成立,證明連接沒有被回收,只要存在一個相同的,就證明連接被重復利用了

          ????????CapabilityForConnection.psize?+=poolTestMap.size();
          ????????
          if?(poolTestMap.size()?==
          ?EXECUTESUM)?{
          ????????????log.info(
          "不存在重復使用的連接,共創(chuàng)建"?+?poolTestMap.size()+?"個連接"
          ?);
          ????????}?
          else
          ?{
          ????????????log.info(
          "共使用"?+?poolTestMap.size()+?"個連接"
          ?);
          ????????}
          ????????clear();
          ????}

          ????
          private?static?void?startExec(int
          ?EXECUTESUM)?{
          ????????
          int?i?=?0
          ;
          ????????
          while?(i?<
          ?EXECUTESUM)?{
          ????????????
          if?(i++?<
          ?EXECUTESUM)?{
          ????????????????
          try
          ?{
          ????????????????????
          new
          ?PoolTest().start();
          ????????????????}?
          catch
          ?(Exception?ex2)?{
          ????????????????}
          ????????????}
          ????????}
          ????}
          ????
          private?static?void
          ?clear()?{
          ????????poolTestMap?
          =?new
          ?HashMap();
          ????}


          }

          簡單的不能再簡單的測試代碼:
          package?com.cea.repository.test.testdata;

          import
          ?com.cea.repository.connection.drive.ConnectionFactory;
          import
          ?java.sql.Connection;
          import
          ?java.sql.Statement;
          import
          ?java.sql.ResultSet;
          import
          ?java.sql.PreparedStatement;
          import
          ?java.util.HashMap;
          import
          ?java.util.Map;
          import
          ?java.util.List;
          import
          ?java.util.ArrayList;
          import
          ?com.cea.repository.test.PoolTest;
          import
          ?com.cea.repository.connection.poolpository.PoolFactory;

          /**

          ?*?
          ?*?

          Title:?


          ?*?

          Description:?


          ?*?

          Copyright:?Copyright?(c)?2004


          ?*?

          Company:?cea


          ?*?
          @author?小舟
          ?*?
          @version
          ?1.0
          ?
          */

          public?class?MainExecute?{
          ????
          public?static?void?main(String[]?args)?throws
          ?Exception?{
          ???????testConnection();
          ????}

          ????
          static?void?testConnection()?throws
          ?Exception?{
          ????????
          for?(int?i?=?0;?i?<?PoolTest.CONNECTIONS;?i++
          )?{
          ????????????Connection?con?
          =
          ?PoolFactory.newInstance();
          ????????????
          //這里的改變直接影響連接的復用

          ????????????Thread.sleep(50);
          ????????????PoolTest.poolTestMap.put(con.toString(),?
          ""
          );
          ????????????con.close();
          ????????}
          ????}

          }

          三個配置文件的內容:
          init.properties文件
          #運行的次數(shù)
          init
          =5

          #并發(fā)執(zhí)行MainExecute的數(shù)量所匹配的名字
          name0
          =execsum
          #一次MainExecute執(zhí)行所請求的連接數(shù)所匹配的名字
          name1
          =opencon

          reference.properties文件
          #過濾數(shù)據
          execsum0
          =10

          opencon0
          =1
          #第一次測試數(shù)據
          execsum1
          =100
          opencon1
          =6
          #第二次測試數(shù)據
          execsum2
          =85
          opencon2
          =9
          #第三次測試數(shù)據
          execsum3
          =140
          opencon3
          =3

          最后一個是pool-config.xml數(shù)據源配置:
          xml?version="1.0"?encoding="GB2312"?>
          <DataResources>
          ??
          <ResourceParams?dateIndentity="boat1">
          ????
          <defaultAutoCommit>falsedefaultAutoCommit>
          ????
          <initialSize>30initialSize>
          ????
          <maxActive>40maxActive>
          ????
          <minIdle>0minIdle>
          ????
          <maxIdle>18maxIdle>
          ????
          <maxWait>10000maxWait>
          ????
          <username>forumusername>
          ????
          <password>kingpassword>
          ????
          <driverClassName>oracle.jdbc.driver.OracleDriverdriverClassName>
          ????
          <url>jdbc:oracle:thin:@192.168.1.3:1521:gzesturl>
          ????
          <removeAbandoned>trueremoveAbandoned>
          ????
          <removeAbandonedTimeout>10removeAbandonedTimeout>
          ????
          <logAbandoned>truelogAbandoned>
          ??
          ResourceParams>
          DataResources>
          posted on 2005-09-26 22:36 ceaboat 閱讀(1656) 評論(0)  編輯  收藏 所屬分類: JAVA小結
          主站蜘蛛池模板: 贺兰县| 大连市| 巴东县| 清苑县| 汝阳县| 西乌珠穆沁旗| 博乐市| 北碚区| 蛟河市| 拉萨市| 乌兰察布市| 咸阳市| 建湖县| 华容县| 岐山县| 固安县| 象山县| 清流县| 平乐县| 都江堰市| 浏阳市| 梁山县| 绍兴县| 淮阳县| 古田县| 津南区| 准格尔旗| 淮滨县| 鄂托克前旗| 琼海市| 旌德县| 林甸县| 姚安县| 靖安县| 泾阳县| 积石山| 民县| 合江县| 赤峰市| 禹州市| 阳泉市|