<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 42,  comments - 84,  trackbacks - 0
      2009年3月19日
    CJDBC官網http://c-jdbc.ow2.org/
    cjdbc與hibernate的整合
    Configuring C-JDBC with Hibernate

    C-JDBC just has to be defined as any JDBC driver in Hibernate, leaving the syntax set to the proper database. Here is a configuration example to use Hibernate with a C-JDBC cluster made of Sybase backends:
    ## C-JDBC
    hibernate.dialect                 net.sf.hibernate.dialect.SybaseDialect
    hibernate.connection.driver_class org.objectweb.cjdbc.driver.Driver
    hibernate.connection.username     user
    hibernate.connection.password     pass
    hibernate.connection.url          jdbc:cjdbc://localhost:25322/test       
          
          轉自:http://lzj0470.javaeye.com/blog/445348
    一、前言
             cjdbc ( http://c-jdbc.objectweb.org/ ) 是一個open source的數據庫集群中間件,任何基于jdbc的應用都可以通過它透明地訪問數據庫集群,它可以進行各個節點之間的數據復制,并且可以實現各個節點的查詢負載均衡。通過這樣的軟件,偶們可以方便的實現RAIDb - Redundant Array of Inexpensive Database 廉價數據庫冗余陣列。
            大型應用隨著用戶量訪問越來越大,增加數據庫存儲和做好數據庫冗余可以增加系統的可靠性和性能。

            下面利用cjdbc,把兩臺對等的 Mysql 做 RAIDb,本文假定你已經搭建好兩臺對等的 Mysql環境并建好一個需要做集群冗余的數據庫 clusterdb。
    二、配置環境
    Mysql: 5.0.19, 并使用 InnoDB 作為 Mysql 引擎

    C-jdbc: 2.0.2

    Jdk: 1.5
    三、選擇合適的 C-JDBC RAIDb 機制

    cjdbc有幾種RAIDb的機制可以選擇,如RAIDb-0,RAIDb-1等等,可以根據不同的情況選擇不同的RAIDb的機制。各種 RAIDb的機制詳情請查看 cjdbc 的文檔和 Demo。

    RAIDb-1有如下功能:
    完全鏡像處理機制,每個節點上都有完整的數據庫結構,這種方式提供了最好的容錯處理,并且通過設置合理的Loading Balance策略,可以帶來查詢性能相當好的提高。但是由于對于任何的寫操作(create/update/delete),需要在各個節點上進行傳播復制,寫操作就會比原來慢一些了,如下圖:



    這里選擇 RAIDb-1 做為 cjdbc RAIDb 機制。

    四、給兩臺對等的 Mysql 建表,假設兩臺 Mysql 的IP分別是 192.168.0.2和192.168.0.3
    bash> mysql -h192.168.0.2 -uroot
    bash> use clusterdb
    bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
    bash> exit;

    bash> mysql -h192.168.0.3 -uroot
    bash> use clusterdb
    bash> create table user (id int(3) not null auto_increment primary key, name char(50) not null) engine innodb;
    bash> exit;
    五、在 Linux 下安裝 C-JDBC Controller
    bash> mkdir -p /usr/local/c-jdbc
    bash> cd /usr/local/c-jdbc
    bash> tar xvfz c-jdbc-2.0.2-bin.tar.gz
    bash> export CJDBC_HOME=/usr/local/c-jdbc
    六、把 Mysql JDBC Driver 放到 C-JDBC Controller 中來

    這里我們使用 mysql-connector-java-3.1.12-bin.jar 驅動程序,把它放到
    /usr/local/c-jdbc/drivers 中

    七、配置 C-JDBC Controller
    1、在 /usr/local/c-jdbc/config/virtualdatabase 目錄中創建 虛擬數據庫配置文件,并把它命名為 mysql-raidb1-distribution.xml,內容如下:

    <?xml version="1.0" encoding="UTF8"?>
    <!DOCTYPE C-JDBC PUBLIC "-//ObjectWeb//DTD C-JDBC 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-2.0.2.dtd">

    <C-JDBC>

    <VirtualDatabase name="myDB">

    <Distribution>
    </Distribution>

    <AuthenticationManager>
    <Admin>
    <User username="admin" password="c-jdbc"/>
    </Admin>
    <VirtualUsers>
    <VirtualLogin vLogin="boss" vPassword="boss"/>
    </VirtualUsers>
    </AuthenticationManager>

    <DatabaseBackend name="mysqlNode211" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.2/clusterdb" connectionTestStatement="select 1">
    <ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
    <VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
    </ConnectionManager>
    </DatabaseBackend>

    <DatabaseBackend name="mysqlNode213" driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://192.168.0.3/clusterdb" connectionTestStatement="select 1">
    <ConnectionManager vLogin="boss" rLogin="boss_user" rPassword="123456">
    <VariablePoolConnectionManager initPoolSize="10" minPoolSize="10" maxPoolSize="50" idleTimeout="30" waitTimeout="10"/>
    </ConnectionManager>
    </DatabaseBackend>

    <RequestManager>
    <RequestScheduler>
    <RAIDb-1Scheduler level="passThrough"/>
    </RequestScheduler>

    <LoadBalancer>
    <RAIDb-1>
    <WaitForCompletion policy="first"/>
    <RAIDb-1-LeastPendingRequestsFirst/>
    </RAIDb-1>
    </LoadBalancer>
    </RequestManager>

    </VirtualDatabase>

    </C-JDBC>

    2、在 /usr/local/c-jdbc/config/controller 目錄中創建 C-JDBC controller 配置文件,并把它命名為 uud-controller-distributed.xml,內容如下:

    <?xml version="1.0" encoding="UTF8" ?>
    <!DOCTYPE C-JDBC-CONTROLLER PUBLIC "-//ObjectWeb//DTD C-JDBC-CONTROLLER 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-controller-2.0.2.dtd">
    <C-JDBC-CONTROLLER>
    <Controller port="25323">
    <JmxSettings>
    <RmiJmxAdaptor port="1091"/>
    </JmxSettings>
    <VirtualDatabase configFile="mysql-raidb1-distribution.xml" virtualDatabaseName="myDB" autoEnableBackends="true"/>
    </Controller>
    </C-JDBC-CONTROLLER>

    3、在 /usr/local/c-jdbc/config/demo 目錄中創建啟動 C-JDBC controller sh,并把它命名為 uud-distributed-raidb1-controller.sh,內容如下:

    #!/bin/sh

    export CJDBC_HOME=/usr/local/c-jdbc
    export JAVA_HOME=/opt/jdk1.5

    cd $CJDBC_HOME/bin

    echo "Waiting for mysql servers to finish start up"

    echo "Starting Controller"
    ./controller.sh -f ../config/controller/uud-controller-distributed.xml &

    八、啟動 C-JDBC Controller
    bash> cd /usr/local/c-jdbc/demo
    bash> chmod u+rwx uud-distributed-raidb1-controller.sh
    bash> ./uud-distributed-raidb1-controller.sh &

    如果啟動正常,顯示的信息如下:

    Waiting for mysql servers to finish start up
    Starting Controller
    2006-04-20 10:32:21,126 INFO controller.core.Controller C-JDBC controller (2.0.2)
    2006-04-20 10:32:21,189 INFO controller.core.Controller Loading configuration file: ../config/controller/uud-controller-distributed.xml
    2006-04-20 10:32:21,278 INFO controller.core.Controller JMX is enabled
    2006-04-20 10:32:21,308 INFO controller.core.Controller Starting JMX server on host: 127.0.0.1
    2006-04-20 10:32:21,674 INFO backend.DatabaseBackend.mysqlNode211 Adding connection manager for virtual user "boss"
    2006-04-20 10:32:21,749 INFO backend.DatabaseBackend.mysqlNode213 Adding connection manager for virtual user "boss"
    2006-04-20 10:32:21,809 INFO controller.RequestManager.myDB Request manager will parse requests with the following granularity: NO_PARSING
    2006-04-20 10:32:21,814 INFO controller.virtualdatabase.myDB Configuring jgroups using: file:/usr/local/c-jdbc/config/jgroups.xml

    -------------------------------------------------------
    GMS: address is 127.0.0.1:32773
    -------------------------------------------------------
    2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB Group myDB connected to /127.0.0.1:32773[/127.0.0.1:32773]
    2006-04-20 10:32:26,476 INFO controller.virtualdatabase.myDB First controller in group myDB
    2006-04-20 10:32:26,477 WARN controller.virtualdatabase.myDB No recovery log has been configured, enabling backend without checkpoint.

    [1]+ Done ./uud-distributed-raidb1-controller.sh

    八、編寫 C-JDBC 客戶端程序
    1、把 C-JDBC Drivers(/usr/local/c-jdbc/drivers/c-jdbc-driver.jar) 放置到 CLASSPATH 中
    2、編寫插入 10 條數據到 Mysql 中,程序如下:

    /**
    * @author 胡榮華
    * @Company 世紀龍 21cn
    */
    package com.cjdbc.test;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.DriverManager;

    /**
    *
    */
    public class GenerateSampleData {

    public void generate() {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
    // 這是 c-jdbc drivers 的 Drivers class,注意不是 mysql 的 Drivers class
    Class.forName("org.objectweb.cjdbc.driver.Driver").newInstance();
    // 192.168.0.1 是 cjdbc controller 所在的 ip
    // myDB 是在 文件 mysql-raidb1-distribution.xml 里定義的 <VirtualDatabase name="myDB">
    // user=boss&password=boss 是在 文件 mysql-raidb1-distribution.xml 里定義的
    // <VirtualUsers>
    // <VirtualLogin vLogin="boss" vPassword="boss"/>
    // </VirtualUsers>

    String url = "jdbc:cjdbc://192.168.0.1:25323/myDB?user=boss&password=boss";

    conn = DriverManager.getConnection(url);

    try{
    conn.setAutoCommit(false);
    pstmt = conn.prepareStatement("insert into user values ('', ?)");

    int numOfTestRecords = 10;
    System.out.println("Update Record Start.");
    for (int i=0;i<numOfTestRecords;i++) {
    String newkey = i + "-" + i;
    pstmt.setString(1, "hua_" + newkey);
    pstmt.executeUpdate();

    }
    conn.commit();
    System.out.println("Update Record Success.");
    }
    catch(Exception ex){
    conn.rollback();
    ex.printStackTrace();
    }
    finally{
    try {
    if( pstmt != null )
    pstmt.close();
    if( conn != null)
    conn.close();
    }
    catch(Exception e) {
    e.printStackTrace();
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    GenerateSampleData g = new GenerateSampleData();
    g.generate();

    }

    }

    3、程序執行完畢后,分別到 Mysql Node 192.168.0.2 和 192.168.0.3 查詢,看看是否已同步了數據,如果兩個 Mysql Node 都有相同的數據,說明 C-JDBC 環境搭建成功。

    posted @ 2010-03-25 20:23 Dong 閱讀(402) | 評論 (0)編輯 收藏

    最近做了一個日志管理系統
    個人覺得采用了一套非常非常創新或者變態的開發方式,就像題目說的那樣,使用web的方法開發桌面應用程序,當然所有的技術都是基于java的。
    總結一下在整個項目中使用到的技術

    1、底層服務器的開發socket通信、http報文解析、反射機制(這些技術其實就是開發了一款小型的服務器,讓我們的web代碼能夠在本地運行起來,之所以選擇自己開發服務器的原因是,tomcat對于我們這個小桌面程序來說還是太大了點,如果作為桌面啟動,用戶不可能等待程序啟動這么長的時間,我給這個服務器起了個名字叫做jnet
    2、SWT,包括的瀏覽器控件和窗口等。
    3、使用installanywhere來打包程序,方便發布
    4、前臺展現數據使用了ext2.2
    5、擴展自己開發的服務器jnet,開發出自己的“action”,應該來說還是符合MVC的
    數據庫使用的是access,采用jdbc的方式訪問,你知道,如果在桌面軟件上使用hibernate...

    好了,不說廢話
    先貼出成品的效果圖

    1、桌面圖標


    2、登錄界面


    3、登錄效果圖


    4、主界面


    是不是覺得還不錯呢?JAVA也可以揚眉吐氣開發出這樣的桌面系統,可惜的是因為使用到了SWT,所以整個項目并不能跨平臺,放到linux系統下去運行。
    好了先理一理,發一張項目的原理圖


    看圖說話,我們整個項目的構架,就是這個樣子的,采用SWT封裝了IE作為前臺展現,后臺使用自己開發的服務器作為后臺來處理數據,中間數據通信方式當然就只能是http了

    所以中心思想就是,我開發了個服務器,這個服務器能夠讓用戶擴展自己的類,自己的方法,然后用戶就可以根據自己的需要來書寫自己的系統,最最最重要的就是,讓我們這些寫慣了J2EE的人能夠使用已經形成的思維來編寫桌面系統,我們可以不需要再去學swing和swt,可以使用html的方式來做前臺的布局,因為老實說我每次寫桌面程序的時候,總會把代碼弄得一團糟,在web系統上容易規規矩矩的寫出分層的代碼,桌面系統...布局就讓我頭大(我的意思是當你跑出去接私活干的時候,不用再學一套東西,呵呵)。

    好了,這個帖子只是一個簡單的介紹,整個系統具體的實現方式,會在后續的帖子中一步步解析,大家有什么意見或者建議可以給我留言,謝謝!
    posted @ 2009-03-19 15:16 Dong 閱讀(4365) | 評論 (23)編輯 收藏
    主站蜘蛛池模板: 四虎影院永久免费观看| 亚洲av永久无码精品国产精品| 羞羞视频在线免费观看| 国产v亚洲v天堂无码网站| www视频免费看| 永久免费观看黄网站| 亚洲欧洲国产精品你懂的| 免费高清av一区二区三区| 成人精品视频99在线观看免费| 亚洲一级毛片在线播放| 亚洲欧洲国产成人综合在线观看 | 亚洲国产成人久久笫一页| 日本免费中文字幕| 亚洲经典千人经典日产| 亚洲AV日韩AV永久无码久久| 在线看片无码永久免费aⅴ| 久久青草91免费观看| 妇女自拍偷自拍亚洲精品| 亚洲欧洲日韩在线电影| 亚洲国产av无码精品| 国产精品久久永久免费| 国产免费人成视频尤勿视频| 日韩亚洲产在线观看| 亚洲AV无一区二区三区久久| 国产精品免费播放| 日本黄网站动漫视频免费| 国产无限免费观看黄网站| 亚洲大码熟女在线观看| 亚洲视频一区二区在线观看| 久久久久久久亚洲精品| 全免费一级毛片在线播放| 久久国产精品免费观看| 香港经典a毛片免费观看看| 亚洲a视频在线观看| 午夜影视日本亚洲欧洲精品一区| 国产婷婷高清在线观看免费| 在线视频免费观看爽爽爽| 久久免费区一区二区三波多野| 一本一道dvd在线观看免费视频 | 国产成人毛片亚洲精品| 日本高清色本免费现在观看|