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

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

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

    all gone

    all gone

    2005年12月10日 #

    Ubuntu UTF8環境下搭建中文LaTeX環境

    1. 基本包的安裝
    sudo apt-get install tetex-base tetex-bin tetex-extra
    1. CJK包安裝
    sudo apt-get install latex-cjk-chinese
    1. CJK UTF8字體生成
    將下面的code復制到文件cvtfont.sh中:

    #!/bin/sh
    #
    # Origin By Edward G.J. Lee
    2001.11.25
    # http:
    //www.study-area.org/tips/latex/pdftex.html
    # This code is Public Domain.
    #
    # Enhanced by intron@intron.ac,
    2006.1.9
    # Modified
    for NetBSD by jungle@soforge.com, 2006.1.14
    # Italic support added by robert.zhangle@gmail.com,
    2006.5.19
    #

    if [ $# -ne 3 ]
    then

    cat
    << EOF
    Usage: `basename $
    0` font.ttf <TeX_Internal_Font_Name> <Tex_Font_Name>
    <TeX_Internal_Font_Name>: Used to name *.enc, *.afm, *.pfb, *.tfm & *.map
    <Tex_Font_Name>: Used in TeX source: \\CJKencfamily{UTF8}{Tex_Font_Name}

    An example: `basename $
    0` gbsn00lp.ttf gbsn00lp songpt1

    EOF

    exit
    1
    fi

    if ! which ttf2pt1; then
    echo
    "Please install pkgsrc fonts/ttf2pt1 before you can run me."
    exit
    1
    fi

    if ! which t1asm; then
    echo
    "Please install pkgsrc fonts/t1utils before you can run me."
    exit
    1
    fi

    if ! which extconv; then
    echo
    "Please install pkgsrc chinese/CJK before you can run me."
    exit
    1
    fi


    cat
    <<EOF
    ***************************************************************************
    * Please confirm that current working directory is EMPTY except scripts *
    * and HAS ENOUGH SPACE to contain so many intermediate files. *
    * If it is not empty, this script may DAMAGE INNOCENT FILES!!! *
    ***************************************************************************
    EOF

    read
    -p "Go ahead?[n]" a

    if [ "$a" != "y" ] && [ "$a" != "Y" ]; then
    exit
    0
    fi

    FONTFILENAME
    ="$1"
    FONTNAME
    ="$2"
    FONTTEXNAME
    ="$3"

    #TEXMFHOME
    =`kpsexpand '$TEXMFHOME'`
    TEXMFMAIN
    =`kpsexpand '$TEXMFMAIN'`
    TEXMFHOME
    ='/usr/share/texmf-tetex/'
    TTFONTFILEDIR
    =${TEXMFHOME}/fonts/truetype/chinese/
    ENCDIR
    =${TEXMFHOME}/fonts/enc/dvips/chinese/${FONTNAME}
    AFMDIR
    =${TEXMFHOME}/fonts/afm/chinese/${FONTNAME}
    TFMDIR
    =${TEXMFHOME}/fonts/tfm/chinese/${FONTNAME}
    PFBDIR
    =${TEXMFHOME}/fonts/type1/chinese/${FONTNAME}
    MAPDIR
    =${TEXMFHOME}/fonts/map/dvips/chinese

    UPDMAPCFG
    =${TEXMFHOME}/web2c/updmap.cfg

    if [ ! -f $UPDMAPCFG ]
    then
    SYSUPDMAPCFG
    =`kpsewhich -format 'web2c files' updmap.cfg`
    cp $SYSUPDMAPCFG $UPDMAPCFG
    fi

    CIDXMAP
    =${TEXMFHOME}/dvipdfm/config/cid-x.map

    if [ ! -f $CIDXMAP ]
    then
    touch $CIDXMAP
    fi

    CJKDIR
    =${TEXMFMAIN}/tex/latex/CJK/UTF8

    INSTALLDIRMODE
    ="-m 0755"
    INSTALLMODE
    ="-m 0644"

    FONTFILEBASENAME
    =`basename "$FONTFILENAME"`
    FDNAME
    =c70${FONTTEXNAME}.fd

    #MAPFILE
    =/usr/local/share/ttf2pt1/maps/cugb.map
    PLANENUM
    =255

    # Initialize ${FONTNAME}.map
    echo
    -n "" > ${FONTNAME}.map


    n
    =0

    echo
    "Generating subfonts from plane $n to plane $PLANENUM ..."

    while [ $n -le $PLANENUM ]
    do
    m
    =`printf %02x $n`

    echo
    -n "[$n]"

    SUBFONTNAME
    =${FONTNAME}${m}

    # Generate
    *.t1a *.afm *.enc
    ttf2pt1
    -GAE -pft -OHUBs -W0 -l plane+pid=3,eid=1,0x$m \\
    "$FONTFILENAME" ${SUBFONTNAME}

    # avoid dvips(k)(before v5.
    86) t1part module bug.
    perl
    -pi -e 's/_/Z/g' ${SUBFONTNAME}.t1a ${SUBFONTNAME}.afm

    # Generate
    *.pfb
    t1asm
    -b ${SUBFONTNAME}.t1a > ${SUBFONTNAME}.pfb 2>/dev/null

    # Generate
    *.tfm
    afm2tfm ${FONTNAME}$m.afm ${FONTNAME}$m.tfm
    >/dev/null
    afm2tfm ${FONTNAME}$m.afm
    -s .167 ${FONTNAME}sl$m.tfm >/dev/null

    # Generate ${FONTNAME}.map
    AFMNAME
    =`grep -m 1 -i fontname ${SUBFONTNAME}.afm | cut -d ' ' -f 2`
    echo
    "${FONTNAME}$m ${AFMNAME} <${FONTNAME}$m.pfb" >> ${FONTNAME}.map
    echo
    "${FONTNAME}sl$m ${AFMNAME} \\" .167 SlantFont \\" <${FONTNAME}$m.pfb" \\
    >> ${FONTNAME}.map

    n
    =`expr $n + 1`
    done

    echo

    cat
    > ${FDNAME} << EOF
    % This file is automatically generated by `basename $0`
    \\\\def\\\\fileversion{
    0.0.1}
    \\\\def\\\\filedate{`date
    +%Y/%m/%d`}
    \\\\ProvidesFile{${FDNAME}}[\\\\filedate\\\\space\\\\fileversion]

    \\\\DeclareFontFamily{C70}{${FONTTEXNAME}}{\\\\hyphenchar \\\\font\\\\m@ne}

    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{n}{
    <-> CJK * ${FONTNAME}}{}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{n}{
    <-> CJKb * ${FONTNAME}}{\\\\CJKbold}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{it}{
    <-> CJK * ${FONTNAME}sl}{}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{it}{
    <-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{sl}{
    <-> CJK * ${FONTNAME}sl}{}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{sl}{
    <-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}

    \\\\endinput
    EOF


    #exit
    0;

    echo
    echo
    "Installing ..."

    install
    -d $INSTALLDIRMODE $TTFONTFILEDIR $ENCDIR $AFMDIR $TFMDIR $PFBDIR $MAPDIR $CJKDIR

    install $INSTALLMODE $FONTFILENAME $TTFONTFILEDIR

    n
    =0
    while [ $n -le $PLANENUM ]
    do
    m
    =`printf %02x $n`
    echo
    -n "[$n]"

    install $INSTALLMODE ${FONTNAME}${m}.enc $ENCDIR
    install $INSTALLMODE ${FONTNAME}${m}.afm $AFMDIR
    install $INSTALLMODE ${FONTNAME}${m}.tfm $TFMDIR
    install $INSTALLMODE ${FONTNAME}sl${m}.tfm $TFMDIR
    install $INSTALLMODE ${FONTNAME}${m}.pfb $PFBDIR

    n
    =`expr $n + 1`
    done

    echo

    install $INSTALLMODE ${FONTNAME}.map $MAPDIR
    install $INSTALLMODE $FDNAME $CJKDIR

    echo
    >> $UPDMAPCFG
    echo
    "Map ${FONTNAME}.map" >> $UPDMAPCFG

    # update cid
    -x.map

    echo
    "${FONTNAME}@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP
    echo
    "${FONTNAME}sl@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP

    mktexlsr

    #updmap
    -sys
    updmap

    read
    -p "Do you want remove all intermediate files?[n]" a
    if [ "$a" = "y" ] || [ "$a" = "Y" ]; then

    n
    =0
    while [ $n -le $PLANENUM ]
    do
    m
    =`printf %02x $n`
    echo
    -n "[$n]"

    rm
    -f ${FONTNAME}${m}.enc ${FONTNAME}${m}.afm ${FONTNAME}${m}.t1a \\
    ${FONTNAME}${m}.pfb ${FONTNAME}sl${m}.tfm ${FONTNAME}${m}.tfm

    n
    =`expr $n + 1`
    done

    echo

    rm
    -fv $FDNAME ${FONTNAME}.map
    fi

    echo
    echo
    "OK, all done. :-)"
    echo


    根據自己的需要可以將TEXMFHOME目錄設置成不同的地方,只要Latex能找到即可
    我將該目錄改為了/usr/share/texmf-tetex,如果相應的目錄不存在,則需要自己新建。


    將windows系統中的字體文件拷到腳本所在目錄執行腳本即可生成Latex所需字體文件,以simhei.ttf為例:

    sudo ./cvtfont.sh simhei.ttf simhei simhei







    posted @ 2007-05-16 13:34 all gone 閱讀(1122) | 評論 (0)編輯 收藏

    Struts2 入門

         摘要: 很久沒有看Java相關的東西了,這幾天才發現Struts2 已經發布了,以前就聽說Struts2就是以前的Webwork2,只是作了少許的改動而已,我以前也沒看過Webwork,所以趕緊下來試了一把。Struts2的地址:http://struts.apache.org/2.x在Eclipse中新建了一個Tomcat工程(如果用WTP插件的話Dynamic Web工程)struts2Test,以下...  閱讀全文

    posted @ 2007-01-08 21:59 all gone 閱讀(8482) | 評論 (8)編輯 收藏

    Ubuntu下NVIDIA驅動的問題

    前幾天按照Ubuntu How-To上的NVIDIA驅動安裝說明安裝了8672版的驅動,結果發現只要退出X-Window,系統就會沒有反應,網上搜了搜,發現有人也有一樣的情況,按照說明重新安裝、重新配置Xorg,問題依然沒有解決,X-Window也起不來了。

    到NVIDIA網站上下了最新的8774版驅動后,趕緊找找看怎么自己裝,有人已經寫好了
    在恢復模式下:
    需要gcc支持,如果沒有安裝則:
    apt-get install build-essential gcc
    刪除已經安裝的NVIDIA驅動:
    apt-get --purge remove linux-restricted-modules-`uname -r` linux-restricted-modules-common nvidia-glx nvidia-settings nvidia-kernel-common
    安裝內核headers
    apt-get install linux-headers-`uname -r`
    將下載下來的NVIDIA-Linux-x86-1.0-8774-pkg1.run解壓縮:
    sh ./NVIDIA-Linux-x86-1.0-8774-pkg1.run --extract-only
    進入解壓后的NVIDIA-Linux-x86-1.0-8774-pkg1文件夾,執行安裝:
    ./nvidia-installer -n --x-prefix=/usr/lib/xorg/
    最后由于默認安裝到了/usr/lib/xorg/lig/xorg,需要將文件拷到對應的目錄下:
    cp --no-dereference /usr/lib/xorg/lib/xorg/libX* /usr/lib/xorg/modules/

    cp /usr/lib/xorg/lib/xorg/modules/drivers/* /usr/lib/xorg/modules/drivers/

    cp --no-dereference /usr/lib/xorg/lib/xorg/modules/extensions/* /usr/lib/xorg/modules/extensions/

    posted @ 2006-09-22 15:42 all gone 閱讀(1048) | 評論 (0)編輯 收藏

    Qt 4下連接MySQL數據庫

    前天剛裝了個Qt4for windows,發現安裝的時候MySQL等數據庫插件都沒有安裝,像Qt X11版一樣,都需要自己安裝這些插件。

    在Qt的安裝目錄C:\Qt4.1.2\下,有個src目錄,進入plugins\sqldrivers\mysql,可以看到兩個文件,main.cpp和mysql.pro,很顯然要用qmake來完成編譯、生成目標。

    編譯前,首先保證依賴的MySQL頭文件和庫文件正確。首先MySQL安裝目錄下的include中的所有文件拷到qmake時能找到的目錄下,接著從lib/opt目錄下拷出libmysql.a,其實lib/opt下只有libmysql.lib和libmysql.dll,從網上搜了一下找到一個方法從libmysql.dll生成libmysql.a:

    1 、安裝好MySQL (如果不愿意安裝,找個libmySQL.dll文件也可以)

    2、下載Pexports工具

    3、轉換操作: pexports libmysql.dll > libmysql.def

    4、使用MinGW的 dlltool轉換成為libmysql.a文件。dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a -k

    5、嘗試是否成功:
    將生成的libmysql.a 拷到qmake的lib搜索路徑下后在plugins\sqldrivers\mysql目錄下做:
    qmake -project
    qmake
    make

    如果再出現象mysql_connect@xx (xx是數字)的錯誤提示。就執行第6步。

    6、修改libmysql.def文件,給mysql_connect加上@xx,即mysql_connect@xx

    7、重做第4步

    8、然后嘗試第5步,如果還是出現錯誤提示。就作第6步。一直到沒有錯誤為止。

    最后C:\Qt4.1.2\plugins\sqldrivers下將會生成需要的libqsqlmysql.a和qsqlmysql.dll。

    找了一個測試文件,通過。
    #include?<QtSql>?
    #include?<QtGui>?


    bool?createConnection(){?
    QSqlDatabase?db?
    =?QSqlDatabase::addDatabase("QMYSQL");?
    db.setHostName("localhost");?
    db.setDatabaseName("test");?
    db.setUserName("test");?
    db.setPassword("");?

    if(!db.open()){?
    QMessageBox::critical(
    0,?QObject::tr("Database?Error"),?
    ??????????????????????????????db.lastError().text())
    ;?

    return?false
    ;?
    }?

    QSqlQuery?query
    ;?
    //query.exec("insert?into?book?values(?3,?'title',?'author')?");?
    query.exec("select?title?,?author?from?book?");?

    while?(query.next())?{?


    ????QString?title?
    =?query.value(0).toString();?
    ????QString?author?=?query.value(1).toString();?

    QMessageBox::critical(
    0,?title,author);?
    ????
    }?


    return?true
    ;?
    }?



    int?main(int?argc
    ,char**?argv){?

    QApplication?app(argc
    ,?argv);?
    ????if?(!createConnection()){?

    return?
    1;?
    }?
    ????????

    ????return?app.exec()
    ;?


    }?

    posted @ 2006-08-28 20:57 all gone 閱讀(2735) | 評論 (0)編輯 收藏

    EJB3.0 + Struts小試

         摘要: 一直想做一個 EJB3.0 結合 Struts 的例子,前天剛好從網上找到了一個相關的 Tutorial ,于是小試了一把,雖然只是完成了 Tutorial 上的一小點功能,但是感覺還是有必要寫下來,免得以后還要再去看別人的Tutorial 。 開發環境:?? ??? Eclipse3.2 + WTP1.5 , JBoss 4.0.3SP1 , jboss-EJB-3.0_RC...  閱讀全文

    posted @ 2006-08-11 13:52 all gone 閱讀(3065) | 評論 (0)編輯 收藏

    SSH(Spring + Struts + Hibernate)小試 之三

    SSH(Spring + Struts + Hibernate)小試 之三


    前面通過PlugIn我們實現了Spring Context的加載,不過僅僅加載Context并沒有什么實際
    意義,我們還需要修改配置,將Struts Action交給Spring容器進行管理。下面將通過一個Regsit
    實例加以說明。

    首先準備好regist.jsp和login.jsp,在regist.jsp中 的form有name,password,password2,email域。

    在struts-config.xml中添加配置:

    <form-bean name="registForm" type="com.lzy.forum.form.RegistForm" />

    <action path="/regist" name="registForm"
    type="org.springframework.web.struts.DelegatingActionProxy"

    validate="true" input="/regist.jsp" scope="request">
    <forward name="failure" path="/regist.jsp" />
    <forward name="success" path="/login.jsp" />
    </action>


    RegistForm,RegistAction按照原來Struts的方法去寫,我在RegistAction中加入了一個UserDAO對象
    userDAO,這個對象由Spring注入。

    <bean name="/regist" class="com.lzy.forum.action.RegistAction"
    singleton="false">
    <property name="userDAO">
    <ref local="userDAO" />
    </property>
    </bean>

    基本上SSH的架構已經完成,經確認后可以自己測試一下了。(完)

    posted @ 2006-07-18 16:41 all gone 閱讀(647) | 評論 (1)編輯 收藏

    SSH(Spring + Struts + Hibernate)小試 之二

    Spring和Struts結合有幾種方法,我選了最常用的PlugIn方式,在struts-config.xml中加入

    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    ??????<set-property property="contextConfigLocation"
    ?????????? ?value="/WEB-INF/action-servlet.xml" />
    ?</plug-in>

    WEB-INF目錄下的action-servlet.xml就是Spring的配置文件,下面給出的是整個的action-servlet.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<beans>

    //Data Source

    ?<bean id="dataSource"
    ??class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    ??<property name="driverClassName">
    ???<value>com.mysql.jdbc.Driver</value>
    ??</property>
    ??<property name="url">
    ???<value>jdbc:mysql://localhost:3306/forum</value>
    ??</property>
    ??<property name="username">
    ???<value>test</value>
    ??</property>
    ??<property name="password">
    ???<null />
    ??</property>
    ?</bean>

    // For Hibernate
    ?<bean id="sessionFactory"
    ??class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ??<property name="dataSource">
    ???<ref local="dataSource" />
    ??</property>
    ??<property name="mappingResources">
    ???<list>
    ????<value>com/lzy/forum/domain/User.hbm.xml</value>
    ????<value>com/lzy/forum/domain/Article.hbm.xml</value>
    ????<value>com/lzy/forum/domain/Board.hbm.xml</value>
    ???</list>
    ??</property>
    ??<property name="hibernateProperties">
    ???<props>
    ????<prop key="hibernate.dialect">
    ?????org.hibernate.dialect.MySQLDialect
    ????</prop>
    ????<prop key="hibernate.show_sql">true</prop>
    ???</props>
    ??</property>
    ?</bean>

    ?<bean id="transactionManager"
    ??class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?

    // For DAO
    ?<bean id="userDAO"
    ??class="com.lzy.forum.dao.impl.UserDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?

    ?<bean id="boardDAO"
    ??class="com.lzy.forum.dao.impl.BoardDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?<bean id="articleDAO"
    ??class="com.lzy.forum.dao.impl.ArticleDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    //For Struts Action

    ?<bean name="/regist" class="com.lzy.forum.action.RegistAction"
    ??singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>

    ?</bean>


    ?<bean name="/login" class="com.lzy.forum.action.LoginAction"
    ??singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardManage"
    ??class="com.lzy.forum.action.BoardManageAction" singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardNavigate"
    ??class="com.lzy.forum.action.BoardNavigateAction" singleton="false">
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardDisplay"
    ??class="com.lzy.forum.action.BoardDisplayAction" singleton="false">
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/articleManage"
    ??class="com.lzy.forum.action.ArticleManageAction" singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>
    ??<property name="articleDAO">
    ???<ref local="articleDAO" />
    ??</property>


    ?</bean>


    </beans>

    經過這樣的配置之后,Hibernate事務交由Spring管理,sessionFactory從Spring容器獲得。下面通過其中的一個DAO實例來看看這樣做帶來的方便。


    //BoardDAO.java

    package com.lzy.forum.dao;

    import java.util.ArrayList;

    import com.lzy.forum.domain.Board;

    public interface BoardDAO {
    ?
    ?public boolean isBoardExist(String name);
    ?
    ?public void addBoard(Board board);
    ?
    ?public void deleteBoard(Board board);
    ?
    ?public Board loadBoard(int id);
    ?
    ?public Board loadBoard(String name);
    ?
    ?public Board loadBoardWithArticles(int id);
    ?
    ?public ArrayList getRootBoardsList();
    ?
    ?
    ?
    }


    //BoardDAOHibernate.java

    package com.lzy.forum.dao.impl;

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.ListIterator;
    import java.util.Set;

    import org.hibernate.Hibernate;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import com.lzy.forum.dao.BoardDAO;
    import com.lzy.forum.domain.Board;

    public class BoardDAOHibernate extends HibernateDaoSupport implements BoardDAO {

    ?public void deleteBoard(Board board) {
    ??// TODO Auto-generated method stub
    ??this.getHibernateTemplate().delete(board);
    ?}

    ?public void addBoard(Board board) {
    ??// TODO Auto-generated method stub
    ??this.getHibernateTemplate().saveOrUpdate(board);

    ?}

    ?public boolean isBoardExist(String name) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where name = ? ", new Object[] { name });
    ??if (list.size() > 0) {
    ???// System.out.println("find it");
    ???return true;
    ??}
    ??return false;
    ?}

    ?public Board loadBoard(int id) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where id = ? ", new Object[] { id });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;
    ?}

    ?public Board loadBoard(String name) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where name = ? ", new Object[] { name });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;
    ?}

    ?public ArrayList getRootBoardsList() {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.ChildBoards where b.Parent = null order by b.id");
    ??System.out.println(list.size() + " root boards found ");
    ??

    ??ListIterator index = list.listIterator();
    ??while (index.hasNext()) {

    ???Board s = (Board) index.next();
    ???//this.getSession(true);
    ???//Hibernate.initialize(s.getChildBoards());
    ???///*
    ??? Set children? = (Set) s.getChildBoards();
    ??? Iterator it = children.iterator();
    ???
    ??? while(it.hasNext()){
    ??? Board b = (Board)it.next();
    ??? //Hibernate.initialize(b);
    ??? System.out.println(b.getName());
    ??? }
    ??? //*/

    ???//System.out.println(children.size() + "child(ren) found ");
    ???//s.setChildBoards(s.getChildBoards());
    ??}

    ??return list;
    ?}

    ?public Board loadBoardWithArticles(int id) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;

    ?}


    }


    BoardDAOHibernate繼承 HibernateDaoSupport后,通過getHibernateTemplate()得到一個HibernateTemplate實例,然后執行CRUD操作,非常簡單。需要注意的是,由于執行一次CRUD操作后,Hibernate session關閉,如果有使用延遲加載策略的對象沒有加載,在后面的Web層很容易出現如下錯誤:
    failed to lazily initialize a collection of role
    從網上搜到的解決方法是Open Session In View,
    <filter>
    ???? <filter-name>hibernateFilter</filter-name>
    ???? <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    ???? </filter-class>

    ???? <!-- singleSession默認為true,若設為false則等于沒用OpenSessionInView -->
    ??? <init-param>
    ?????? <param-name>singleSession</param-name>
    ?????? <param-value>true</param-value>
    ??? </init-param>
    ? </filter>

    ?? <filter-mapping>
    ???? <filter-name>hibernateFilter</filter-name>
    ???? <url-pattern>*.do</url-pattern>
    ?? </filter-mapping>
    我試了試,還是有一些問題,所以后來還是放棄了這種方法,所有在Web層中需要的對象都必須在Business層中加載完成。如下面的代碼所示:

    ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });


    這樣Hibernate和Spring的結合也算完成了。其他的一些DAO類和實現代碼我沒有給出,但是大同小異,和Board的實現類似。


    最后將是Struts 和Spring的結合,將在下一篇給出。(未完待續)





    posted @ 2006-07-18 16:09 all gone 閱讀(950) | 評論 (0)編輯 收藏

    SSH(Spring + Struts + Hibernate)小試 之一

    之前對Spring Struts Hibernate都稍有了解,Spring的IOC給我留下了很深的印象,容器管理的對象生成
    方法極大地簡化了程序邏輯,Spring也提供了用于Web的Spring MVC 框架,由于我感覺其易用性還是不及
    Struts,所以我還是選擇Struts作為前端WEB框架,Hibernate我一直沒有在Web應用中試過,這次當然不會
    錯過機會了。


    開發環境的塔建我就不多說了,具體可以參考我以前的幾篇日志。

    在Eclipse中新建一個動態Web工程,將Struts 、Spring、Hibernate需要的jar都添加到WEB-INF/lib目錄下,
    將Struts標簽所需的tld文件、struts-config.xml文件(可以由StrutsIDE生成)添加到WEB-INF下,另外在
    此目錄下添加一個Spring的配置文件applicationContext.xml。


    我參考的例子是夏昕的《深入淺出Hibernate》上的第6章,很好的一個論壇示例。

    首先按照書上的ER模型,在數據庫(MySQL)中建立相應的數據庫。


    create database forum;

    use forum;

    create table user(
    ?id int not null auto_increment primary key,
    ?name varchar(50),
    ?pwd varchar(50),
    ?email varchar(50)

    )type=innodb;


    create table board(
    ?id int not null auto_increment primary key,?
    ?parent_id int,
    ?create_by int not null,
    ?name varchar(50) not null,
    ?remark varchar(255),
    ?create_time datetime,

    ?index(parent_id),
    ?index(create_by),

    ?foreign key(parent_id) references board(id) on delete cascade,
    ?foreign key(create_by) references user(id) on delete no action
    ?
    )type=innodb;


    create table article(
    ?id int not null auto_increment primary key,?
    ?parent_id int ,
    ?board_id int not null,
    ?article_type int not null,
    ?title varchar(255),
    ?body text,
    ?create_by int not null,

    ?create_time datetime,
    ?hits int unsigned,
    ?bytes int unsigned,
    ?last_update_by int not null,
    ?last_update_time datetime,

    ?index(parent_id),
    ?index(board_id),
    ?index(create_by),
    ?index(last_update_by),

    ?foreign key(parent_id) references article(id) on delete no action,
    ?foreign key(board_id) references board(id) on delete cascade,
    ?foreign key(create_by) references user(id) on delete no action,
    ?foreign key(last_update_by) references user(id) on delete no action
    ?
    )type=innodb;

    之后,我選擇了用Hibernate Sychonizer來生成映射文件和實體類,然后對生成的類進行修改(刪掉了生成的Base類),
    實際上Hibernate Sychonizer生成的映射文件也有錯誤,需要修改,我也是后來在使用中發現的。

    //User.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    ?"-//Hibernate/Hibernate Mapping DTD//EN"
    ?"
    http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

    <hibernate-mapping package="com.lzy.forum.domain">
    ?<class
    ??name="User"
    ??table="user"
    ?>

    ??<id
    ???name="Id"
    ???type="integer"
    ???column="id"
    ??>
    ???<generator class="native"/>
    ??</id>

    ??<property
    ???name="Name"
    ???column="name"
    ???type="string"
    ???not-null="false"
    ???length="50"
    ??/>
    ??<property
    ???name="Pwd"
    ???column="pwd"
    ???type="string"
    ???not-null="false"
    ???length="50"
    ??/>
    ??<property
    ???name="Email"
    ???column="email"
    ???type="string"
    ???not-null="false"
    ???length="50"
    ??/>
    ?

    ??<set name="ArticlesByLastUpdateBy" inverse="true" lazy="true">
    ???<key column="last_update_by"/>
    ???<one-to-many class="Article"/>
    ??</set>

    ??<set name="ArticlesByCreateBy" inverse="true" lazy="true">
    ???<key column="create_by"/>這里的create_by是后來修改的,Hibernate Sychonizer生成的有錯,后面有幾處同樣的錯誤】
    ???<one-to-many class="Article"/>
    ??</set>

    ??<set name="Boards" inverse="true" lazy="true">
    ???<key column="create_by"/>【這里的create_by是后來修改的】

    ???<one-to-many class="Board"/>
    ??</set>


    ?</class>?
    </hibernate-mapping>

    //User.java
    package com.lzy.forum.domain;


    public class User{
    ?private static final long serialVersionUID = 1L;

    //? primary key
    ?private java.lang.Integer id;

    ?// fields
    ?private java.lang.String name;
    ?private java.lang.String pwd;
    ?private java.lang.String email;

    ?// collections
    ?private java.util.Set<Article> articlesByLastUpdateBy;
    ?private java.util.Set<Article> articlesByCreateBy;
    ?private java.util.Set<Board> boards;
    ?
    ?
    ?public java.util.Set<Article> getArticlesByCreateBy() {
    ??return articlesByCreateBy;
    ?}
    ?public void setArticlesByCreateBy(java.util.Set<Article> articlesByCreateBy) {
    ??this.articlesByCreateBy = articlesByCreateBy;
    ?}
    ?public java.util.Set<Article> getArticlesByLastUpdateBy() {
    ??return articlesByLastUpdateBy;
    ?}
    ?public void setArticlesByLastUpdateBy(
    ???java.util.Set<Article> articlesByLastUpdateBy) {
    ??this.articlesByLastUpdateBy = articlesByLastUpdateBy;
    ?}
    ?public java.util.Set<Board> getBoards() {
    ??return boards;
    ?}
    ?public void setBoards(java.util.Set<Board> boards) {
    ??this.boards = boards;
    ?}
    ?public java.lang.String getEmail() {
    ??return email;
    ?}
    ?public void setEmail(java.lang.String email) {
    ??this.email = email;
    ?}
    ?public java.lang.Integer getId() {
    ??return id;
    ?}
    ?public void setId(java.lang.Integer id) {
    ??this.id = id;
    ?}
    ?public java.lang.String getName() {
    ??return name;
    ?}
    ?public void setName(java.lang.String name) {
    ??this.name = name;
    ?}
    ?public java.lang.String getPwd() {
    ??return pwd;
    ?}
    ?public void setPwd(java.lang.String pwd) {
    ??this.pwd = pwd;
    ?}


    }

    //Board.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    ?"-//Hibernate/Hibernate Mapping DTD//EN"
    ?"
    http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

    <hibernate-mapping package="com.lzy.forum.domain">
    ?<class
    ??name="Board"
    ??table="board"
    ?>
    ???<meta attribute="sync-DAO">false</meta>
    ??<id
    ???name="Id"
    ???type="integer"
    ???column="id"
    ??>
    ???<generator class="native"/>
    ??</id>

    ??<property
    ???name="Name"
    ???column="name"
    ???type="string"
    ???not-null="true"
    ???length="50"
    ??/>
    ??<property
    ???name="Remark"
    ???column="remark"
    ???type="string"
    ???not-null="false"
    ???length="255"
    ??/>
    ??<property
    ???name="CreateTime"
    ???column="create_time"
    ???type="timestamp"
    ???not-null="false"
    ???length="19"
    ??/>
    ??<many-to-one
    ???name="CreateBy"
    ???column="create_by"
    ???class="User"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="Parent"
    ???column="parent_id"
    ???class="Board"???
    ???not-null="false"
    ???lazy="false">
    ??</many-to-one>
    ?

    ??<set name="Articles" inverse="true" lazy="true" order-by="id">
    ???<key column="board_id"/>【這里的board_id是后來修改的】
    ???<one-to-many class="Article"/>
    ??</set>

    ??<set name="ChildBoards" inverse="true"? lazy="true" order-by="id">
    ???<key column="parent_id"/>這里的parent_id是后來修改的】
    ???<one-to-many class="Board"/>
    ??</set>


    ?</class>?
    </hibernate-mapping>

    //Board.java
    package com.lzy.forum.domain;

    ?


    public class Board? {
    ?private static final long serialVersionUID = 1L;

    //? primary key
    ?private java.lang.Integer id;

    ?// fields
    ?private java.lang.String name;
    ?private java.lang.String remark;
    ?private java.util.Date createTime;

    ?// many to one
    ?private com.lzy.forum.domain.User createBy;
    ?private com.lzy.forum.domain.Board parent;

    ?// collections
    ?private java.util.Set<com.lzy.forum.domain.Article> articles;
    ?private java.util.Set<com.lzy.forum.domain.Board> childBoards;
    ?
    ?
    ?public java.util.Set<com.lzy.forum.domain.Article> getArticles() {
    ??return articles;
    ?}
    ?public void setArticles(java.util.Set<com.lzy.forum.domain.Article> articles) {
    ??this.articles = articles;
    ?}
    ?public java.util.Set<com.lzy.forum.domain.Board> getChildBoards() {
    ??return childBoards;
    ?}
    ?public void setChildBoards(java.util.Set<com.lzy.forum.domain.Board> childBoards) {
    ??this.childBoards = childBoards;
    ?}
    ?public com.lzy.forum.domain.User getCreateBy() {
    ??return createBy;
    ?}
    ?public void setCreateBy(com.lzy.forum.domain.User createBy) {
    ??this.createBy = createBy;
    ?}
    ?public java.util.Date getCreateTime() {
    ??return createTime;
    ?}
    ?public void setCreateTime(java.util.Date createTime) {
    ??this.createTime = createTime;
    ?}
    ?public java.lang.Integer getId() {
    ??return id;
    ?}
    ?public void setId(java.lang.Integer id) {
    ??this.id = id;
    ?}
    ?public java.lang.String getName() {
    ??return name;
    ?}
    ?public void setName(java.lang.String name) {
    ??this.name = name;
    ?}
    ?public com.lzy.forum.domain.Board getParent() {
    ??return parent;
    ?}
    ?public void setParent(com.lzy.forum.domain.Board parent) {
    ??this.parent = parent;
    ?}
    ?public java.lang.String getRemark() {
    ??return remark;
    ?}
    ?public void setRemark(java.lang.String remark) {
    ??this.remark = remark;
    ?}


    }

    //Article.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    ?"-//Hibernate/Hibernate Mapping DTD//EN"
    ?"
    http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

    <hibernate-mapping package="com.lzy.forum.domain">
    ?<class
    ??name="Article"
    ??table="article"
    ?>
    ??<meta attribute="sync-DAO">false</meta>
    ??<id
    ???name="Id"
    ???type="integer"
    ???column="id"
    ??>
    ???<generator class="native"/>
    ??</id>

    ??<property
    ???name="ArticleType"
    ???column="article_type"
    ???type="integer"
    ???not-null="true"
    ???length="11"
    ??/>
    ??<property
    ???name="Title"
    ???column="title"
    ???type="string"
    ???not-null="false"
    ???length="255"
    ??/>
    ??<property
    ???name="Body"
    ???column="body"
    ???type="string"
    ???not-null="false"
    ??/>
    ??<property
    ???name="Hits"
    ???column="hits"
    ???type="integer"
    ???not-null="false"
    ???length="10"
    ??/>
    ??<property
    ???name="Bytes"
    ???column="bytes"
    ???type="integer"
    ???not-null="false"
    ???length="10"
    ??/>
    ??<property
    ???name="CreateTime"
    ???column="create_time"
    ???type="timestamp"
    ???not-null="false"
    ???length="19"
    ??/>
    ??<property
    ???name="LastUpdateTime"
    ???column="last_update_time"
    ???type="timestamp"
    ???not-null="false"
    ???length="19"
    ??/>
    ??<many-to-one
    ???name="LastUpdateBy"
    ???column="last_update_by"
    ???class="User"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="CreateBy"
    ???column="create_by"
    ???class="User"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="Parent"
    ???column="parent_id"
    ???class="Article"
    ???not-null="false"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="Board"
    ???column="board_id"
    ???class="Board"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ?

    ??<set name="Articles" inverse="true" lazy="false" order-by="id">
    ???<key column="parent_id"/>【這里的parent_id是后來修改的】
    ???<one-to-many class="Article"/>
    ??</set>


    ?</class>?
    </hibernate-mapping>



    //Article.java
    package com.lzy.forum.domain;

    import java.util.Date;

    ?


    public class Article? {
    ?private static final long serialVersionUID = 1L;
    ?// primary key
    ?private java.lang.Integer id;

    ?// fields
    ?private java.lang.Integer articleType;
    ?private java.lang.String title;
    ?private java.lang.String body;
    ?private java.lang.Integer hits;
    ?private java.lang.Integer bytes;
    ?private java.util.Date lastUpdateTime;
    ?private java.util.Date createTime;
    ?

    ?// many to one
    ?private com.lzy.forum.domain.User lastUpdateBy;
    ?private com.lzy.forum.domain.User createBy;
    ?private com.lzy.forum.domain.Article parent;
    ?private com.lzy.forum.domain.Board board;

    ?// collections
    ?private java.util.Set<com.lzy.forum.domain.Article> articles;

    ?public java.util.Set<com.lzy.forum.domain.Article> getArticles() {
    ??return articles;
    ?}

    ?public void setArticles(java.util.Set<com.lzy.forum.domain.Article> articles) {
    ??this.articles = articles;
    ?}

    ?public java.lang.Integer getArticleType() {
    ??return articleType;
    ?}

    ?public void setArticleType(java.lang.Integer articleType) {
    ??this.articleType = articleType;
    ?}

    ?public com.lzy.forum.domain.Board getBoard() {
    ??return board;
    ?}

    ?public void setBoard(com.lzy.forum.domain.Board board) {
    ??this.board = board;
    ?}

    ?public java.lang.String getBody() {
    ??return body;
    ?}

    ?public void setBody(java.lang.String body) {
    ??this.body = body;
    ?}

    ?public java.lang.Integer getBytes() {
    ??return bytes;
    ?}

    ?public void setBytes(java.lang.Integer bytes) {
    ??this.bytes = bytes;
    ?}

    ?public com.lzy.forum.domain.User getCreateBy() {
    ??return createBy;
    ?}

    ?public void setCreateBy(com.lzy.forum.domain.User createBy) {
    ??this.createBy = createBy;
    ?}

    ?public java.lang.Integer getHits() {
    ??return hits;
    ?}

    ?public void setHits(java.lang.Integer hits) {
    ??this.hits = hits;
    ?}

    ?public java.lang.Integer getId() {
    ??return id;
    ?}

    ?public void setId(java.lang.Integer id) {
    ??this.id = id;
    ?}

    ?public com.lzy.forum.domain.User getLastUpdateBy() {
    ??return lastUpdateBy;
    ?}

    ?public void setLastUpdateBy(com.lzy.forum.domain.User lastUpdateBy) {
    ??this.lastUpdateBy = lastUpdateBy;
    ?}

    ?public java.util.Date getLastUpdateTime() {
    ??return lastUpdateTime;
    ?}

    ?public void setLastUpdateTime(java.util.Date lastUpdateTime) {
    ??this.lastUpdateTime = lastUpdateTime;
    ?}

    ?public com.lzy.forum.domain.Article getParent() {
    ??return parent;
    ?}

    ?public void setParent(com.lzy.forum.domain.Article parent) {
    ??this.parent = parent;
    ?}

    ?public java.lang.String getTitle() {
    ??return title;
    ?}

    ?public void setTitle(java.lang.String title) {
    ??this.title = title;
    ?}
    ?public java.util.Date getCreateTime(){
    ??return createTime;
    ?}

    ?public void setCreateTime(java.util.Date createTime) {
    ??// TODO Auto-generated method stub
    ??this.createTime = createTime;
    ?}
    ?

    }

    接下來將會在web中加入Spring支持和為實體類提供DAO支持。(未完待續)

    posted @ 2006-07-18 09:54 all gone 閱讀(1785) | 評論 (2)編輯 收藏

    Eclipse + CDT + MinGW 下編寫QT程序


    環境:
    (1)安裝Eclipse + CDT + MinGW
    (2)安裝QT for Windows
    (3)安裝QT plugin for Eclipse :org.eclipse.qt-1.0.2.zip,在Preference里設好相關路徑。

    新建一個 QT project,將hello。cpp復制到工程中:
    #include <QApplication>
    #include <QPushButton>

    int main(int argc, char *argv[]){
    ?
    ?QApplication app(argc, argv);
    ?
    ?QPushButton hello("Hello world!");
    ?
    ?hello.resize(100, 30);
    ?hello.show();
    ?
    ?return app.exec();
    }

    build后生成Makefile,新建兩個Make Target:all,clean
    Make all 后發現找不到libQtCored4.a等文件,在QT的lib目錄下找到相應的libQtCore4.a,復制后重命名為libQtCored4.a,
    其他庫文件類似,最后編譯通過,運行后出現帶hello按鈕的窗口。

    ?

    posted @ 2006-06-16 19:45 all gone 閱讀(1181) | 評論 (0)編輯 收藏

    Eclipse + CDT + MinGW 下編寫OpenGL程序


    Eclipse + CDT + MinGW環境的搭建比較簡單,由于機器內存不夠大,我在preference里將C++的indexer都置為NO INDEXER。
    安裝MinGW后可以看到,在Include和Lib目錄下有了與OpenGL相關的頭文件和靜態庫。為了使用GLUT,我將glut.h放到了相應的
    GL目錄下,看到Lib目錄下有libglut.a庫文件,我沒有將glut。lib放進去(后來發現libglut。a好像在windows不可用)。

    新建一個Standtart Make C++ project,將原來可運行的OpenGL程序復制過來,寫好Makefile,結果編譯的時候還是出現錯誤。
    還好找到了這個非常有用的網頁:http://www.mingw.org/MinGWiki/index.php/Glut
    按照上面列出的錯誤,我在每個#include<GL/glut.h>前都加上#define _STDCALL_SUPPORTED,然后又將glut32。lib、
    opengl32.lib、glu32.lib都放到當前的工程目錄下,用”glut32。lib opengl32.lib glu32.lib“ 代替原來的 ”-lglut -lopengl32 -lglu32",
    最后終于編譯通過。

    ?

    posted @ 2006-06-16 19:33 all gone 閱讀(1183) | 評論 (0)編輯 收藏

    EJB 3.0 學習筆記——Entity Bean

         摘要: 在EJB 3.0 學習筆記——準備工作中只是簡單的搭好了EJB3.0開發的基本環境,之 后就可以開發最簡單的Session Bean了,我感興趣的還是Entity Bean,所以接下來 我想先試驗一下Entity Bean。?一、在JBoss中配置好Data Source我使用的是MySQL數據庫,所以首先將MySQL的JDBC驅動復制到jboss-4.0.3SP1\server\al...  閱讀全文

    posted @ 2006-05-20 22:38 all gone 閱讀(3379) | 評論 (4)編輯 收藏

    JavaScript和Applet互相調用

    Java Script 調用 java 可以在網頁里使用

    <script language=javascript>

    ?????? document.applet_name.method_name();

    </script>

    可以對 applet 進行控制,也可以從 applet 返回值。

    ?

    ?

    Java 調用 Java Script

    需要導入 netscape.javascript.jsobject 這個類 (jre/lib/plugin.jar)

    比如:

    JSObject window=JSObject.getWindow(this);

    JSObject window=(JSObject)window.getMember("document");

    來獲取對當前窗口的控制權。

    ?

    當點擊鏈接 MakeCall 時,會觸發 Java Script 函數

    ?

    function makeCall(s){

    ? window.document.ctiApplet.testJavascript(s);

    ? alert("call maked!");

    ?}

    ?

    在這個 Java Script 函數中, ctiApplet 是一個 Applet ,這樣完成了 java script 調用

    Applet

    以下是 ctiApplet 中的 testJavascript 函數和運行結果,其中又調用了 Java Script
    public void testJavascript(String msg){

    ??????

    ?

    ?????? try {

    ????????????? // create JSObject

    ?

    ?????? ??? ?????? JSObject.getWindow (this).eval ("javascript:alert('Java Script in Applet!')") ;

    ?????? }

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

    ????????????? // Error on create JSObject

    ?????? ??? ?????? showStatus( "Error call javascript err=" + ex );

    ?????? }

    ?

    ?????? System.out.println(msg);

    }

    ?

    ?

    ?

    posted @ 2006-05-04 09:41 all gone 閱讀(449) | 評論 (0)編輯 收藏

    EJB 3.0 學習筆記——準備工作


    在開發EJB3.0 之前,首先應該去下載它的一個實現和一個相應的支持EJB3的服務器,我下載的是jboss-EJB-3.0_RC5-PFD和JBoss 4.0.3SP1 ,jboss-EJB-3.0_RC5-PFD里面有安裝說明和一些不錯的tutorial。

    根據安裝說明,JBoss 4.0.3SP1中的EJB3實現不是最新的,應用下載的jboss-EJB-3.0_RC5-PFD中的一些包去替換。

    將jboss-EJB-3.0_RC5-PFD中lib目錄下的
    ?(1)ejb3.deployer/
    ?(2)ejb3-clustered-sfsbcache-service.xml
    ?(3)ejb3-interceptors-aop.xml
    ?(4)jboss-aop-jdk50.deployer/
    拷貝到jboss-4.0.3SP1/server/all/deploy目錄下

    將jboss-EJB-3.0_RC5-PFD中lib目錄下的
    ?(5)jboss-remoting.jar
    ?(6)jboss-serialization.jar
    ?(7)jboss-j2ee.jar
    拷貝到jboss-4.0.3SP1/server/all/lib目錄下


    刪除jboss-4.0.3SP1/server/all/lib 下的
    ?(1)ejb3-persistence.jar
    ?(2)hibernate3.jar
    ?(3)hibernate-annotations.jar
    ?(4)hibernate-entitymanager.jar
    和jboss-4.0.3SP1/server/all/deploy下的
    ?(5)jboss-aop.deployer/
    到此EJB3 的運行環境準備好了,你可以用jboss-4.0.3SP1\bin\run -c all 測試JBoss是否能成功啟動。

    我用的IDE是Eclipse 3.2,JDK 1.5 ,為了方便在Eclipse中新建一個User Library:EJB3_JBoss,
    將jboss-EJB-3.0_RC5-PFD\lib下的
    ?jboss-j2ee.jar
    和jboss-EJB-3.0_RC5-PFD\lib\ejb3.deployer下的
    ?ejb3-persistence.jar
    ?jboss-ejb3x.jar
    ?jboss-ejb3.jar
    ?jboss-annotations-ejb3.jar
    ?hibernate3.jar
    ?hibernate-annotations.jar
    ?hibernate-entitymanager.jar
    添加到EJB_JBoss中,現在環境基本上搭好了。

    posted @ 2006-03-26 23:05 all gone 閱讀(956) | 評論 (1)編輯 收藏

    FreeBSD 5.3 中的聲卡問題



    在FreeBSD 5.x中,kernel配置文件的設備名改為sound,不是FreeBSD 4.x中的pcm了,以后還有可能改為snd。


    #cd /usr/src/sys/i386/conf/
    #make LINT
    可生成LINT文件,將kernel配置里的項全部列出了。


    在kernel配置文件里加上
    device sound
    device snd_foo 或
    device "snd_foo" <----注意這里foo表示不同的聲卡種類,可參考LINT文件。


    如果不知道你的聲卡應該用哪一個,可以先用
    #kldload snd_driver 將所有常用的聲卡驅動裝載,然后用


    #cat /dev/sndstat 察看是否有相應的聲卡信息,如:
    FreeBSD Audio Driver (newpcm)
    Installed devices:
    pcm0: at io 0xd800, 0xdc80 irq 5 bufsz 16384
    kld snd_ich (1p/2r/0v channels duplex default)


    這里snd_inc就是對應的應該裝載的設備。


    注意如果對應的聲卡種類中有數字,就應該加上引號。


    這樣重新編譯內核就可以了。當然如果不編譯內核,用load module的方式也可以。



    那么我的問題是什么呢? 我用
    #dmesg|grep pcm 能察看到聲卡信息。
    用 #cat /dev/sndstat 也能看到正確的聲卡信息。
    并且能夠播放CD,但是使用xmms等軟件播放mp3文件的時候,播放條根本不走。而后從dmesg可看到如下信息:


    pcm0:play:0: play interrupt timeout, channel dead


    經過Google查詢,懷疑問題出在系統ICQ沖突上。最后,在啟動FreeBSD 5.3時,選擇了ACPI Disable,就能夠正確地用xmms播放了。


    最后補充以下,我的機器安裝了兩塊網卡,一塊SCSI卡。使用的是版載聲卡。怎么解決在ACPI情況下使用還不清楚。但問題基本確定的確是ICQ資源的問題。

    posted @ 2006-01-05 21:56 all gone 閱讀(230) | 評論 (0)編輯 收藏

    FreeBSD安裝問題及漢化

    五一這幾天沒事閑的裝了FreeBSD,時間可沒少花,問題卻還是不少,也許對系統還不是太熟悉吧.

    1.USB鼠標的問題

    第一次裝的時候,測試鼠標的時候沒動靜,不知當時是不是鼠標沒插好
    只好用PS/2口了,后來編譯了一遍內核,USB才能用.

    然而最后一次裝的時候,USB口可以用,但是startx進入KDE的時候總是失敗,找不到什么Pointer,將鼠標插入
    PS/2口后重啟,上述現象又沒了,感覺很是奇怪,進入kde后將鼠標插入USB口也正常.

    2..xinitrc文件的問題

    第一次裝的時候是按照書上裝的,當時把xinitrc文件復制過來

    cp /usr/X11R6/lib/X11/xinitrc/xinitrc /root/.xinitrc

    3.中文字體和輸入法



    首先安裝cvsup,更新ports,然后安裝kde-zh******,之后就可以看到kde的一些界面已經中文化了,但是還是有亂碼,弄個中文字體過來就可以了

    將windows中的simsun.ttc改名為simsun.ttf后復制到/usr/X11R6/lib/X11/fonts/TTF中,然后運行命令

    fc-cache -f -v就可以了

    中文輸入法很簡單.fcitx,不過以前裝的時候沒有更新ports時好象不行.

    posted @ 2006-01-05 21:55 all gone 閱讀(225) | 評論 (0)編輯 收藏

    FreeBSD上預留的UID和GID

    目前預留的 50 到 999 之間的 UID。

    bind:*:53:53:Bind Sandbox:/:/sbin/nologin
    majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
    rdfdb:*:55:55:rdfDB Daemon:/var/db/rdfdb:/bin/sh
    spamd:*:58:58:SpamAssassin user:/var/spool/spamd:/sbin/nologin
    cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent
    gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh
    proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/nonexistent
    uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
    xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent
    pop:*:68:6:Post Office Owner (popper):/nonexistent:/sbin/nologin
    wnn:*:69:7:Wnn:/nonexistent:/nonexistent
    pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
    oracle:*:71:71::0:0:Oracle:/usr/local/oracle7:/sbin/nologin
    ircd:*:72:72:IRC daemon:/nonexistent:/nonexistent
    ircservices:*:73:73:IRC services:/nonexistent:/nonexistent
    simscan:*:74:74:Simscan User:/nonexistent:/sbin/nologin
    ifmail:*:75:66:Ifmail user:/nonexistent:/nonexistent
    www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin
    alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
    qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
    qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
    qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
    qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
    qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
    qmails:*:87:82:QMail user:/var/qmail:/nonexistent
    mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin
    vpopmail:*:89:89:VPop Mail User:/usr/local/vpopmail:/nonexistent
    firebird:*:90:90:Firebird Database Administrator:/usr/local/firebird:/bin/sh
    mailman:*:91:91:Mailman User:/usr/local/mailman:/sbin/nologin
    gdm:*:92:92:GDM Sandbox:/:/sbin/nologin
    jabber:*:93:93:Jabber Daemon:/nonexistent:/nonexistent
    p4admin:*:94:94:Perforce admin:/usr/local/perforce:/sbin/nologin
    interch:*:95:95:Interchange user:/usr/local/interchange:/sbin/nologin
    squeuer:*:96:96:SQueuer Owner:/nonexistent:/bin/sh
    mud:*:97:97:MUD Owner:/nonexistent:/bin/sh
    msql:*:98:98:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
    rscsi:*:99:99:Remote SCSI:/usr/local/rscsi:/usr/local/sbin/rscsi
    squid:*:100:100:squid caching-proxy pseudo user:/usr/local/squid:/sbin/nologin
    quagga:*:101:101:Quagga route daemon pseudo user:/usr/local/etc/quagga:/sbin/nologin
    ganglia:*:102:102:Ganglia User:/nonexistent:/sbin/nologin
    sgeadmin:*:103:103:Sun Grid Engine Admin:/nonexistent:/sbin/nologin
    slimserv:*:104:104:Slim Devices SlimServer pseudo-user:/nonexistent:/sbin/nologin
    dnetc:*:105:105:distributed.net client and proxy pseudo-user:/nonexistent:/sbin/nologin
    clamav:*:106:106:Clamav Antivirus:/nonexistent:/sbin/nologin
    cacti:*:107:107:Cacti Sandbox:/nonexistent:/sbin/nologin
    webkit:*:108:108:WebKit Default User:/usr/local/www/webkit:/bin/sh
    quickml:*:109:109:quickml Server:/nonexistent:/sbin/nologin
    vscan:*:110:110:Scanning Virus Account:/var/amavis:/bin/sh
    fido:*:111:111:Fido System:/usr/local/fido:/bin/sh
    dcc:*:112:112:Distributed Checksum Clearinghouse:/nonexistent:/sbin/nologin
    amavis:*:113:113:Amavis-stats Account:/nonexistent:/sbin/nologin
    dhis:*:114:114:DHIS Daemon:/nonexistent:/sbin/nologin
    _symon:*:115:115:Symon Account:/var/empty:/sbin/nologin
    postfix:*:125:125:Postfix Mail System:/var/spool/postfix:/sbin/nologin
    rbldns:*:153:153:rbldnsd pseudo-user:/nonexistent:/sbin/nologin
    sfs:*:171:171:Self-Certifying File System:/nonexistent:/sbin/nologin
    agk:*:172:172:AquaGateKeeper:/nonexistent:/nonexistent
    polipo:*:173:173:polipo web cache:/nonexistent:/sbin/nologin
    bogomilter:*:174:174:milter-bogom:/nonexistent:/sbin/nologin
    moinmoin:*:192:192:MoinMoin User:/nonexistent:/sbin/nologin
    sympa:*:200:200:Sympa Owner:/nonexistent:/sbin/nologin
    dspam:*:202:202:Dspam:/nonexistent:/sbin/nologin
    _tor:*:256:256:Tor anonymising router:/var/db/tor:/bin/sh
    ldap:*:389:389:OpenLDAP Server:/nonexistent:/sbin/nologin
    drweb:*:426:426:Dr.Web Mail Scanner:/nonexistent:/sbin/nologin
    courier:*:465:465:Courier Mail Server:/nonexistent:/sbin/nologin
    _bbstored:*:505:505::0:0:BoxBackup Store Daemon:/nonexistent:/bin/sh
    qtss:*:554:554:Darwin Streaming Server:/nonexistent:/sbin/nologin
    ircdru:*:555:555:Russian hybrid IRC server:/nonexistent:/bin/sh
    messagebus:*:556:556:D-BUS Daemon User:/nonexistent:/sbin/nologin
    bnetd:*:700:700:Bnetd user:/nonexistent:/sbin/nologin
    bopm:*:717:717:Blitzed Open Proxy Monitor:/nonexistent:/bin/sh
    bacula:*:910:910:Bacula Daemon:/var/db/bacula:/sbin/nologin


    下面是目前預留的 GID。

    bind:*:53:
    rdfdb:*:55:
    spamd:*:58:
    cyrus:*:60:
    proxy:*:62:
    authpf:*:63:
    uucp:*:66:
    xten:*:67:
    dialer:*:68:
    network:*:69:
    pgsql:*:70:
    simscan:*:74:
    www:*:80:
    qnofiles:*:81:
    qmail:*:82:
    mysql:*:88:
    vpopmail:*:89:
    firebird:*:90:
    mailman:*:91:
    gdm:*:92:
    jabber:*:93:
    p4admin:*:94:
    interch:*:95:
    squeuer:*:96:
    mud:*:97:
    msql:*:98:
    rscsi:*:99:
    squid:*:100:
    quagga:*:101:
    ganglia:*:102:
    sgeadmin:*:103:
    slimserv:*:104:
    dnetc:*:105:
    clamav:*:106:
    cacti:*:107:
    webkit:*:108:
    quickml:*:109:
    vscan:*:110:
    fido:*:111:
    dcc:*:112:
    amavis:*:113:
    dhis:*:114:
    _symon:*:115:
    postfix:*:125:
    maildrop:*:126:
    rbldns:*:153:
    sfs:*:171:
    agk:*:172:
    polipo:*:173:
    moinmoin:*:192:
    sympa:*:200:
    dspam:*:202:
    _tor:*:256:
    ldap:*:389:
    drweb:*:426:
    courier:*:465:
    _bbstored:*:505:
    qtss:*:554:
    ircdru:*:555:
    messagebus:*:556:
    realtime:*:557:
    bnetd:*:700:
    bopm:*:717:
    bacula:*:910:

    posted @ 2005-12-23 16:53 all gone 閱讀(550) | 評論 (0)編輯 收藏

    JSP 處理MySQL數據庫時的中文問題

    以前遇到JSP 處理MySQL數據庫時的中文問題時,采取的是很笨的一種方法,直接用字符串編碼轉換函數進行轉換,這次從網上搜了一下,找到了一個使用Filter的可行方法。在Tomcat 5.5+ MySQL4.0.16下通過。

    filter類源碼是從網上找的,如下
    /**
     *
     */
    package com.lzy;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;

    /**
     * @author lzy
     *
     */
    public class SetCharacterEncodingFilter implements Filter {
     
     protected String encoding = null;
        protected FilterConfig filterConfig = null;
        protected boolean ignore = true;


     /* (non-Javadoc)
      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
      */
     public void init(FilterConfig filterConfig) throws ServletException {
      // TODO Auto-generated method stub
      this.filterConfig = filterConfig;
         this.encoding = filterConfig.getInitParameter("encoding");
         String value = filterConfig.getInitParameter("ignore");
         if (value == null)
          this.ignore = true;
         else if (value.equalsIgnoreCase("true"))
          this.ignore = true;
         else if (value.equalsIgnoreCase("yes"))
          this.ignore = true;
         else
          this.ignore = false;


     }

     /* (non-Javadoc)
      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
      */
     public void doFilter(ServletRequest request, ServletResponse response,
       FilterChain chain) throws IOException, ServletException {
      
      // TODO Auto-generated method stub
      if (ignore || (request.getCharacterEncoding() == null)) {
       String encoding = selectEncoding(request);
       if (encoding != null)
        request.setCharacterEncoding(encoding);
      }
      chain.doFilter(request, response);
     }

     /* (non-Javadoc)
      * @see javax.servlet.Filter#destroy()
      */
     public void destroy() {
      // TODO Auto-generated method stub
      
      this.encoding = null;
         this.filterConfig = null;


     }
     
      protected String selectEncoding(ServletRequest request) {

             return (this.encoding);

         }


    }

    在web.xml 文件中作如下設置:(我使用的是Struts框架)
    <filter>
    <filter-name>Encoding</filter-name>
    <filter-class>com.lzy.SetCharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>Encoding</filter-name>
    <servlet-name>action</servlet-name>
    </filter-mapping>
    <filter-mapping>
    <filter-name>Encoding</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>


    最后,連接數據庫時,使用下面的url:
    jdbc:mysql://localhost:3306/數據庫名?useUnicode=true&characterEncoding=GBK

    posted @ 2005-12-18 22:57 all gone 閱讀(480) | 評論 (0)編輯 收藏

    Spring之Hello World

    1.下載Spring相關的開發包
    下載地址:http://sourceforge.net/project/showfiles.php?group_id=73357
    有spring-framework-1.2.6-with-dependencies.zip,一個是spring-framework-1.2.6.zip,最好下載with-dependencies的,里面有另外一些附加包,下載后解壓縮,dist目錄下是spring自身的jar,lib目錄下是附加的jar。
    2.新建Java Project,將spring.jar(dist目錄下)和commons-logging.jar(lib目錄下)添加到project的build path中。
    3.新建POJO Bean類:HelloBean
    //HelloBean.java
    /**
     *
     */
    package com.lzy;

    /**
     * @author lzy
     *
     */
    public class HelloBean{
     
     private String hello;
     
     public void sayHello(){
      System.out.println(this.getHello());
     }

     /**
      * @return Returns the hello.
      */
     public String getHello() {
      return hello;
     }

     /**
      * @param hello The hello to set.
      */
     public void setHello(String hello) {
      this.hello = hello;
     }
     

    }


    4.新建文件bean.xml,將在這個XML文件中為一個HelloBean的實例的hello屬性賦值。
    //bean.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<beans>
    <description>Spring Quick Start</description>
    <bean id="helloBean" class="com.lzy.HelloBean">
      <property name="hello">
       <value>hello world</value>
      </property>
    </bean>
    </beans>

    5.新建測試類:TestSpring
    //TestSpring.java
    /**
     *
     */
    package com.lzy;

    import java.util.Locale;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;

    /**
     * @author lzy
     *
     */
    public class TestSpring {

     /**
      * @param args
      */
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      
      ApplicationContext ctx=new FileSystemXmlApplicationContext("bean.xml");
        HelloBean hello=(HelloBean)ctx.getBean("helloBean");
      hello.sayHello();
     }

    }


    6.運行測試類:
        如果沒有出錯,輸出中將會看到“hello world”。

    posted @ 2005-12-14 22:07 all gone 閱讀(1047) | 評論 (0)編輯 收藏

    Eclipse下Hibernate入門


    1.開發環境
         Eclipse 3.2+MySQL 4.0.16+Hibernate3.0
        首先應該安裝好Eclipse和MySQL,此外準備好MySQL的JDBC Driver和Hibernate3.0,相關下載地址如下:
         Eclipse SDK:
            http://www.eclipse.org/downloads/index.php 
           MySQL及MySQL的JDBC Driver:
               http://www.mysql.org
           Hibernate:
              http://www.hibernate.org
           此外我還安裝了Eclipse的一個Hibernate插件:
         Hibernate synchronizer
               http://hibernatesynch.sourceforge.net


           Plugin Search:
             http://eclipse-plugins.2y.net/eclipse/search.jsp 

           Hibernate synchronizer插件的安裝和配置有問題請直接Google。

         在工程中其實只用到了Hibernate synchronizer插件的一部分功能,Hibernate依賴的相關jar包最好還是手動添加,因為最開始用Hibernate synchronizer添加時總是發生錯誤。
         將下載的Mysql driver和Hibernate包解壓縮,我們需要的只是里面相關的jar,在Eclipse中新建Mysql_Driver和Hibernate兩個user library,將mysql-connector-java-3.0.15-ga-bin.jar加入Mysql_Driver中,將hibernate3.jar,
    ,log4j-1.2.11.jar,antlr-2.7.5H3.jar,asm.jar,asm-attrs.jar,cglib-2.1.2.jar,commons-collections-2.1.1.jar,commons-logging-1.0.4.jar,dom4j-1.6.1.jar,ehcache-1.1.jar,jta.jar加入到Hibernate中。

    2.開始
    在Mysql中新建test數據庫(Mysql其實有個空的test數據庫),然后新建下面的Table

    create table user (
     id int(10) not null auto_increment primary key,
     name varchar(20) not null,
     password varchar(20) not null,
     email varchar(50),
     address varchar(100)
    )type=innodb;


    新建Java Project,將Mysql_Driver,Hibernate兩個user library添加到該工程的java build path中。

    新建與數據表對應的POJO類:User和Contact

    /**
     *
     * 
     */
    package com.user;

    /**
     * @author lzy
     *
     */
    public class User{
        private Integer id;
        private String name;
        private String password;
        private Contact contact;
       

     /**
      * @return Returns the id.
      */
     public Integer getId() {
      return id;
     }
     /**
      * @param id The id to set.
      */
     public void setId(Integer id) {
      this.id = id;
     }
     /**
      * @return Returns the name.
      */
     public String getName() {
      return name;
     }
     /**
      * @param name The name to set.
      */
     public void setName(String name) {
      this.name = name;
     }
     /**
      * @return Returns the password.
      */
     public String getPassword() {
      return password;
     }
     /**
      * @param password The password to set.
      */
     public void setPassword(String password) {
      this.password = password;
     }
     /**
      * @return Returns the contact.
      */
     public Contact getContact() {
      return contact;
     }
     /**
      * @param contact The contact to set.
      */
     public void setContact(Contact contact) {
      this.contact = contact;
     }
       
       
    }
    /**
     *
     */
    package com.user;

    /**
     * @author lzy
     *
     */
    public class Contact {
     private String email;
        private String address;

     /**
      * @return Returns the address.
      */
     public String getAddress() {
      return address;
     }
     /**
      * @param address The address to set.
      */
     public void setAddress(String address) {
      this.address = address;
     }
     /**
      * @return Returns the email.
      */
     public String getEmail() {
      return email;
     }
     /**
      * @param email The email to set.
      */
     public void setEmail(String email) {
      this.email = email;
     }
    }

    之后可以用synchronizer插件生成Hibernate配置文件和映射文件(相關過程可以參考http://www.ideagrace.com/html/doc/2005/08/01/00315.html),不過映射文件必須稍作修改。

    hibernate.cfg.xml
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
        "

    <hibernate-configuration>
        <session-factory >

      <!-- local connection properties -->
      <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.username"></property>
      <property name="hibernate.connection.password"></property>
      <!-- property name="hibernate.connection.pool_size"></property -->

      <!-- dialect for MySQL -->
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

            <property name="hibernate.show_sql">True</property>
            <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
         <mapping resource="User.hbm.xml"/>


        </session-factory>
    </hibernate-configuration>

    User.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD//EN"
     "

    <hibernate-mapping package="com.user">
     <class
      name="User"
      table="user"
     >
      <id
       name="Id"
       type="integer"
       column="id"
      >
       <generator class="native"/>
      </id>

      <property
       name="Name"
       column="name"
       type="string"
       not-null="true"
       length="20"
      />
      <property
       name="Password"
       column="password"
       type="string"
       not-null="true"
       length="20"
      />
      <component name="Contact" class="Contact">
       <property
       name="Email"
       column="email"
       type="string"
       not-null="false"
       length="50"
      />
      <property
       name="Address"
       column="address"
       type="string"
       not-null="false"
       length="100"
      />
      </component>
      


     </class> 
    </hibernate-mapping>

     

    3.測試
    添加一個測試類:HibernateTest

    package com.user;

    import java.util.List;
    import java.util.ListIterator;

    import org.hibernate.*;
    import org.hibernate.cfg.*;

    public class HibernateTest {
        public static void main(String[] args) throws HibernateException {
            SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
           
            //
            //testInsert(sessionFactory);
           
            //
            testQuery(sessionFactory);
           
             
            sessionFactory.close();
           
        }
        public static void testInsert( SessionFactory sessionFactory )throws HibernateException {
         
          Session session = sessionFactory.openSession();
            Transaction tx= session.beginTransaction();
            User user = new User();
            Contact contact=new Contact();
            contact.setEmail("email");
            contact.setAddress("address");
           
            user.setName("caterpillar");
            user.setPassword("password");
            user.setContact(contact);
           
            session.save(user);
            tx.commit();
            session.close();
            System.out.println("OK!");
       }
       
        public static void testQuery( SessionFactory sessionFactory )throws HibernateException {
         
         Session session = sessionFactory.openSession();
            Transaction tx= session.beginTransaction();
            User user = new User();
            Contact contact=new Contact();
                     
            Query query=session.createQuery("from User as user");
            //query.setCharacter(1, 'M');
            List names =query.list();
            for(ListIterator it=names.listIterator();it.hasNext();){
               user= (User)it.next();
               System.out.println("Id: " + user.getId());
                System.out.println("name: " + user.getName());
                System.out.println("password: " + user.getPassword());
                if(user.getContact()!=null){
                 
                 if(user.getContact().getEmail()!=null){
                  System.out.println("Email: " + user.getContact().getEmail());
                 }
                 if(user.getContact().getAddress()!=null){
                  System.out.println("Address: " + user.getContact().getAddress());
                   
                 }
                }
               
               
               
            }
             
          
            tx.commit();
            session.close();
         
        }
    }

     

      

     

    posted @ 2005-12-10 12:50 all gone 閱讀(5032) | 評論 (3)編輯 收藏

    Eclipse下JSF入門

    1.開發環境
       與Eclipse下Struts的開發類似,安裝好Eclipse和Tomcat之后,還需要兩個插件:tomcat 插件和JSF插件(如果相關插件還沒有安裝),以下是相關下載地址:
        Eclipse SDK:
            http://www.eclipse.org/downloads/index.php 
        JSF:
         https://sourceforge.jp/projects/amateras/files/  
          FaceIDE+htmlEditor,htmlEditer也是必要的
        Tomcat :
             http://www.sysdeo.com/eclipse/tomcatplugin 
        Plugin Search:
             http://eclipse-plugins.2y.net/eclipse/search.jsp 
       插件的安裝和配置有問題請直接Google。
    2.開始
        入門嘛,我們就找一個最簡單的Login就可以了

        新建Tomcat project
        加入JSF支持

        新建一個ManagedBean:


    /**
     *
     */
    package com.jsf;




    /**
     * @author lzy
     *
     */
    public class UserBean {
    private String name;
        private String password;
    public String verify() {
         if(this.name.equals("name")&&this.password.equals("password"))
         
            return "failure";

       else
            return "success";
    }

     
    /**
    * @return Returns the name.
    */
    public String getName() {
    return name;
    }

    /**
    * @param name The name to set.
    */
    public void setName(String name) {
    this.name = name;
    }


    /**
    * @return Returns the password.
    */
    public String getPassword() {
    return password;
    }

    /**
    * @param password The password to set.
    */
    public void setPassword(String password) {
    this.password = password;
    }


    }

         新建兩個JSP頁面,login.jsp,welcom.jsp

    login.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

    <html>
    <head>
    <%@ page contentType="text/html; charset=GBK" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

    <html>
    <head>
    <link href="main.css" rel="stylesheet"/>
    <title></title>

    </head>
    <body>
        <f:view>
        <f:loadBundle basename="com.jsf.MessageResources" var="msgs"></f:loadBundle>
       
            <h:form>
            <h:panelGrid columns="3" headerClass="header" rowClasses="evenRow,oddRow">
            <f:facet name="header" >
            <h:outputText value="#{msgs.header}"/>
            </f:facet>
           
            <h:outputText value="#{msgs.namePromt}"></h:outputText>
            <h:inputText id="name"  required="true" value="#{user.name}">
            <f:validateLength minimum="2" maximum="10"></f:validateLength>
            </h:inputText>
            <h:message for="name" errorClass="errors"/>
           
           
            <h:outputText value="#{msgs.passwordPromt}"></h:outputText>
           
            <h:inputSecret id="password" value="#{user.password}" required="true" redisplay="true">
            <f:validateLength minimum="2"></f:validateLength>
            </h:inputSecret>
            <h:message for="password"/>
           
           
                  <f:facet name="footer" >
            <h:outputText value="#{msgs.footer}"/>
            </f:facet>
            </h:panelGrid>          
                <h:commandButton value="#{msgs.submitPromt}" action="#{user.verify}"/>
                <h:commandButton value="#{msgs.resetPromt}" type="reset"/>
            </h:form>
        </f:view>
    </body>
    </html>



    welcome.jsp


    <%@ page contentType="text/html; charset=GBK" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
    <title></title>
    </head>
    <body>
        <f:view>
            <h:outputText value="#{user.name}"/>  is a good boy!
            <h3>welcome JavaServer Faces</h3>
        </f:view>
    </body>

    </html>
         編輯WEB-INF/lib下的faces-config.xml

    struts-config.xml

    <?xml version="1.0"?>
    <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
    <faces-config>
    <navigation-rule>
            <from-view-id>/login.jsp</from-view-id>
            <navigation-case>
                <from-outcome>success</from-outcome>
                <to-view-id>/welcome.jsp</to-view-id>
            </navigation-case>
            <navigation-case>
                <from-outcome>failure</from-outcome>
                <to-view-id>/login.jsp</to-view-id>
            </navigation-case>
    </navigation-rule>


    <managed-bean>
    <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>com.jsf.UserBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    </faces-config>


           最后是資源文件

    # --login.jsp--
    header=Welcom
    namePromt=Name:
    passwordPromt=Password:
    amountPromt=Amount:
    datePromt=Date:
    submitPromt=Submit
    resetPromt=Reset
    footer=Thank you!


    3.測試
    在test工程中選擇tomcat project->Update context definition
    然后運行Tomcat
    http://127.0.0.1:8080/jsfTest/login.jsf

    posted @ 2005-12-10 12:05 all gone 閱讀(17651) | 評論 (11)編輯 收藏

    Eclipse下Struts開發入門

     

    1.開發環境
       開發之前首先應該準備好開發環境,Eclipse 3.X是一個不錯的Java IDE,有很多插件可以供我們選擇,服務器用Tomcat就行了。安裝好Eclipse和Tomcat之后,還需要兩個插件:tomcat 插件和Struts插件,以下是相關下載地址:
         Eclipse SDK:
            http://www.eclipse.org/downloads/index.php
        Struts:
         https://sourceforge.jp/projects/amateras/files/         StrutsIDE+htmlEditor,htmlEditer也是必要的
        Tomcat :
             http://www.sysdeo.com/eclipse/tomcatplugin
        Plugin Search:
             http://eclipse-plugins.2y.net/eclipse/search.jsp
       插件的安裝和配置有問題請直接Google。
    2.開始
        入門嘛,我們就找一個最簡單的Login就可以了

        新建Tomcat project,如下圖

        加入struts支持
        新建一個FormBean:LoginForm


    /**
     *
     */
    package com.test;

    import javax.servlet.http.HttpServletRequest;

    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;

    /**
     * @author lzy
     *
     */
    public class LoginForm extends ActionForm {

     private String name=null;
     private String password=null;
     /* (non-Javadoc)
      * @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
      */
     @Override
     public void reset(ActionMapping arg0, HttpServletRequest arg1) {
      // TODO Auto-generated method stub
      name=null;
      password=null;
     }
     /* (non-Javadoc)
      * @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
      */
     @Override
     public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) {
      // TODO Auto-generated method stub
    ActionErrors errors=new ActionErrors();
      
      if(name==null||name.length()<1){
       errors.add("username",new ActionMessage("errors.login.name.empty"));
       
      }
      if(password==null||password.length()<1){
       errors.add("password",new ActionMessage("errors.login.password.empty"));
       
      }
      
      return errors;
     }
     /**
      * @return Returns the name.
      */
     public String getName() {
      return name;
     }
     /**
      * @param name The name to set.
      */
     public void setName(String name) {
      this.name = name;
     }
     /**
      * @return Returns the password.
      */
     public String getPassword() {
      return password;
     }
     /**
      * @param password The password to set.
      */
     public void setPassword(String password) {
      this.password = password;
     }
    }

     

     

         新建一個Action:LoginAction

    /**
     *
     */
    package com.test;


    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import org.apache.struts.*;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
    import org.apache.struts.action.ActionMessages;

    /**
     * @author lzy
     *
     */
    public class LoginAction extends Action {
     public ActionForward execute(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
      // TODO Auto-generated method stub
      LoginForm loginForm=(LoginForm)actionForm;
      String name=loginForm.getName();
      String password=loginForm.getPassword();


     if(name.equals("name")&&password.equals("password")){
       HttpSession session=request.getSession(true);
       session.setAttribute("LOGGED_USER",name);

       
       return mapping.findForward("success");
       
      }
      else{
       ActionMessages errors=new ActionMessages();
       errors.add("login.failure",new ActionMessage("errors.login.failure")); 
       this.saveErrors(request,errors);
       
       return mapping.findForward("failure"); 
       
      }
      
     }

    }

         新建兩個JSP頁面,login.jsp,index.jsp

    login.jsp
    <%@ page contentType="text/html; charset=GBK" %>
    <%@ taglib uri="/tags/struts-html" prefix="html" %>
    <%@ taglib uri="/tags/struts-tiles" prefix="tiles" %>

    <html:html>
     <head>
      <html:base />
              </head>
     <body>
     <center>
     <html:errors />
      <html:form action="/login.do" method="POST">
      <table border="1">
       <tr>
        <td colspan="2"><bean:message key="login.jsp.form.title"/></td>
       </tr>
       <tr>
        <td align="right"><bean:message key="login.jsp.name"/></td>
        <td><html:text property="name" size="20"></html:text></td>
       </tr>
       <tr>
        <td align="right"><bean:message key="login.jsp.password"/></td>
        <td><html:password property="password" size="20"></html:password></td>
       </tr>
       <tr>
        <td colspan="2">
         <html:submit><bean:message key="form.submit"/></html:submit>
         <html:reset><bean:message key="form.reset"/></html:reset>
        </td>
       </tr>
     
      </table>
     
      </html:form>
      
     </center>
     </body>
    </html:html>


    index.jsp


    <%@ page contentType="text/html; charset=GBK" %>
    <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
    <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
    <%@ taglib uri="/tags/struts-html" prefix="html" %>
    <%@ taglib uri="/tags/struts-nested" prefix="nested" %>

    <html:html>
     <head>
      <meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
      <title></title>
     </head>
     <body>
     hello
      <logic:present name="LOGGED_USER">,<bean:write name="LOGGED_USER"/>
      </logic:present>
     </body>
    </html:html>


         編輯WEB-INF/lib下的struts-config.xml

    struts-config.xml

    <?xml version="1.0"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "<struts-config>
      <data-sources>
      </data-sources>
      <form-beans>
        <form-bean name="loginForm" type="com.lzy.LoginForm"/>
      </form-beans>
      <global-exceptions>
      </global-exceptions>
      <global-forwards>
      </global-forwards>
      <action-mappings>
          <action path="/login" name="loginForm" type="com.lzy.LoginAction" scope="session" validate="true" input="/login.jsp">
          <forward name="failure" path="/login.jsp"/>
          <forward name="success" path="/index.jsp"/>
        </action>
      </action-mappings>
      <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
      <message-resources parameter="MessageResources"/>

    </struts-config>


           最后是資源文件

    # -- standard errors --
    errors.header=<UL><font color="red"><h2>Errors:</h2>
    errors.prefix=<LI>
    errors.suffix=</LI>
    errors.footer=</font></UL><hr>


    form.submit=Submit

    form.reset=Reset


    # -- login.jsp --
    login.jsp.title=Login
    login.jsp.form.title=Login
    login.jsp.name=Name:
    login.jsp.password=Password:

    # -- login errors --
    errors.login.name.empty=The name can not be empty!
    errors.login.password.empty=The password can not be empty!
    errors.login.failure=Login failed!<br> Please check your username and password!

     

    3.測試
    在test工程中選擇tomcat project->Update context definition
    然后運行Tomcat
    http://127.0.0.1:8080/test/login.jsp


      

    posted @ 2005-12-10 11:10 all gone 閱讀(1215) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 国产一级一片免费播放i| 亚洲成A人片在线播放器| 国产伦精品一区二区三区免费迷| 免费成人高清在线视频| 黄页网址在线免费观看| 亚洲剧情在线观看| 午夜亚洲www湿好大| 亚洲欧洲精品无码AV| 亚洲国产成人久久综合区| 成人午夜大片免费7777| 999国内精品永久免费视频| 免费在线看黄的网站| 国产无遮挡色视频免费观看性色| 久久亚洲色WWW成人欧美| 亚洲一区免费在线观看| 亚洲男人的天堂在线| 老色鬼久久亚洲AV综合| 国产亚洲精久久久久久无码| 亚洲国产精品成人| 免费不卡中文字幕在线| 国产一精品一aⅴ一免费| 国产禁女女网站免费看| 美女被免费视频网站a国产| A级毛片内射免费视频| 思思re热免费精品视频66| 猫咪免费人成网站在线观看| 最近免费中文字幕大全免费版视频| 免费萌白酱国产一区二区三区| 国产伦精品一区二区免费| 久久一区二区免费播放| 三上悠亚电影全集免费| 99在线热播精品免费99热| 99久久精品毛片免费播放| 男人的天堂网免费网站| 一级毛片免费毛片一级毛片免费 | 国产人在线成免费视频| 无码精品A∨在线观看免费| 99在线精品免费视频九九视| 免费可以在线看A∨网站| 女人18毛片免费观看| 国产91久久久久久久免费|