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

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

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

    Asktalk

    天行健,君子以自強不息!
    posts - 21, comments - 79, trackbacks - 0, articles - 2
      BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

    2005年7月30日

     

    這是一個目前最好的一個開源分頁標簽的實現---extremeTable標簽。今天談談它的Limit的設計架構思想。

    這個設計很通用,經過作者的多次重構,現在extremeTable的架構非常漂亮。這個標簽現在缺點是有些參數對mvc控制器屏蔽了,應提供一致的對外接口。不過整體上設計還是很精致的,面向對象來處理 html元素,與spring非常的默契,非常便于開發和測試。

    類圖關系

    1, 工廠LimitFactory

    TableLimitFactoryAbstractLimitFactoryLimitFactory

    TableLimitFactory是最終實現的工廠,它extendsAbstractLimitFactory抽象類,AbstractLimitFactory implementsLimitFactory接口。

    TableLimitFactory主要是用來實例化,通過構造函數傳入參數。同時創建Registry來完成jsp頁面參數傳入Registry。當然還有一個功能就是從web.xml的配置文件讀取一些全局參數。首先讀取配置文件參數,然后根據參數創建LimitRegistry對象。

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

    AbstractLimitFactory主要是用來獲取jsp頁面上設置的參數,比如分頁的信息(第幾頁,起始行,結束行,每頁顯示行數,查詢條件,排序條件等),當然他是通過工具類Registry來實現。

    2, Limit

    TableLimitLimit。其主要作用是一個參數參數器,就是把Registry對象的參數傳入TableLimit,考慮到分層吧,TableLimit是該標簽和action通信的橋梁。就像我們的j2ee項目vodaostrutsview等數據傳輸工具。

    3, Preferences

    TablePropertiesProperties 主要是來實現從web.xml配置的文件中讀取配置的一些全局參數。

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

    if (input != null) {

    properties.load(input);

    }

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

    這個設計也是大多數需要配置文件的系統常用的方法。

    4, Registry

    LimitRegistryAbstractRegistryRegistry

    這個體系結構和上面的工廠模式一樣,就是LimitRegistry主要是用來實例化,通過構造函數傳入參數。AbstractRegistry是實際實現類,獲取jsp表單提交的參數,并提供getter方法供Limit來使用。Registry是一個接口。

    所以這設計模式,我們可以來學習,

    經典表述:抽象類接口

    類:初始化,定義構造函數,傳入參數。

    抽象類:定義業務方法在此。

    接口:定義接口方法,這個不用多說。

    (作者:asktalk   來自 http://www.tkk7.com/askltak 原創文章,轉載請注明出處)

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

     

    下面是從struts的角度來談談spring自帶的web框架的使用。
    當然,我們在配置
    web框架前,需要把spring配置好,這里就不多說了。

    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

     

    如果沒有配置config.xml文件,那么其默認的配置文件為[ servlet-name ]-servlet.xml 。也就是我們這個配置的默認配置文件是Dispatcher-servlet.xml

    2.web框架的xml配置

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

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

    業務控制器,也就是struts中的action對象;

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

    視圖和視圖解析器,視圖就是jstl,velocity,xslt等,視圖解析器定義了action最終導航頁面的策略;

    模型,就是struts MVC結構中的model

    Command對象,類似于struts中的formBean

    2.1 Spring web框架與struts框架的區別

    下面列出了一些。例如,

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

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

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

     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<!—就是我們上面說的映射控制器 -->
    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不外乎繼承一些現成的類,來實現我們view部分的業務。
    作者:http://www.tkk7.com/asktalk

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

     

    最近我一直在研究Eclipse的架構體系,下面我們就來看看Eclipse的啟動機制吧

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

    解壓后的目錄結構如下圖,通過執行build.bat可以編譯出完整的Eclipse-sdk-3.3.1.1運行包,和我們網上下載的一樣。但是這個過程可能需要一個小時左右的時間,要有耐性哦。所有的插件工程目錄在plugins中,我們只需要導入現有工程即可把plugins下所有工程導入。

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

    將這些代碼解壓縮到一個空目錄里,然后導入到Source InsightProject里。     

    二、Eclipse啟動過程

    首先我們從Eclipse的啟動過程開始分析。

    1exe部分的引導

    eclipse.exeEclipse的啟動文件,是與平臺相關的可執行文件。它的功能比較簡單,主要是加載startup.jar文件,代碼在Eclipse源代碼的eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip,對應多個平臺。對于win32平臺,你可以直接運行win32目錄下的build.bat文件來編譯得到它(需要安裝C編譯器)。

    2java代碼部分的執行入口

    對于Eclipse 3.3.1.1版本來說,如果在eclipse目錄下沒有找到startup.jar,則直接執行org.eclipse.equinox.launcher.Main.main方法。

    當然我們可以在eclipse目錄下定制我們自己的啟動引導包startup.jar,現在Eclipse 3.3.1.1好像已經不建議這樣做了。如果有這個包,那么這個包將是java代碼的執行入口,你可以在命令行下運行java -jar startup.jar命令來啟動Eclipse。它的入口是org.eclipse.core.launcher.Main類,這個類最終執行的還是org.eclipse.equinox.launcher.Main.main方法。它對應的源代碼在org.eclipse.equinox.launcher目錄下的Main.java。關于此文件的定制詳細信息請查看eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip中的eclipse.c的注解部分。

    我們從main函數往后跟蹤,找到basicRun方法,這個是啟動的主要部分。

        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();     //設置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); //設置執行權限

            // 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);    //啟動Eclipse內核

        }

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

    先列出這些開源項目,隨后對其實現過程深入分析。

    1,Hibernate Synchronizer Eclipse Plugin   最近更新在2006.04.26
          http://hibernatesynch.sourceforge.net/   
          源代碼::pserver:anonymous@hibernatesynch.cvs.sourceforge.net:/cvsroot/hibernatesynch   
          HibernateSynchronizer3   為新項目,支持Eclipse3
          HibernateSynchronizer     為舊項目,支持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的數據庫管理工具相近。

    3,GmailClipse 一個Eclipse RCP 
         http://sourceforge.net/projects/gmclipse/
         源代碼::pserver:anonymous@gmclipse.cvs.sourceforge.net:/cvsroot/gmclipse    源代碼為空,沒有共享
         像hotmail一樣的郵件客戶端收發系統。其源代碼對于學習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
          官方網址:http://htmlparser.sourceforge.net/
         

         
         

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

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

    一、連接MYSQL。

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

    1、例1:連接到本機上的MYSQL。

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

    2、例2:連接到遠程主機上的MYSQL。假設遠程主機的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加個密碼ab12。首先在DOS下進入目錄mysqlbin,然后鍵入以下命令

    mysqladmin -uroot -password ab12

    注:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了。

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

    mysqladmin -uroot -pab12 password djg345

    三、增加新用戶。
    (注意:和上面不同,下面的因為是MYSQL環境中的命令,所以后面都帶一個分號作為命令結束符)

    格式:grant select on 數據庫.*  to  用戶名@登錄主機  identified by  \"密碼\"

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

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

    但例1增加的用戶是十分危險的,你想如某個人知道test1的密碼,那么他就可以在internet上的任何一臺電腦上登錄你的mysql數據庫并對你的數據可以為所欲為了,解決辦法見例2。

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

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

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

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



    在上篇我們講了登錄、增加用戶、密碼更改等問題。下篇我們來看看MYSQL中有關數據庫方面的操作。注意:你必須首先登錄到MYSQL中,以下操作都是在MYSQL的提示符下進行的,而且每個命令以分號結束。

    一、操作技巧

    1、如果你打命令時,回車后發現忘記加分號,你無須重打一遍命令,只要打個分號回車就可以了。也就是說你可以把一個完整的命令分成幾行來打,完后用分號作結束標志就OK。

    2、你可以使用光標上下鍵調出以前的命令。但以前我用過的一個MYSQL舊版本不支持。我現在用的是mysql-3.23.27-beta-win。

    二、顯示命令

    1、顯示數據庫列表。

    show databases;

    剛開始時才兩個數據庫:mysql和test。mysql庫很重要它里面有MYSQL的系統信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。

    2、顯示庫中的數據表:

    use mysql; //打開庫,學過FOXBASE的一定不會陌生吧

    show tables;

    3、顯示數據表的結構:

    describe 表名;

    4、建庫:

    create database 庫名;

    5、建表:

    use 庫名;

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

    6、刪庫和刪表:

    drop database 庫名;

    drop table 表名;

    7、將表中記錄清空:

    delete from 表名;

    8、顯示表中的記錄:

    select * from 表名;

    從文本文件執行SQL語句

    三、一個建庫和建表以及插入數據的實例

    drop database if exists school; //如果存在SCHOOL則刪除 
    create database school; //建立庫SCHOOL
    use school; //打開庫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
    ); //建表結束
    //以下為插入字段
    insert into teacher values('','glchengang','深圳一中','1976-10-10');
    insert into teacher values('','jack','深圳一中','1975-12-23');

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

    如果你在mysql提示符鍵入上面的命令也可以,但不方便調試。你可以將以上命令原樣寫入一個文本文件中假設為school.sql,然后復制到c:\\下,并在DOS狀態進入目錄\\mysql\\bin,然后鍵入以下命令:

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

    如果成功,空出一行無任何顯示;如有錯誤,會有提示。(以上命令已經調試,你只要將//的注釋去掉即可使用)。

    四、將文本數據轉到數據庫中

    1、文本數據應符合的格式:字段數據之間用tab鍵隔開,null值用\\n來代替.

    例:

    3 rose 深圳二中 1976-10-10

    4 mike 深圳一中 1975-12-23

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

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

    五、備份數據庫:(命令在DOS的\\mysql\\bin目錄下執行)

    mysqldump --opt school>school.bbb

    注釋:將數據庫school備份到school.bbb文件,school.bbb是一個文本文件,文件名任取,打開看看你會有新發現。

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

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

    InnoDB和MyISAM是在使用MySQL最常用的兩個表類型,各有優缺點,視具體應用而定。下面是已知的兩者之間的差別,僅供參考。

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

    InnoDB 的設計目標是處理大容量數據庫系統,它的 CPU 利用率是其它基于磁盤的關系數據庫引擎所不能比的。在技術上,InnoDB 是一套放在 MySQL 后臺的完整數據庫系統,InnoDB 在主內存中建立其專用的緩沖池用于高速緩沖數據和索引。 InnoDB 把數據和索引存放在表空間里,可能包含多個文件,這與其它的不一樣,舉例來說,在 MyISAM 中,表被存放在單獨的文件中。InnoDB 表的大小只受限于操作系統的文件大小,一般為 2 GB。

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

    InnoDB 現在(2001年十月)在一些大的需高性能的數據庫站點上被使用。著名的 Internet 新聞站點 Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存儲了超過 1 TB 的數據,而且另外的一個站點在 InnoDB 表上處理著平均每秒 800 次的插入/更新的負載。

    MyISAM
    MyISAM 是MySQL缺省存貯引擎 .

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

    以下是一些細節和具體實現的差別:

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

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

    任何一種表都不是萬能的,只用恰當的針對業務類型來選擇合適的表類型,才能最大的發揮MySQL的性能優勢。

     

     

    posted @ 2007-12-21 01:09 Asktalk 閱讀(2898) | 評論 (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,設置Java和Ant環境變量

    系統需要安裝J2SE 5.0

    3,執行安裝

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

    直接點擊運行glassfish-installer-v2-b33.jar無法安裝,必須在cmd命令環境下執行上述命令.

    執行完畢后在glassfish-installer-v2-b33.jar的同級目錄會出現一個glassfish文件夾,所有文件都已經解壓到這個目錄了,記著,只是解壓還沒有安裝哪!

     

    下面cd glassfish ,切換到glassfish目錄下,運行ant腳本setup.xml,執行真正的安裝過程.
    運行 ant -f setup.xml

    4,運行domain.

    大家都用過IBM Websphere 和BEA Weblogic,domain相當于服務器的一個具體實例,所有配置參數都在這里面.在步驟3中已經為我們生成了一個domain,在glassfish\domains\domain1目錄中.

    切換到cd glassfish/bin目錄下

    執行asadmin start -domain domain1 ,運行domain1.結果如下

     

    5,瀏覽控制臺

    打開瀏覽器,輸入 http://192.168.1.3:8080/ 看到如下圖:

     

     

    控制臺首頁: http://192.168.1.3:4848/
    user name: admin
    password: adminadmin

    控制臺首頁如下:

     

     

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

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

             系統架構設計師建立并改進系統邏輯結構和物理結構并參與優化這些結構,優化結構要根據主要的系統元素及其接口,并要權衡各種競爭因素和約束(如,性能、價格和環境影響),評估生成所需行為的可能方案。系統架構設計師的視野跨越整個系統以及內部和外部可能影響到開發的所有因素。考慮到要維持該廣闊的視野,系統分析員很少深入地參與系統的詳細工程,而傾向于把它們留給各個工程專業的其他專業人員。


    架構師.jpg

    系統架構師應具備的技能:

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

    系統架構設計師必須成熟有經驗,使其能夠完成對象分析和貿易研究以從多個解決方案中選擇最優解決方案,能夠在信息不完整或不明確時作出好的判斷,并能夠認識到“最好”通常是由政治、經濟以及工程考慮支配的。

    在處理由人員、硬件和軟件組合的系統時,系統架構設計師需要對任何解決方案中由人員和硬件組件施加的物理限制和約束有很強的判斷力。除了在系統工程方面的經驗(以及對聯合規程方面的知識,如操作調查和工程經濟)之外,系統架構設計師在軟件工程(由于它在現代系統中普遍存在)方面也要有堅實的基礎以及以下素質:

    • 在問題領域的經驗和對需求的深入理解。該專業技能可以在系統體系結構團隊中分攤。
    • 領導品質,用以推動跨各團隊的技術工作,在壓力下制定關鍵決策,并堅持貫徹這些決策。為達到效果,系統架構設計師和項目經理必須緊密協作,前者領導技術事宜,后者領導管理事宜。系統架構設計師必須有權作出技術決策。
    • 溝通技能,以贏得信任,進行說服、激勵和指導。系統架構設計師不是通過職位擁有權利,而是因為有目共睹的能力和成績。為了達到效果,系統架構設計師必須指揮項目團隊、項目經理、顧客和用戶團體,并管理團隊。
    • 面向目標和主動性,專注于成果。系統架構設計師是項目背后的技術驅動力,而不是顧問或夢想家。對于一名成功的系統架構設計師而言,其職業就是在壓力和許多不確定情況下作出一系列次最佳(但通常不是非常次最佳)決策。只有那些能夠專注于需做之事的人才會在這種環境中獲得成功。

    系統架構設計師角色具有系統設計人員的技能,但前者的技能重點是戰略性的,并不詳細。

    系統架構設計師與軟件設計人員的關系

    這兩個角色有很多相似點;實際上對于那些因規模或復雜程度而被看作“系統”開發、但仍是大型的或完整的軟件項目來說,這兩個角色是合為一體的。 然而,通常情況下,系統架構設計師比軟件設計人員的支持范圍大。 系統架構設計師必須對付物理上強加的約束,這些約束在軟件更易適應的領域中不存在。但是,正是軟件的靈活性使得體系結構演進具有可能的道路,這在以前是無法設想的。因此,軟件設計人員和系統架構設計師之間并不是嚴格的從屬關系:從軟件體系結構上考慮的反饋可能對系統的體系結構有深遠的影響;否認這一點將要承擔潛在的次最佳系統體系結構的風險,這些體系結構基于軟件體系結構可從需求的分配(由系統架構設計師完成)派生到計算平臺這一簡單的概念。但是以下說法也是正確的:在系統架構設計師和軟件設計人員的團隊中,系統架構設計師角色的職責要求系統架構設計師是團隊中的佼佼者,因為系統是最終產品。

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

         摘要: 摘要:此為我給公司內部新員工培訓的實戰演示例子,傻瓜級教程,講述了開發中的注意要點和常見錯誤,目的主要是讓他們適應企業級快速流水作業。由于是面對面講解,所以沒有詳細的文檔,現在簡單整理如下,希望對入門者有幫助。

    培訓的目標:對下面的開發過程和模式快速理解和應用。基于我的UML架構-----〉Java POJOs代碼------〉在pojos中做xdoclet標識-------〉基于ant生成*.hbm.xml文件(借助于eclipse可以自動化配置)------〉生成database schma和數據庫sql語句。逐步可以讓新員工過渡到java5的annotation來開發EJB3 .
      閱讀全文

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

    從多層內部類/嵌套的類中訪問外部類的成員

    本文用到名詞說明:

    內部類:Inner Class

    嵌套類:Static Nested Class (與標題上的嵌套的類不同,此處是專有名詞)

    靜態內部類:同嵌套類一個意思,一物兩個名字而已。

     

    在下面,我們看到對于B類來說他的嵌套層次是:AcessMethod-A-B

    那么訪問方法如下:

    class B {
          void h() {
            System.out.println("h()");
            g();
            f();
          }

    AcessMethodA來說對B,都是透明的,直接調用。

    嵌套類實例化的順序:有外到里!AcessMethod-A-B

    調用代碼如下:

        AcessMethod am = new AcessMethod();
        AcessMethod.A a = am.new A();
        AcessMethod.A.B b = a.new B();
        b.h();

    這里很有意思的一點,’.new’語法產生了正確的作用域。

     

    疑問:下面我們來看一下在B.h()中怎樣調用A1.g()方法?

     

    下面我們來看是否可以在B中調用A1.g()方法,在B.h()方法中原則上可以這樣調用A1.g()但是A1沒有實例化,所以這樣是錯誤的,也就是在B中無法調用A1中的非靜態方法了。

     

    假設:如果A1.g()static類型,那么在B中可以這樣調用A1種的方法:A1.this.g()

     

    但是這是不可能的,因為在A1.g()不可能定義為static類型,詳細看下面的問題1問題1:在什么情況下可以定義static 方法),這是一個缺點吧,但是可以使用嵌套類來解決了。

    /**
     
    從多層嵌套類中訪問外部類的成員.  .new“語法產生了正確的作用域
     */
    public class AcessMethod {

      private void f() {
        System.out.println("f()");
      }


      class A1 {
        private void g() {
          System.out.println("A1 - g()");
        }

    }


      class A {
        private void g() {
          System.out.println("g()");
        }

        class B {
          void h() {
            System.out.println("h()");
            g();
            f();
          }
        }
      }

      public static void main(String[] args) {
        AcessMethod am = new AcessMethod();
        AcessMethod.A a = am.new A();
        AcessMethod.A.B b = a.new B();
        b.h();
      }
    }

    運行結果:h()

    g()

    f()

     

    問題1:在什么情況下可以定義static 方法

     

    只有在頂層類中定義,或者在靜態內部類中定義,看下面的例子

    public class Test {
      static void t(){}
      class T2{
        //!
    錯誤,The method a cannot be declared static; 
        //static methods can only be declared in a static or top level type
        //static void a(){}
      }

    static class T3{
            static void a(){}
      }
    }

    posted @ 2006-02-19 19:24 Asktalk 閱讀(2987) | 評論 (0)編輯 收藏

         摘要: Thinking in java 第四版來了,增加了java 5.0的泛型,新語法等的討論,還加入了java6.0的最新技術,主要是對web2.0的支持方面。

    ... I wish I had this book when I started programming. I recommend this book to every student as well as beginner and intermediate Java programmer. This book would also serve as a guide to those who would wish to write the Sun Certified Java Programmer (SCJP) certification exam. It also introduces design patterns and testing which is really good since we see programmers writing 100’s of lines of code with no  閱讀全文

    posted @ 2006-02-17 10:20 Asktalk 閱讀(15959) | 評論 (11)編輯 收藏

    現實的發票有三部分組成:頭部分,主題部分(數據部分),尾部分;不同的對象打印出來的頭和尾是不一樣的,但是主體部分是一樣,那么要實現這樣的需求,就應該采用裝飾模式,下面是UML圖示。
    下面是一個發票打印系統,其中
    SalesOrder是發票的主體,也就是中間的數據部分
    HeaderDecorator,HeaderDecorator1是頭部分樣式;
    FooterDecorator,FooterDecorator2是尾部分樣式;
    OrderLine是主體中的單列數據;

    printinvoice.gif

    對IBM RSA與Together2006的比較:
    IBM RSA:
    1,比較易用,外觀漂亮,可以很方便調整顏色:
    2,運行速度比較快,相比較    Together2006;
    3,智能化技術非常低,在反向工程中最明顯;
    4,不支持Java5.0技術;

    Together2006(上圖Together2006實現):
    1,智能化技術非常高,沒發現出現低級錯誤,在反向工程中最明顯;
    2,支持Java5.0技術;
    3,運行速度慢,有時候讓人難以接受;

    先寫到這,有時間接著寫。。。
                  

    posted @ 2006-02-14 23:41 Asktalk 閱讀(2984) | 評論 (5)編輯 收藏

         摘要: J2EE開發正在變得越來越復雜,J2EE已經發展為一個API、復雜化的編程和配置的復雜網絡。這幾年,新的框架和方法不斷涌現從一定程度上緩解了開發的復雜和降低了開發的成本,但是要把這些Framework整合起來,如Struts,JSF,Webwork,Hibernate,JDO等等,并不是那么容易,就目前來看這個職位只有Spring能夠勝任,采用的就是IoC技術。那么反向控制到底什么?  閱讀全文

    posted @ 2006-02-14 15:48 Asktalk 閱讀(2448) | 評論 (2)編輯 收藏

    著名的開源站點無法訪問,打聽了不同地方的朋友,好像都不能訪問,聽朋友說被禁了,是不是真的禁了。
    不明白為什么?2002年前好像一直被禁,后來開放了,但是現在又無法訪問;大家試一下,自己的
    能訪問嗎?

    開源的權威站點啊,hibernate,spring ,等等都來自哪里啊!!

    posted @ 2006-01-19 23:50 Asktalk 閱讀(2884) | 評論 (9)編輯 收藏

         摘要: 在Hibernate中有三種狀態,對它的深入理解,才能更好的理解hibernate的運行機理,剛開始不太注意這些概念,后來發現它是重要的。對于理解hibernate,JVM和sql的關系有更好的理解。對于需要持久化的JAVA對象,在它的生命周期中有三種狀態,而且互相轉化。
      閱讀全文

    posted @ 2006-01-18 18:26 Asktalk 閱讀(3830) | 評論 (2)編輯 收藏

         摘要: JCL(Jakarta Commons Logging)和log4j不都是做log的嗎,怎么在jcl的源碼包中,還有個log4j的包?倒底怎么回事?看了jcl的用戶指南,就明白了。 1、Commons-Loggin簡介   Jakarta Commons Logging (JCL)提供的是一個日志(Log)接口(interface),同時兼顧輕量級和不依賴于具體的日志實現工具。 它提供給中間件/日志工具開發者一個簡單的日志操作抽象,允許程序開發人員使用不同的具體日志實現工具。用戶被假定已熟悉某種日志實現工具的更高級別的細節。JCL提供的接口,對其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,進行了簡單的包裝,此接口更接近于Log4J和LogKit的實現.   閱讀全文

    posted @ 2005-08-18 01:18 Asktalk 閱讀(2924) | 評論 (1)編輯 收藏

         摘要: 對于hibernate的one-to-one關系來說,在hibernate中有兩種方法:第一種就是用many-to-one來代替一對多,其實one-to-one也就是many-to-one的一種極限方式,若把many-to-one設置unique="true",則這時候的many-to-one實質上就是one-to-one;這里為什么能夠用many-to-one來代替one-to-one呢?最根本的是連個對象必須有一個字段相關聯,那么你也發現one-to-one中沒有column屬性,也就是不能夠把one-to-one的這種關系生成一個字段/屬性,而many-to-one可以,它有column屬性。所以,說了這么多,你應該明白為什么可以用many-to-one來代替one-to-one.  閱讀全文

    posted @ 2005-08-18 00:26 Asktalk 閱讀(5253) | 評論 (0)編輯 收藏

         摘要: CVS團隊開發:Window2003版用法  閱讀全文

    posted @ 2005-08-14 07:14 Asktalk 閱讀(4544) | 評論 (1)編輯 收藏

         摘要: 不知道為什么,復制到這里顏色沒了,所以就成下面的了。還可以湊或著看吧
    不用多說了,已經注釋很詳細了,希望對你有幫助  閱讀全文

    posted @ 2005-07-30 16:31 Asktalk 閱讀(3264) | 評論 (1)編輯 收藏

    主站蜘蛛池模板: 国产成人精品日本亚洲18图 | 久久A级毛片免费观看| 毛片在线全部免费观看| 222www在线观看免费| 国产免费毛不卡片| 亚洲VA综合VA国产产VA中| 久久伊人亚洲AV无码网站| 无码专区—VA亚洲V天堂| 亚洲AV一二三区成人影片| 亚洲AV色无码乱码在线观看| 2022国内精品免费福利视频| 91视频免费网址| 国产成人精品免费视频软件| 亚洲尤码不卡AV麻豆| 精品亚洲AV无码一区二区| 特级一级毛片免费看| 亚洲一区免费观看| 好爽好紧好大的免费视频国产| 亚洲色婷婷综合久久| 亚洲AV成人噜噜无码网站| 国产精品福利在线观看免费不卡 | 免费无码毛片一区二区APP| 最近2019中文字幕免费看最新 | 亚洲性线免费观看视频成熟| 无套内射无矿码免费看黄| 日韩精品无码免费一区二区三区 | 91久久精品国产免费一区| 午夜精品在线免费观看| 在线观看亚洲天天一三视| 亚洲av无码久久忘忧草| 国产精品成人免费观看| 老司机在线免费视频| 亚洲线精品一区二区三区影音先锋 | 中文字幕av无码不卡免费| 很黄很色很刺激的视频免费| 亚洲男人的天堂一区二区| 亚洲中文无码av永久| 不卡视频免费在线观看| 免费看AV毛片一区二区三区| 亚洲∧v久久久无码精品| 免费无遮挡无遮羞在线看|