Asktalk

          天行健,君子以自強(qiáng)不息!
          posts - 21, comments - 79, trackbacks - 0, articles - 2
            BlogJava :: 首頁(yè) ::  :: 聯(lián)系 :: 聚合  :: 管理

          2006年3月5日

           

          這是一個(gè)目前最好的一個(gè)開(kāi)源分頁(yè)標(biāo)簽的實(shí)現(xiàn)---extremeTable標(biāo)簽。今天談?wù)勊?/span>Limit的設(shè)計(jì)架構(gòu)思想。

          這個(gè)設(shè)計(jì)很通用,經(jīng)過(guò)作者的多次重構(gòu),現(xiàn)在extremeTable的架構(gòu)非常漂亮。這個(gè)標(biāo)簽現(xiàn)在缺點(diǎn)是有些參數(shù)對(duì)mvc控制器屏蔽了,應(yīng)提供一致的對(duì)外接口。不過(guò)整體上設(shè)計(jì)還是很精致的,面向?qū)ο髞?lái)處理 html元素,與spring非常的默契,非常便于開(kāi)發(fā)和測(cè)試。

          類圖關(guān)系

          1, 工廠LimitFactory

          TableLimitFactoryAbstractLimitFactoryLimitFactory

          TableLimitFactory是最終實(shí)現(xiàn)的工廠,它extendsAbstractLimitFactory抽象類,AbstractLimitFactory implementsLimitFactory接口。

          TableLimitFactory主要是用來(lái)實(shí)例化,通過(guò)構(gòu)造函數(shù)傳入?yún)?shù)。同時(shí)創(chuàng)建Registry來(lái)完成jsp頁(yè)面參數(shù)傳入Registry。當(dāng)然還有一個(gè)功能就是從web.xml的配置文件讀取一些全局參數(shù)。首先讀取配置文件參數(shù),然后根據(jù)參數(shù)創(chuàng)建LimitRegistry對(duì)象。

          this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);

          AbstractLimitFactory主要是用來(lái)獲取jsp頁(yè)面上設(shè)置的參數(shù),比如分頁(yè)的信息(第幾頁(yè),起始行,結(jié)束行,每頁(yè)顯示行數(shù),查詢條件,排序條件等),當(dāng)然他是通過(guò)工具類Registry來(lái)實(shí)現(xiàn)。

          2, Limit

          TableLimitLimit。其主要作用是一個(gè)參數(shù)參數(shù)器,就是把Registry對(duì)象的參數(shù)傳入TableLimit,考慮到分層吧,TableLimit是該標(biāo)簽和action通信的橋梁。就像我們的j2ee項(xiàng)目vodaostrutsview等數(shù)據(jù)傳輸工具。

          3, Preferences

          TablePropertiesProperties 主要是來(lái)實(shí)現(xiàn)從web.xml配置的文件中讀取配置的一些全局參數(shù)。

          InputStream input = this.getClass().getResourceAsStream(preferencesLocation);

          if (input != null) {

          properties.load(input);

          }

          其中preferencesLocation是路徑,在TableLimitFactory初始化時(shí)候,通過(guò)工具類TableModelUtils.getPreferencesLocation(context)獲取。

          這個(gè)設(shè)計(jì)也是大多數(shù)需要配置文件的系統(tǒng)常用的方法。

          4, Registry

          LimitRegistryAbstractRegistryRegistry

          這個(gè)體系結(jié)構(gòu)和上面的工廠模式一樣,就是LimitRegistry主要是用來(lái)實(shí)例化,通過(guò)構(gòu)造函數(shù)傳入?yún)?shù)。AbstractRegistry是實(shí)際實(shí)現(xiàn)類,獲取jsp表單提交的參數(shù),并提供getter方法供Limit來(lái)使用。Registry是一個(gè)接口。

          所以這設(shè)計(jì)模式,我們可以來(lái)學(xué)習(xí),

          經(jīng)典表述:抽象類接口

          類:初始化,定義構(gòu)造函數(shù),傳入?yún)?shù)。

          抽象類:定義業(yè)務(wù)方法在此。

          接口:定義接口方法,這個(gè)不用多說(shuō)。

          (作者:asktalk   來(lái)自 http://www.aygfsteel.com/askltak 原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處)

          posted @ 2007-12-26 16:17 Asktalk 閱讀(4611) | 評(píng)論 (5)編輯 收藏

           

          下面是從struts的角度來(lái)談?wù)?/span>spring自帶的web框架的使用。
          當(dāng)然,我們?cè)谂渲?/span>web框架前,需要把spring配置好,這里就不多說(shuō)了。

          1.web框架核心servletweb.xml中的配置。


           

           1<servlet>  
           2<servlet-name>Dispatcher</servlet-name>  
           3<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>   
           4<param-name>contextConfigLocation</param-name>   <param-value>/WEB-INF/Config.xml</param-value>
           5  </init-param> 
           6</servlet>  
           7
           8<servlet-mapping>  
           9<servlet-name>Dispatcher</servlet-name>  
          10<url-pattern>*.do</url-pattern>
          11 </servlet-mapping>
          12

           

          如果沒(méi)有配置config.xml文件,那么其默認(rèn)的配置文件為[ servlet-name ]-servlet.xml 。也就是我們這個(gè)配置的默認(rèn)配置文件是Dispatcher-servlet.xml

          2.web框架的xml配置

          spring web框架與struts最大的不同就是spring web框架根據(jù)分工,把每一種功能都定義為一種組件,所以在開(kāi)發(fā)過(guò)程中需要配置的東西就非常多;Spring中分為幾個(gè)角色:

          核心控制器,就是web框架的主 servlet

          業(yè)務(wù)控制器,也就是struts中的action對(duì)象;

          映射處理器,定義了訪問(wèn)路徑如何與webxml中的bean相匹配,就是定義了一種策略;

          視圖和視圖解析器,視圖就是jstl,velocity,xslt等,視圖解析器定義了action最終導(dǎo)航頁(yè)面的策略;

          模型,就是struts MVC結(jié)構(gòu)中的model

          Command對(duì)象,類似于struts中的formBean

          2.1 Spring web框架與struts框架的區(qū)別

          下面列出了一些。例如,

          Web框架要攔截*.do路徑,那么*.do如何與我們下面的bean匹配,就需要一個(gè)映射控制器。在struts中就是名字相同的匹配,不需要配置。

          action最后要導(dǎo)向到不同的頁(yè)面,在struts中我們用的是默認(rèn)的不需要在xml文件中配置,在spring中就需要配置視圖解析器。

          下面代碼中,ActioncommandClass配置的就是類似于struts中的formBean對(duì)象。

           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
           3 "http://www.springframework.org/dtd/spring-beans.dtd">
           4<beans>
           5 <!--Definition of View Resolver -->
           6 <bean id="viewResolver"
           7  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           8  <property name="viewClass"> 
           9   <value>org.springframework.web.servlet.view.JstlView</value>
          10  </property>
          11  <property name="prefix">
          12   <value>/WEB-INF/view/</value>
          13  </property>
          14  <property name="suffix">
          15   <value>.jsp</value>
          16  </property>
          17 </bean>
          18  
          19<!—就是我們上面說(shuō)的映射控制器 -->
          20 <!--Request Mapping -->
          21 <bean id="urlMapping"
          22  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
          23  <property name="mappings">
          24   <props>
          25    <prop key="/login.do">LoginAction</prop>
          26   </props>
          27  </property>
          28 </bean>
          29 
          30<!---類似于struts的action配置-->
          31 <!---Action Definition-->
          32 <bean id="LoginAction"
          33  class="com.maxway.action.LoginAction">
          34  <property name="commandClass">
          35   <value>com.maxway.action.LoginInfo</value>
          36  </property>
          37  <property name="fail_view">
          38   <value>loginfail</value>
          39  </property>
          40  <property name="success_view">
          41   <value>main</value>
          42  </property>
          43 </bean>
          44</beans>
          45


           

          3.代碼的編寫

          Action不外乎繼承一些現(xiàn)成的類,來(lái)實(shí)現(xiàn)我們view部分的業(yè)務(wù)。
          作者:http://www.aygfsteel.com/asktalk

          posted @ 2007-12-25 02:23 Asktalk 閱讀(4322) | 評(píng)論 (0)編輯 收藏

           

          最近我一直在研究Eclipse的架構(gòu)體系,下面我們就來(lái)看看Eclipse的啟動(dòng)機(jī)制吧

          1Eclipse源代碼       
          eclipse-sourceBuild-srcIncluded-3.3.1.1.zip   
          版本:3.3.1.1        大小:95.058MB
          下載地址:http://download.eclipse.org/eclipse/downloads

          解壓后的目錄結(jié)構(gòu)如下圖,通過(guò)執(zhí)行build.bat可以編譯出完整的Eclipse-sdk-3.3.1.1運(yùn)行包,和我們網(wǎng)上下載的一樣。但是這個(gè)過(guò)程可能需要一個(gè)小時(shí)左右的時(shí)間,要有耐性哦。所有的插件工程目錄在plugins中,我們只需要導(dǎo)入現(xiàn)有工程即可把plugins下所有工程導(dǎo)入。

          下面我們就先來(lái)研究一下Eclipse最核心的部分,就是RCP部分必須的插件。下面我列出了Eclipse RCP需要的插件。

          將這些代碼解壓縮到一個(gè)空目錄里,然后導(dǎo)入到Source InsightProject里。     

          二、Eclipse啟動(dòng)過(guò)程

          首先我們從Eclipse的啟動(dòng)過(guò)程開(kāi)始分析。

          1exe部分的引導(dǎo)

          eclipse.exeEclipse的啟動(dòng)文件,是與平臺(tái)相關(guān)的可執(zhí)行文件。它的功能比較簡(jiǎn)單,主要是加載startup.jar文件,代碼在Eclipse源代碼的eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip,對(duì)應(yīng)多個(gè)平臺(tái)。對(duì)于win32平臺(tái),你可以直接運(yùn)行win32目錄下的build.bat文件來(lái)編譯得到它(需要安裝C編譯器)。

          2java代碼部分的執(zhí)行入口

          對(duì)于Eclipse 3.3.1.1版本來(lái)說(shuō),如果在eclipse目錄下沒(méi)有找到startup.jar,則直接執(zhí)行org.eclipse.equinox.launcher.Main.main方法。

          當(dāng)然我們可以在eclipse目錄下定制我們自己的啟動(dòng)引導(dǎo)包startup.jar,現(xiàn)在Eclipse 3.3.1.1好像已經(jīng)不建議這樣做了。如果有這個(gè)包,那么這個(gè)包將是java代碼的執(zhí)行入口,你可以在命令行下運(yùn)行java -jar startup.jar命令來(lái)啟動(dòng)Eclipse。它的入口是org.eclipse.core.launcher.Main類,這個(gè)類最終執(zhí)行的還是org.eclipse.equinox.launcher.Main.main方法。它對(duì)應(yīng)的源代碼在org.eclipse.equinox.launcher目錄下的Main.java。關(guān)于此文件的定制詳細(xì)信息請(qǐng)查看eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip中的eclipse.c的注解部分。

          我們從main函數(shù)往后跟蹤,找到basicRun方法,這個(gè)是啟動(dòng)的主要部分。

              protectedvoid basicRun(String[] args) throws Exception {

                  System.getProperties().put("eclipse.startTime", Long.toString(System.currentTimeMillis())); //$NON-NLS-1$

                  commands = args;

                  String[] passThruArgs = processCommandLine(args);

                 

                  if (!debug)

                     // debug can be specified as system property as well

                     debug = System.getProperty(PROP_DEBUG) != null;

                  setupVMProperties();     //設(shè)置VM屬性

                  processConfiguration();   //讀取configuration/config.ini配置文件

                 

                  // need to ensure that getInstallLocation is called at least once to initialize the value.

                  // Do this AFTER processing the configuration to allow the configuration to set

                  // the install location. 

                  getInstallLocation();

                  // locate boot plugin (may return -dev mode variations)

                  URL[] bootPath = getBootPath(bootLocation);

                  

                  //Set up the JNI bridge. We need to know the install location to find the shared library

                  setupJNI(bootPath);

                 

                  //ensure minimum Java version, do this after JNI is set up so that we can write an error message

                  //with exitdata if we fail.

                  if (!checkVersion(System.getProperty("java.version"), System.getProperty(PROP_REQUIRED_JAVA_VERSION))) //$NON-NLS-1$

                      return;

                 

                  setSecurityPolicy(bootPath); //設(shè)置執(zhí)行權(quán)限

                  // splash handling is done here, because the default case needs to know

                  // the location of the boot plugin we are going to use

                  handleSplash(bootPath);

                  beforeFwkInvocation();

                  invokeFramework(passThruArgs, bootPath);    //啟動(dòng)Eclipse內(nèi)核

              }

          posted @ 2007-12-22 16:33 Asktalk 閱讀(4904) | 評(píng)論 (3)編輯 收藏

          先列出這些開(kāi)源項(xiàng)目,隨后對(duì)其實(shí)現(xiàn)過(guò)程深入分析。

          1,Hibernate Synchronizer Eclipse Plugin   最近更新在2006.04.26
                http://hibernatesynch.sourceforge.net/   
                源代碼::pserver:anonymous@hibernatesynch.cvs.sourceforge.net:/cvsroot/hibernatesynch   
                HibernateSynchronizer3   為新項(xiàng)目,支持Eclipse3
                HibernateSynchronizer     為舊項(xiàng)目,支持Eclipse2 

                本插件使用方法:http://dev2dev.bea.com.cn/bbsdoc/20060124187.html
               可以生成hibernate的所有配置文件和dao。基本流程是 hibernate.cfg.xml->xxx.hbm.xml->po and dao

          2,  SqlExplorer    最近更新 2007.09.08
               http://www.sqlexplorer.org/index.php
               http://sourceforge.net/projects/eclipsesql
               源代碼::pserver:anonymous@eclipsesql.cvs.sourceforge.net:/cvsroot/eclipsesql
               與myEclipse的數(shù)據(jù)庫(kù)管理工具相近。

          3,GmailClipse 一個(gè)Eclipse RCP 
               http://sourceforge.net/projects/gmclipse/
               源代碼::pserver:anonymous@gmclipse.cvs.sourceforge.net:/cvsroot/gmclipse    源代碼為空,沒(méi)有共享
               像hotmail一樣的郵件客戶端收發(fā)系統(tǒng)。其源代碼對(duì)于學(xué)習(xí)RCP有很大的幫助。

          4,  SpringIde    spring官方的IDE工具。
                源代碼:http://springide.org/project/browser/trunk

          5, Hibernate tools   hibernate官方IDE工具。
                 官方介紹:http://www.hibernate.org/268.html 
                 源代碼svn: http://anonhibernate.labs.jboss.com/branches/Branch_3_2/HibernateExt 

          6,   Html解析工具 HTML Parser
                官方網(wǎng)址:http://htmlparser.sourceforge.net/
               

               
               

          posted @ 2007-12-22 00:43 Asktalk 閱讀(1172) | 評(píng)論 (0)編輯 收藏

          有很多朋友雖然安裝好了mysql但卻不知如何使用它。在這篇文章中我們就從連接MYSQL、修改密碼、增加用戶等方面來(lái)學(xué)習(xí)一些MYSQL的常用命令。

          一、連接MYSQL。

          格式: mysql -h主機(jī)地址 -u用戶名 -p用戶密碼

          1、例1:連接到本機(jī)上的MYSQL。

          首先在打開(kāi)DOS窗口,然后進(jìn)入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車后提示你輸密碼,如果剛安裝好MYSQL,超級(jí)用戶root是沒(méi)有密碼的,故直接回車即可進(jìn)入到MYSQL中了,MYSQL的提示符是:mysql>

          2、例2:連接到遠(yuǎn)程主機(jī)上的MYSQL。假設(shè)遠(yuǎn)程主機(jī)的IP為:110.110.110.110,用戶名為root,密碼為abcd123。則鍵入以下命令:

          mysql -h110.110.110.110 -uroot -pabcd123

          (注:u與root可以不用加空格,其它也一樣)

          3、退出MYSQL命令: exit (回車)

          二、修改密碼。

          格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

          1、例1:給root加個(gè)密碼ab12。首先在DOS下進(jìn)入目錄mysqlbin,然后鍵入以下命令

          mysqladmin -uroot -password ab12

          注:因?yàn)殚_(kāi)始時(shí)root沒(méi)有密碼,所以-p舊密碼一項(xiàng)就可以省略了。

          2、例2:再將root的密碼改為djg345。

          mysqladmin -uroot -pab12 password djg345

          三、增加新用戶。
          (注意:和上面不同,下面的因?yàn)槭荕YSQL環(huán)境中的命令,所以后面都帶一個(gè)分號(hào)作為命令結(jié)束符)

          格式:grant select on 數(shù)據(jù)庫(kù).*  to  用戶名@登錄主機(jī)  identified by  \"密碼\"

          例1、增加一個(gè)用戶test1密碼為abc,讓他可以在任何主機(jī)上登錄,并對(duì)所有數(shù)據(jù)庫(kù)有查詢、插入、修改、刪除的權(quán)限。首先用以root用戶連入MYSQL,然后鍵入以下命令:

          grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";

          但例1增加的用戶是十分危險(xiǎn)的,你想如某個(gè)人知道test1的密碼,那么他就可以在internet上的任何一臺(tái)電腦上登錄你的mysql數(shù)據(jù)庫(kù)并對(duì)你的數(shù)據(jù)可以為所欲為了,解決辦法見(jiàn)例2。

          例2、增加一個(gè)用戶test2密碼為abc,讓他只可以在localhost上登錄,并可以對(duì)數(shù)據(jù)庫(kù)mydb進(jìn)行查詢、插入、修改、刪除的操作(localhost指本地主機(jī),即MYSQL數(shù)據(jù)庫(kù)所在的那臺(tái)主機(jī)),這樣用戶即使用知道test2的密碼,他也無(wú)法從internet上直接訪問(wèn)數(shù)據(jù)庫(kù),只能通過(guò)MYSQL主機(jī)上的web頁(yè)來(lái)訪問(wèn)了。

          grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";

          如果你不想test2有密碼,可以再打一個(gè)命令將密碼消掉。

          grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";



          在上篇我們講了登錄、增加用戶、密碼更改等問(wèn)題。下篇我們來(lái)看看MYSQL中有關(guān)數(shù)據(jù)庫(kù)方面的操作。注意:你必須首先登錄到MYSQL中,以下操作都是在MYSQL的提示符下進(jìn)行的,而且每個(gè)命令以分號(hào)結(jié)束。

          一、操作技巧

          1、如果你打命令時(shí),回車后發(fā)現(xiàn)忘記加分號(hào),你無(wú)須重打一遍命令,只要打個(gè)分號(hào)回車就可以了。也就是說(shuō)你可以把一個(gè)完整的命令分成幾行來(lái)打,完后用分號(hào)作結(jié)束標(biāo)志就OK。

          2、你可以使用光標(biāo)上下鍵調(diào)出以前的命令。但以前我用過(guò)的一個(gè)MYSQL舊版本不支持。我現(xiàn)在用的是mysql-3.23.27-beta-win。

          二、顯示命令

          1、顯示數(shù)據(jù)庫(kù)列表。

          show databases;

          剛開(kāi)始時(shí)才兩個(gè)數(shù)據(jù)庫(kù):mysql和test。mysql庫(kù)很重要它里面有MYSQL的系統(tǒng)信息,我們改密碼和新增用戶,實(shí)際上就是用這個(gè)庫(kù)進(jìn)行操作。

          2、顯示庫(kù)中的數(shù)據(jù)表:

          use mysql; //打開(kāi)庫(kù),學(xué)過(guò)FOXBASE的一定不會(huì)陌生吧

          show tables;

          3、顯示數(shù)據(jù)表的結(jié)構(gòu):

          describe 表名;

          4、建庫(kù):

          create database 庫(kù)名;

          5、建表:

          use 庫(kù)名;

          create table 表名 (字段設(shè)定列表);

          6、刪庫(kù)和刪表:

          drop database 庫(kù)名;

          drop table 表名;

          7、將表中記錄清空:

          delete from 表名;

          8、顯示表中的記錄:

          select * from 表名;

          從文本文件執(zhí)行SQL語(yǔ)句

          三、一個(gè)建庫(kù)和建表以及插入數(shù)據(jù)的實(shí)例

          drop database if exists school; //如果存在SCHOOL則刪除 
          create database school; //建立庫(kù)SCHOOL
          use school; //打開(kāi)庫(kù)SCHOOL
          create table teacher //建立表TEACHER
          (
          id int(3) auto_increment not null primary key,
          name char(10) not null,
          address varchar(50) default '深圳',
          year date
          ); //建表結(jié)束
          //以下為插入字段
          insert into teacher values('','glchengang','深圳一中','1976-10-10');
          insert into teacher values('','jack','深圳一中','1975-12-23');

          注:在建表中(1)將ID設(shè)為長(zhǎng)度為3的數(shù)字字段:int(3)并讓它每個(gè)記錄自動(dòng)加一:auto_increment并不能為空:not null而且讓他成為主字段primary key(2)將NAME設(shè)為長(zhǎng)度為10的字符字段(3)將ADDRESS設(shè)為長(zhǎng)度50的字符字段,而且缺省值為深圳。varchar和char有什么區(qū)別呢,只有等以后的文章再說(shuō)了。(4)將YEAR設(shè)為日期字段。

          如果你在mysql提示符鍵入上面的命令也可以,但不方便調(diào)試。你可以將以上命令原樣寫入一個(gè)文本文件中假設(shè)為school.sql,然后復(fù)制到c:\\下,并在DOS狀態(tài)進(jìn)入目錄\\mysql\\bin,然后鍵入以下命令:

          mysql -uroot -p密碼 < c:\\school.sql

          如果成功,空出一行無(wú)任何顯示;如有錯(cuò)誤,會(huì)有提示。(以上命令已經(jīng)調(diào)試,你只要將//的注釋去掉即可使用)。

          四、將文本數(shù)據(jù)轉(zhuǎn)到數(shù)據(jù)庫(kù)中

          1、文本數(shù)據(jù)應(yīng)符合的格式:字段數(shù)據(jù)之間用tab鍵隔開(kāi),null值用\\n來(lái)代替.

          例:

          3 rose 深圳二中 1976-10-10

          4 mike 深圳一中 1975-12-23

          2、數(shù)據(jù)傳入命令 load data local infile \"文件名\" into table 表名;

          注意:你最好將文件復(fù)制到\\mysql\\bin目錄下,并且要先用use命令打表所在的庫(kù)。

          五、備份數(shù)據(jù)庫(kù):(命令在DOS的\\mysql\\bin目錄下執(zhí)行)

          mysqldump --opt school>school.bbb

          注釋:將數(shù)據(jù)庫(kù)school備份到school.bbb文件,school.bbb是一個(gè)文本文件,文件名任取,打開(kāi)看看你會(huì)有新發(fā)現(xiàn)。

          后記:其實(shí)MYSQL的對(duì)數(shù)據(jù)庫(kù)的操作與其它的SQL類數(shù)據(jù)庫(kù)大同小異,您最好找本將SQL的書看看。我在這里只介紹一些基本的,其實(shí)我也就只懂這些了,呵呵。最好的MYSQL教程還是"晏子"譯的"MYSQL中文參考手冊(cè)"不僅免費(fèi)每個(gè)相關(guān)網(wǎng)站都有下載,而且它是最權(quán)威的。可惜不是象\"PHP4中文手冊(cè)\"那樣是chm的格式,在查找函數(shù)命令的時(shí)候不太方便。

          posted @ 2007-12-21 01:50 Asktalk 閱讀(877) | 評(píng)論 (0)編輯 收藏

          InnoDB和MyISAM是在使用MySQL最常用的兩個(gè)表類型,各有優(yōu)缺點(diǎn),視具體應(yīng)用而定。下面是已知的兩者之間的差別,僅供參考。

          innodb
          InnoDB 給 MySQL 提供了具有事務(wù)(commit)、回滾(rollback)和崩潰修復(fù)能力(crash recovery capabilities)的事務(wù)安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行鎖(locking on row level),提供與 Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs)。這些特性均提高了多用戶并發(fā)操作的性能表現(xiàn)。在InnoDB表中不需要擴(kuò)大鎖定(lock escalation),因?yàn)?InnoDB 的列鎖定(row level locks)適宜非常小的空間。InnoDB 是 MySQL 上第一個(gè)提供外鍵約束(FOREIGN KEY constraints)的表引擎。

          InnoDB 的設(shè)計(jì)目標(biāo)是處理大容量數(shù)據(jù)庫(kù)系統(tǒng),它的 CPU 利用率是其它基于磁盤的關(guān)系數(shù)據(jù)庫(kù)引擎所不能比的。在技術(shù)上,InnoDB 是一套放在 MySQL 后臺(tái)的完整數(shù)據(jù)庫(kù)系統(tǒng),InnoDB 在主內(nèi)存中建立其專用的緩沖池用于高速緩沖數(shù)據(jù)和索引。 InnoDB 把數(shù)據(jù)和索引存放在表空間里,可能包含多個(gè)文件,這與其它的不一樣,舉例來(lái)說(shuō),在 MyISAM 中,表被存放在單獨(dú)的文件中。InnoDB 表的大小只受限于操作系統(tǒng)的文件大小,一般為 2 GB。

          在 http://www.innodb.com/ 上可以找到 InnoDB 最新的信息。InnoDB 手冊(cè)的最新版本總是被放置在那里,并且在那里可以得到 InnoDB 的商業(yè)許可(order commercial licenses)以及支持。

          InnoDB 現(xiàn)在(2001年十月)在一些大的需高性能的數(shù)據(jù)庫(kù)站點(diǎn)上被使用。著名的 Internet 新聞?wù)军c(diǎn) Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存儲(chǔ)了超過(guò) 1 TB 的數(shù)據(jù),而且另外的一個(gè)站點(diǎn)在 InnoDB 表上處理著平均每秒 800 次的插入/更新的負(fù)載。

          MyISAM
          MyISAM 是MySQL缺省存貯引擎 .

          每張MyISAM 桌被存放在盤在三個(gè)文件 。frm 文件存放表格定義。 數(shù)據(jù)文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。

          以下是一些細(xì)節(jié)和具體實(shí)現(xiàn)的差別:

          1.InnoDB不支持FULLTEXT類型的索引。
          2.InnoDB 中不保存表的具體行數(shù),也就是說(shuō),執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來(lái)計(jì)算有多少行,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語(yǔ)句包含 where條件時(shí),兩種表的操作是一樣的。
          3.對(duì)于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
          4.DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。
          5.LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用。

          另外,InnoDB表的行鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語(yǔ)句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表,例如update table set num=1 where name like “%aaa%”

          任何一種表都不是萬(wàn)能的,只用恰當(dāng)?shù)尼槍?duì)業(yè)務(wù)類型來(lái)選擇合適的表類型,才能最大的發(fā)揮MySQL的性能優(yōu)勢(shì)。

           

           

          posted @ 2007-12-21 01:09 Asktalk 閱讀(2897) | 評(píng)論 (0)編輯 收藏

           

          1, 下載

          https://glassfish.dev.java.net/downloads/v2-b33.html選擇下載版本,這里下載的是windows版.

          Solaris SPARC Platform

          glassfish-installer-v2-b33.jar, size 70M

          Solaris x86 Platform

          glassfish-installer-v2-b33-sunos_x86.jar size 67M

          Windows Platform

          glassfish-installer-v2-b33-winnt.jar size 63M

          Linux Platform

          glassfish-installer-v2-b33-linux.jar size 64M

          MacOS Platform

          glassfish-installer-v2-b33-darwin.jar size 67M

           

          2,設(shè)置Java和Ant環(huán)境變量

          系統(tǒng)需要安裝J2SE 5.0

          3,執(zhí)行安裝

          java -Xmx256m -jar glassfish-installer-v2-b33.jar

          直接點(diǎn)擊運(yùn)行g(shù)lassfish-installer-v2-b33.jar無(wú)法安裝,必須在cmd命令環(huán)境下執(zhí)行上述命令.

          執(zhí)行完畢后在glassfish-installer-v2-b33.jar的同級(jí)目錄會(huì)出現(xiàn)一個(gè)glassfish文件夾,所有文件都已經(jīng)解壓到這個(gè)目錄了,記著,只是解壓還沒(méi)有安裝哪!

           

          下面cd glassfish ,切換到glassfish目錄下,運(yùn)行ant腳本setup.xml,執(zhí)行真正的安裝過(guò)程.
          運(yùn)行 ant -f setup.xml

          4,運(yùn)行domain.

          大家都用過(guò)IBM Websphere 和BEA Weblogic,domain相當(dāng)于服務(wù)器的一個(gè)具體實(shí)例,所有配置參數(shù)都在這里面.在步驟3中已經(jīng)為我們生成了一個(gè)domain,在glassfish\domains\domain1目錄中.

          切換到cd glassfish/bin目錄下

          執(zhí)行asadmin start -domain domain1 ,運(yùn)行domain1.結(jié)果如下

           

          5,瀏覽控制臺(tái)

          打開(kāi)瀏覽器,輸入 http://192.168.1.3:8080/ 看到如下圖:

           

           

          控制臺(tái)首頁(yè): http://192.168.1.3:4848/
          user name: admin
          password: adminadmin

          控制臺(tái)首頁(yè)如下:

           

           

          posted @ 2007-03-25 16:48 Asktalk 閱讀(1157) | 評(píng)論 (0)編輯 收藏

                   系統(tǒng)架構(gòu)設(shè)計(jì)師角色是技術(shù)上的領(lǐng)導(dǎo)和系統(tǒng)開(kāi)發(fā)創(chuàng)新遠(yuǎn)景的來(lái)源。
                   隨著現(xiàn)在技術(shù)的進(jìn)步,特別師銀行,電信都在搞省集中,那么集中意味這什么,數(shù)據(jù)量增大,并發(fā)增大,特別是現(xiàn)在在銀行,電信項(xiàng)目中為了達(dá)到平臺(tái)專業(yè)化,都是在向SOA靠攏。這意味這什么?接口增多了,而且都是基于總線,那么在這種情況下,軟件的管理和規(guī)劃設(shè)計(jì)和原來(lái)的都不一樣了,就需要更高級(jí)的架構(gòu)師。
                    這一年我一直在做電信的項(xiàng)目,以前一個(gè)97項(xiàng)目,包羅萬(wàn)象,什么都有。所以到了今年中國(guó)電信提出平臺(tái)專業(yè)化,都在向省集中靠攏,那么以前的一個(gè)項(xiàng)目就搞定了,現(xiàn)在變成了10幾個(gè)廠商都在,由于SOA還不成熟,基于總線,接口非常之多,數(shù)據(jù),模型等都需要一個(gè)技術(shù)專家組,也就是所謂的架構(gòu)師去換一種思路設(shè)計(jì)整體的架構(gòu)。特別是SOA有很多沒(méi)有一個(gè)很成熟的方案,所以架構(gòu)是在這個(gè)時(shí)候就需要具有透視未來(lái)的能力,以后壓力增大,系統(tǒng)可以承受嗎?很多都需要重新思考。需要一個(gè)正規(guī)的流程就顯的特別重要!!下面說(shuō)說(shuō)理想中的架構(gòu)師。應(yīng)該向這方面靠攏!

                   系統(tǒng)架構(gòu)設(shè)計(jì)師建立并改進(jìn)系統(tǒng)邏輯結(jié)構(gòu)和物理結(jié)構(gòu)并參與優(yōu)化這些結(jié)構(gòu),優(yōu)化結(jié)構(gòu)要根據(jù)主要的系統(tǒng)元素及其接口,并要權(quán)衡各種競(jìng)爭(zhēng)因素和約束(如,性能、價(jià)格和環(huán)境影響),評(píng)估生成所需行為的可能方案。系統(tǒng)架構(gòu)設(shè)計(jì)師的視野跨越整個(gè)系統(tǒng)以及內(nèi)部和外部可能影響到開(kāi)發(fā)的所有因素。考慮到要維持該廣闊的視野,系統(tǒng)分析員很少深入地參與系統(tǒng)的詳細(xì)工程,而傾向于把它們留給各個(gè)工程專業(yè)的其他專業(yè)人員。


          架構(gòu)師.jpg

          系統(tǒng)架構(gòu)師應(yīng)具備的技能:

          系統(tǒng)架構(gòu)設(shè)計(jì)師角色要求精通促成系統(tǒng)工程的多個(gè)規(guī)程,并在分析和解決方案合成方面技術(shù)嫻熟。系統(tǒng)架構(gòu)設(shè)計(jì)師還必須善于啟發(fā)式和歸納式推理(大部分系統(tǒng)體系結(jié)構(gòu)所依賴的),以及對(duì)其他工程規(guī)程的演繹推理。系統(tǒng)架構(gòu)設(shè)計(jì)師不只是地考慮解決方案的技術(shù),還考慮許多其他問(wèn)題,比如系統(tǒng)操作、性能、經(jīng)濟(jì)可行性、可維護(hù)性和后勤支持,以及有關(guān)這些問(wèn)題的政治、技術(shù)、社會(huì)、財(cái)務(wù)和環(huán)境因素(及其他因素)。 

          系統(tǒng)架構(gòu)設(shè)計(jì)師必須成熟有經(jīng)驗(yàn),使其能夠完成對(duì)象分析和貿(mào)易研究以從多個(gè)解決方案中選擇最優(yōu)解決方案,能夠在信息不完整或不明確時(shí)作出好的判斷,并能夠認(rèn)識(shí)到“最好”通常是由政治、經(jīng)濟(jì)以及工程考慮支配的。

          在處理由人員、硬件和軟件組合的系統(tǒng)時(shí),系統(tǒng)架構(gòu)設(shè)計(jì)師需要對(duì)任何解決方案中由人員和硬件組件施加的物理限制和約束有很強(qiáng)的判斷力。除了在系統(tǒng)工程方面的經(jīng)驗(yàn)(以及對(duì)聯(lián)合規(guī)程方面的知識(shí),如操作調(diào)查和工程經(jīng)濟(jì))之外,系統(tǒng)架構(gòu)設(shè)計(jì)師在軟件工程(由于它在現(xiàn)代系統(tǒng)中普遍存在)方面也要有堅(jiān)實(shí)的基礎(chǔ)以及以下素質(zhì):

          • 在問(wèn)題領(lǐng)域的經(jīng)驗(yàn)和對(duì)需求的深入理解。該專業(yè)技能可以在系統(tǒng)體系結(jié)構(gòu)團(tuán)隊(duì)中分?jǐn)偂?
          • 領(lǐng)導(dǎo)品質(zhì),用以推動(dòng)跨各團(tuán)隊(duì)的技術(shù)工作,在壓力下制定關(guān)鍵決策,并堅(jiān)持貫徹這些決策。為達(dá)到效果,系統(tǒng)架構(gòu)設(shè)計(jì)師和項(xiàng)目經(jīng)理必須緊密協(xié)作,前者領(lǐng)導(dǎo)技術(shù)事宜,后者領(lǐng)導(dǎo)管理事宜。系統(tǒng)架構(gòu)設(shè)計(jì)師必須有權(quán)作出技術(shù)決策。
          • 溝通技能,以贏得信任,進(jìn)行說(shuō)服、激勵(lì)和指導(dǎo)。系統(tǒng)架構(gòu)設(shè)計(jì)師不是通過(guò)職位擁有權(quán)利,而是因?yàn)橛心抗捕玫哪芰统煽?jī)。為了達(dá)到效果,系統(tǒng)架構(gòu)設(shè)計(jì)師必須指揮項(xiàng)目團(tuán)隊(duì)、項(xiàng)目經(jīng)理、顧客和用戶團(tuán)體,并管理團(tuán)隊(duì)。
          • 面向目標(biāo)和主動(dòng)性,專注于成果。系統(tǒng)架構(gòu)設(shè)計(jì)師是項(xiàng)目背后的技術(shù)驅(qū)動(dòng)力,而不是顧問(wèn)或夢(mèng)想家。對(duì)于一名成功的系統(tǒng)架構(gòu)設(shè)計(jì)師而言,其職業(yè)就是在壓力和許多不確定情況下作出一系列次最佳(但通常不是非常次最佳)決策。只有那些能夠?qū)W⒂谛枳鲋碌娜瞬艜?huì)在這種環(huán)境中獲得成功。

          系統(tǒng)架構(gòu)設(shè)計(jì)師角色具有系統(tǒng)設(shè)計(jì)人員的技能,但前者的技能重點(diǎn)是戰(zhàn)略性的,并不詳細(xì)。

          系統(tǒng)架構(gòu)設(shè)計(jì)師與軟件設(shè)計(jì)人員的關(guān)系

          這兩個(gè)角色有很多相似點(diǎn);實(shí)際上對(duì)于那些因規(guī)模或復(fù)雜程度而被看作“系統(tǒng)”開(kāi)發(fā)、但仍是大型的或完整的軟件項(xiàng)目來(lái)說(shuō),這兩個(gè)角色是合為一體的。 然而,通常情況下,系統(tǒng)架構(gòu)設(shè)計(jì)師比軟件設(shè)計(jì)人員的支持范圍大。 系統(tǒng)架構(gòu)設(shè)計(jì)師必須對(duì)付物理上強(qiáng)加的約束,這些約束在軟件更易適應(yīng)的領(lǐng)域中不存在。但是,正是軟件的靈活性使得體系結(jié)構(gòu)演進(jìn)具有可能的道路,這在以前是無(wú)法設(shè)想的。因此,軟件設(shè)計(jì)人員和系統(tǒng)架構(gòu)設(shè)計(jì)師之間并不是嚴(yán)格的從屬關(guān)系:從軟件體系結(jié)構(gòu)上考慮的反饋可能對(duì)系統(tǒng)的體系結(jié)構(gòu)有深遠(yuǎn)的影響;否認(rèn)這一點(diǎn)將要承擔(dān)潛在的次最佳系統(tǒng)體系結(jié)構(gòu)的風(fēng)險(xiǎn),這些體系結(jié)構(gòu)基于軟件體系結(jié)構(gòu)可從需求的分配(由系統(tǒng)架構(gòu)設(shè)計(jì)師完成)派生到計(jì)算平臺(tái)這一簡(jiǎn)單的概念。但是以下說(shuō)法也是正確的:在系統(tǒng)架構(gòu)設(shè)計(jì)師和軟件設(shè)計(jì)人員的團(tuán)隊(duì)中,系統(tǒng)架構(gòu)設(shè)計(jì)師角色的職責(zé)要求系統(tǒng)架構(gòu)設(shè)計(jì)師是團(tuán)隊(duì)中的佼佼者,因?yàn)橄到y(tǒng)是最終產(chǎn)品。

          posted @ 2006-12-18 19:39 Asktalk 閱讀(3404) | 評(píng)論 (2)編輯 收藏

               摘要: 摘要:此為我給公司內(nèi)部新員工培訓(xùn)的實(shí)戰(zhàn)演示例子,傻瓜級(jí)教程,講述了開(kāi)發(fā)中的注意要點(diǎn)和常見(jiàn)錯(cuò)誤,目的主要是讓他們適應(yīng)企業(yè)級(jí)快速流水作業(yè)。由于是面對(duì)面講解,所以沒(méi)有詳細(xì)的文檔,現(xiàn)在簡(jiǎn)單整理如下,希望對(duì)入門者有幫助。

          培訓(xùn)的目標(biāo):對(duì)下面的開(kāi)發(fā)過(guò)程和模式快速理解和應(yīng)用。基于我的UML架構(gòu)-----〉Java POJOs代碼------〉在pojos中做xdoclet標(biāo)識(shí)-------〉基于ant生成*.hbm.xml文件(借助于eclipse可以自動(dòng)化配置)------〉生成database schma和數(shù)據(jù)庫(kù)sql語(yǔ)句。逐步可以讓新員工過(guò)渡到j(luò)ava5的annotation來(lái)開(kāi)發(fā)EJB3 .
            閱讀全文

          posted @ 2006-03-05 21:27 Asktalk 閱讀(3692) | 評(píng)論 (8)編輯 收藏

          主站蜘蛛池模板: 义乌市| 涪陵区| 库尔勒市| 北票市| 罗山县| 正蓝旗| 砚山县| 寻甸| 昌平区| 林甸县| 休宁县| 阿鲁科尔沁旗| 晴隆县| 黄梅县| 台州市| 祁门县| 简阳市| 汨罗市| 伊宁市| 龙门县| 彰化市| 蒙山县| 新竹市| 福安市| 横山县| 黑龙江省| 麟游县| 富川| 永清县| 浦东新区| 昭觉县| 石阡县| 青海省| 大荔县| 英吉沙县| 吴堡县| 南召县| 张家港市| 大丰市| 油尖旺区| 商丘市|