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

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

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

    J2EE,Documentum,GWT,EJB學習路程

    為了所愛的,和愛我的人努力

     

    調整java 虛擬機


    盡管 JVM 調整操作隨 JVM 提供程序的不同而有所變化,但一般的調整概念適用于所有 JVM。這些一般的概念包括:
    編譯器調整。在服務器運行時期間,所有 JVM 都使用即時(JIT)編譯器來將 Java 字節碼編譯為本機指令。
    Java 內存或堆調整。JVM 內存管理功能(即垃圾回收)為提高 JVM 性能提供了其中一種最大的可能性。
    類裝入調整。
    過程
    優化啟動性能和運行時性能
    在某些環境中,優化 WebSphere Application Server 的啟動性能比優化運行時性能更重要。在另一些環境中,優化運行時性能更為重要。缺省情況下,IBM JVM 是針對運行時性能進行優化的,而基于 HotSpot 的 JVM 是針對啟動性能進行優化的。

    Java JIT 編譯器在很大程度上決定了是優化啟動性能還是優化運行時性能。編譯器使用的初始優化級別影響編譯類方法所耗用的時間以及啟動服務器所耗用的時間。為了提高 啟動速度,可以降低編譯器所使用的初始優化級別。這意味著,由于現在使用較低的優化級別來編譯類方法,所以應用程序的運行時性能可能會下降。

    因為編譯器在運行時執行階段會根據自己的判斷來重新編譯類方法以提高性能,所以,很難提供一個有關特定的運行時性能影響的說明。最終,應用程序的持續時間 是影響運行時性能下降程度的主要原因。運行時間較短的應用程序的方法被重新編譯的可能性較高。運行時間較長的應用程序的方法被重新編譯的可能性較低。 IBM JVM 的缺省設置是使用高優化級別來執行初始編譯。如果需要更改此行為,可以使用以下 IBM JVM 選項:

    -Xquickstart

    此設置影響 IBM JVM 使用較低優化級別來編譯類方法的方式,這將提高服務器啟動速度,但會使運行時性能下降。缺省情況下,如果未指定此參數,IBM JVM 最初將使用較高的初始優化級別來執行編譯。此設置能夠提高運行時性能,但會減慢服務器啟動速度。

    缺省值: 高初始編譯器優化級別
    建議值: 高初始編譯器優化級別
    用法: -Xquickstart 可以加快服務器啟動速度。

    基于 Sun 的 Hotspot 技術的 JVM 最初使用低優化級別來編譯類方法。使用下列 JVM 選項來更改此行為:

    -server

    基于 Sun 的 Hotspot 技術的 JVM 最初使用低優化級別來編譯類方法。這些 JVM 使用簡單編譯器和能夠進行優化的 JIT 編譯器。通常情況下,使用簡單 JIT 編譯器。然而,可以通過設置此選項來使用能夠執行優化的編譯器。此更改將顯著提高服務器的性能,但使用能夠執行優化的編譯器時,服務器的預備時間將會較 長。

    缺省值: 簡單編譯器
    建議值: 能夠執行優化的編譯器
    用法: -server 啟用能夠執行優化的編譯器。

    設置堆大小 下列命令行參數對于設置堆大小來說很有用。
    -Xms
    此設置控制 Java 堆的初始大小。正確調整此參數有助于降低垃圾回收開銷,從而縮短服務器響應時間并提高吞吐量。對于某些應用程序來說,此選項的缺省設置可能會太低,從而導致發生大量小型垃圾回收。

    缺省值: 256 MB
    建議值: 隨工作負載的不同而有所變化,但高于缺省值。
    用法: -Xms256m 將初始堆大小設置為 256 兆字節

    -Xmx
    此設置控制 Java 堆的最大大小。正確調整此參數有助于降低垃圾回收開銷,從而縮短服務器響應時間并提高吞吐量。對于某些應用程序來說,此選項的缺省設置可能會太低,從而導致發生大量小型垃圾回收。

    缺省值: 512 MB
    建議值: 隨工作負載的不同而有所變化,但高于缺省值。
    用法: -Xmx512m 將最大堆大小設置為 512 兆字節

    -Xlp
    此設置可以與 IBM JVM 配合使用,以使用大頁來分配堆。然而,如果使用此設置,那么必須將操作系統配置為支持大頁。使用大頁可以降低 CPU 跟蹤堆內存時的開銷,并且還允許創建較大的堆。

    請參閱調整操作系統 以了解有關調整操作系統的更多信息。

    應該指定的堆大小取決于不同時段的堆使用情況。在堆大小頻繁更改的情況下,對 Xms 和 Xmx 參數指定相同的值可以提高性能。

    調整 IBM JVM 的垃圾回收器。
    使用 Java -X 選項來查看內存選項列表。

    -Xgcpolicy
    將 gcpolicy 設置為 optthruput 會禁用并發標記。如果沒有暫停時間問題(表現為應用程序響應時間不規律),那么應該使用此選項來實現最大吞吐量。將 gcpolicy 設置為 optavgpause 會使用缺省值來啟用并發標記。此設置將減少由正常垃圾回收所引起的應用程序響應時間不規律情況。然而,此選項可能會降低整體吞吐量。

    缺省值: optthruput
    建議值: optthruput
    用法: Xgcpolicy:optthruput

    -Xnoclassgc
    缺省情況下,當一個類沒有任何活動實例時,JVM 就會從內存中卸裝該類,但是這樣會使性能下降。如果關閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個類而造成的開銷。

    如果不再需要某個類,那么該類在堆中所占用的空間通常將用于創建新對象。但是,如果應用程序通過創建類的新實例來處理請求,并且該應用程序的請求是隨機出 現的,那么可能會發生以下情況:先前請求者完成后,正常的類垃圾回收將通過釋放這個類占用的堆空間來清除這個類,但當下一個請求出現時,又必須將這個類重 新實例化。在這種情況下,您可能想使用此選項來禁用類垃圾回收。

    缺省值: 啟用類垃圾回收
    建議值: 禁用類垃圾回收
    用法: Xnoclassgc 禁用類垃圾回收

    有關其他信息,請參閱下列 DeveloperWorks 文章:
    http://www.ibm.com/developerworks/java/
    調整 Sun JVM 的垃圾回收器
    在 Solaris 平臺上,WebSphere Application Server 在 Sun Hotspot JVM 上運行,而不是在 IBM JVM 上運行。對 Sun JVM 使用正確的調整參數以利用其性能優化功能十分重要。

    Sun Hotspot JVM 依靠分代垃圾回收來實現最佳性能。下列命令行參數對于調整垃圾回收來說非常有用。

    -XX:SurvivorRatio
    將 Java 堆劃分為舊對象(長生命周期對象)區域和新對象區域。新對象區域進一步細分為兩部分,第一部分用于分配給新對象(初始區域),第二部分存放那些經過其前幾 次垃圾回收之后、但在被提升為舊對象之前仍在使用中的新對象(幸存者空間)。幸存者比率是堆的新對象區域中初始區域與幸存者空間的比率。增大此設置將針對 需要創建大量對象但僅保留少量對象的應用程序優化 JVM。與其他應用程序相比,WebSphere Application Server 會生成更多中等生命周期對象和長生命周期對象,因此,應該將此設置設置為小于缺省值。

    缺省值: 32
    建議值: 16
    用法: -XX:SurvivorRatio=16

    -XX:PermSize
    為永久生成對象保留的堆區域存儲 JVM 的所有反射數據。對于動態地裝入和卸裝大量類的應用程序來說,應該增大此大小以優化它們的性能。通過將此參數設置為 128MB,可以消除增大此部分堆所需的開銷。

    建議值: 128 MB
    用法: XX:PermSize=128m 將 perm 大小設置為 128 兆字節。

    -Xmn
    此設置控制允許新生成的對象在堆中耗用的空間量。正確調整此參數有助于降低垃圾回收開銷,從而縮短服務器響應時間并提高吞吐量。此參數的缺省設置通常過 低,這將導致執行大量的小型垃圾回收操作。如果將此參數設置得過高,可能會導致 JVM 僅執行大型(全面)垃圾回收。這些垃圾回收操作通常會耗時幾秒鐘,這將嚴重影響服務器的整體性能。您必須保持將此參數設置為小于整個堆大小的一半,以避免 這種情況出現。

    缺省值: 2228224 字節
    建議值: 大約整個堆大小的 1/4
    用法: -Xmn256m 將大小設置為 256 兆字節。

    -Xnoclassgc
    缺省情況下,當一個類沒有任何活動實例時,JVM 就會從內存中卸裝該類,但是這樣會使性能下降。如果關閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個類而造成的開銷。

    如果不再需要某個類,那么該類在堆中所占用的空間通常將用于創建新對象。但是,如果應用程序通過創建類的新實例來處理請求,并且該應用程序的請求是隨機出 現的,那么可能會發生以下情況:先前請求者完成后,正常的類垃圾回收將通過釋放這個類占用的堆空間來清除這個類,但當下一個請求出現時,又必須將這個類重 新實例化。在這種情況下,您可能想使用此選項來禁用類垃圾回收。

    缺省值: 啟用類垃圾回收
    建議值: 禁用類垃圾回收
    用法: Xnoclassgc 禁用類垃圾回收

    有關調整 Sun JVM 的其他信息,請參閱 Java HotSpot VM 的性能文檔。

    調整 HP JVM 的垃圾回收器
    HP JVM 依靠分代垃圾回收來實現最佳性能。下列命令行參數對于調整垃圾回收來說非常有用。

    -Xoptgc
    此設置針對包含許多短生命周期對象的應用程序優化 JVM。如果未指定此參數,那么 JVM 通常執行大型(全面)垃圾回收。全面垃圾回收會花費幾秒鐘時間,這將顯著影響服務器性能。

    缺省值: off
    建議值: on
    用法: -Xoptgc 啟用優化的垃圾回收。

    -XX:SurvivorRatio
    將 Java 堆劃分為舊對象(長生命周期對象)區域和新對象區域。新對象區域進一步細分為兩部分,第一部分用于分配給新對象(初始區域),第二部分存放那些經過其前幾 次垃圾回收之后、但在被提升為舊對象之前仍在使用中的新對象(幸存者空間)。幸存者比率是堆的新對象區域中初始區域與幸存者空間的比率。增大此設置將針對 需要創建大量對象但僅保留少量對象的應用程序優化 JVM。與其他應用程序相比,WebSphere Application Server 會生成更多中等生命周期對象和長生命周期對象,因此,應該將此設置設置為小于缺省值。

    缺省值: 32
    建議值: 16
    用法: -XX:SurvivorRatio=16

    -XX:PermSize
    為永久生成對象保留的堆區域存儲 JVM 的所有反射數據。對于動態地裝入和卸裝大量類的應用程序來說,應該增大此大小以優化它們的性能。通過將此參數指定為 128 兆字節,可以消除增大此部分堆所需的開銷。

    缺省值: 0
    建議值: 128 兆字節
    用法: -XX:PermSize=128m 將 PermSize 設置為 128 兆字節

    -XX:+ForceMmapReserved
    缺省情況下,Java 堆以“惰性交換”方式進行分配。在此方式下,將根據需要來分配內存頁,這樣可以節省交換空間,但是也將強制使用 4KB 頁。在大型堆系統中,這種內存分配方式允許堆包含數以十萬計的頁。此命令禁用“惰性交換”并允許操作系統使用較大的內存頁,從而優化對構成 Java 堆的內存的訪問。

    缺省值: off
    建議值: on
    用法: -XX:+ForceMmapReserved 將禁用“惰性交換”。

    -Xmn
    此設置控制允許新生成的對象在堆中耗用的空間量。正確調整此參數有助于降低垃圾回收開銷,從而縮短服務器響應時間并提高吞吐量。此參數的缺省設置通常過低,這將導致執行大量的小型垃圾回收操作。

    缺省值: 沒有缺省值
    建議值: 大約整個堆大小的 3/4
    用法: -Xmn768m 將大小設置為 768 兆字節

    虛擬頁大小
    通過將 Java 虛擬機的指令頁大小和數據頁大小設置為 64MB,可以提高性能。

    缺省值: 4MB
    建議值: 64MB
    用法: 使用以下命令。命令輸出提供了進程可執行文件的當前操作系統特征:
    chatr +pi64M +pd64M /opt/WebSphere/
    AppServer/java/bin/PA_RISC2.0/
    native_threads/java


    -Xnoclassgc
    缺省情況下,當一個類沒有任何活動實例時,JVM 就會從內存中卸裝該類,但是這樣會使性能下降。如果關閉類垃圾回收,就可以消除由于多次裝入和卸裝同一個類而造成的開銷。

    如果不再需要某個類,那么該類在堆中所占用的空間通常將用于創建新對象。但是,如果應用程序通過創建類的新實例來處理請求,并且該應用程序的請求是隨機出 現的,那么可能會發生以下情況:先前請求者完成后,正常的類垃圾回收將通過釋放這個類占用的堆空間來清除這個類,但當下一個請求出現時,又必須將這個類重 新實例化。在這種情況下,您可能想使用此選項來禁用類垃圾回收。

    缺省值: 啟用類垃圾回收
    建議值: 禁用類垃圾回收
    用法: Xnoclassgc 禁用類垃圾回收

    有關調整 HP 虛擬機的其他信息,請參閱 Java 技術軟件 HP-UX 11i。

    調整 HP 的 JVM for HP-UX 設置下列選項以提高應用程序性能:
    -XX:SchedulerPriorityRange=SCHED_NOAGE
    -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.DevPollSelectorProvider
    -XX:-ExtraPollBeforeRead

    posted @ 2009-11-06 10:38 田亮 閱讀(389) | 評論 (1)編輯 收藏

    在RED HAT ENTERPRICE LINUX4 上安裝ORACLE 10G

    在RED HAT ENTERPRICE LINUX4 上安裝ORACLE 10G (10.2.0.1.0)


    第一步 準備工作

    ? 檢查內存
    SZ_TOMCAT:/home/xjy/soft> grep SwapTotal /proc/meminfo
    SwapTotal:     2031608 kB

    ? 檢查內核
     Linux reaky.com 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux

    ? 檢查軟件包
    SZ_TOMCAT:/home/xjy/soft> rpm -q gcc make binutils glibc libaio
    gcc-3.4.3-9.EL4
    make-3.80-5
    binutils-2.15.92.0.2-10.EL4
    glibc-2.3.4-2
    libaio-0.3.102-1

    SZ_TOMCAT:/home/xjy/soft> rpm -q openmotif
    openmotif-2.2.3-6.RHEL4.2
    setarch-1.6-1


    檢查內核參數
    sysctl –a

    然后在/ETC/sysctl.conf中添加
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    fs.file-max = 65536
    net.ipv4.ip_local_port_range = 1024 65000
    net.core.rmem_default = 262144
    net.core.rmem_max = 1048576
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576

    執行/sbin/sysctl –p

    中文化顯示工作

    修改/etc/sysconfig/i18n文件,改為
    LANG="zh_CN.GB18030"
    LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-:en_US:en"
    SYSFONT="lat0-sun16"修改/etc/sysconfig/i18n文件,改為
    LANG="zh_CN.GB18030"
    LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-:en_US:en"
    SYSFONT="lat0-sun16"


    第二步:
    ? 創建用戶
    su – root
    [root@reaky etc]# groupadd dba
    [root@reaky etc]# groupadd oinstall
    [root@reaky etc]# useradd -c "Oracle software owner" -g oinstall -G dba oracle

    ? 設置環境
    編輯/home/oracle/.bash_profile
    # .bash_profile
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
            . ~/.bashrc
    fi
    # User specific environment and startup programs
    alias ls='ls -CF'
    PS1='SZ_TOMCAT:$PWD> '; export PS1
    umask 022
    set -o vi
    stty intr '^c'
    stty -istrip
    #if [ $USER = "oracle" ]; then
    #        if [ $SHELL = "/bin/ksh" ]; then
    #              ulimit -p 16384
    #              ulimit -n 65536
    #        else
    #              ulimit -u 16384 -n 65536
    #        fi
    #fi
    EDITOR=vi;   export EDITOR
    TEMP=/tmp;   export TEMP
    TMPDIR=/tmp; export TMPDIR
    ### SETUP ORACLE ENVIRONMENT ###
    ORACLE_SID=ora10; export ORACLE_SID
    ORACLE_BASE=/home/oracle;                    export ORACLE_BASE
    ORACLE_HOME=/home/oracle/product/10.2.0;     export ORACLE_HOME
    ORACLE_TERM=ansi;                            export ORACLE_TERM
    JAVA_FONTS=/usr/share/fonts/zh_CN/TrueType/; export JAVA_FONTS
    NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;          export NLS_LANG
    LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
    export LD_LIBRARY_PATH
    CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
    CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
    export CLASSPATH
    PATH=.:$ORACLE_HOME/bin:$PATH
    export PATH
    ### FOR ORACLE INSTALL ###
    export LC_ALL="en_US"
    export LC="en_US"


    第三步、安裝Oracle10g
       
    1.開始Oracle普通安裝
       以oracle用戶登錄linux,加載oracle Oracle10g光盤, 在執行runInstaller前,確定Oracle環境變量已經設置,可以執行如下命令檢驗環境變量的設置:
    oracle 用戶登陸
    $set
    在終端命令窗口,執行如下命令,開始oracle10g的安裝:
    oracle$/mnt/cdrom/runInstaller
    2.在歡迎窗口界面: 點擊“下一步”按鈕
    3.指定Inventory 路徑和身份證明窗口:
        inventory路徑是: /home/oracle/oraInventory
      指定操作系統組名: oinstall
    點擊“下一步”按鈕
    4.這時會彈出一個執行orainstRoot.sh 腳本的窗口:
    打開另一個終端,以root用戶執行如下命令:
    su – root
    cd  /home/oracle/oraInventory
    ./orainstRoot.sh
    然后,切換到oracle安裝窗口,點擊“繼續”按鈕
    5.        在指定文件位置窗口彈出后,指定相應的路徑:
    源:
    路徑: /mnt/cdrom/stage/products.xml
    目的:
    名稱:  OraDb10g_home1
    路徑: /home/oracle/product/10.1.0/db_1
    然后,點擊“下一步”按鈕
    6.選擇安裝類型:
    選擇"企業版"選項,然后點擊“下一步”按鈕。安裝程序驗證系統是否符合安裝和配置所選產品的所有最低要求
    7.        安裝程序驗證系統是否符合安裝和配置所選產品的所有最低要求。當檢測完成并成功后,點擊“下一步”按鈕
    8.        選擇數據庫設置:
    選擇"通用"選項,然后點擊“下一步”按鈕
    9.指定數據庫配置參數:
    全局數據庫名稱: "test".
    SID: "test".
    選中“創建帶樣本方案的數據庫”復選框,然后,點擊“下一步”按鈕
    10.選擇數據庫管理設置:
    選擇"使用 Database Control管理數據庫"。
    然后,點擊“下一步”
    11.指定數據庫文件存儲選項
    選擇 "文件系統"選項.
    指定數據庫路徑: /home/oracle/oradata/
    然后點擊“下一步”按鈕,
      12.指定備份和恢復選項:
    選擇"不啟用自動備份".
    點擊 “下一步”按鈕
    13.指定數據庫方案口令:
    可以為SYS、SYSTEM、SYSMAN、DBSNMP單獨指定口令,或選擇"所有用戶使用同一口令"選項.為這些用戶指定同一個口令。
    指定口令不要以數字開始,否則會得到錯誤信息.然后點擊 “下一步”按鈕
    14.        出現概要窗口后, 點擊“安裝”按鈕
    15.        這時你會看到數據庫安裝過程窗口,然后會出現輔助設置窗口,再出現數據庫創建窗口。
    16.        數據庫創建完畢,彈出數據庫創建完成窗口,點擊Ok按鈕。
    當彈出一個執行root.sh腳本的窗口時在另一個終端執行如下命令:
    su – root
    cd /home/oracle/product/10.1.0/db_1
    ./root.sh
    點擊確定”按鈕

    17.        在概要安裝完畢,會報告一個發現$ORACLE_BASE/product/10.1.0/db_1/portlist.ini文件,這時點擊OK按鈕
    18.        安裝結束:
    點擊“退出”按鈕,結束安裝程序。
    六、數據庫的啟動和停止
    要使數據庫啟動,執行如下命令:
    oracle$ sqlplus /nolog
    SQL> connect / as sysdba
    SQL> startup
    要使數據庫停止,執行如下命令:
    oracle$ sqlplus /nolog
    SQL> connect / as sysdba
    SQL> shutdown
     


    刪除oracle10g
          如果oracle10ganzhuang過程中出現錯誤,需要重新安裝,可以執行如下命令刪除以前安裝的oracle:
    su –oracle
    rm –rf /home/oracle/*
    rm –f  /etc/oraInst.loc /etc/oratab  /etc/oracle
    su –root
    export ORACLE_HOME=/home/oracle/product/10.1.0/db_1
    $ORACLE_HOME/bin/localconfig delete
    rm –f /etc/inittab.cssd
    rm –f /usr/local/bin/coraenv  /usr/local/bin/dbhome
    rm –f /usr/local/bin/oraenv
    執行完上述命令后,重新啟動系統,可以重新安裝oracle10g數據庫系統


    FAQ (在Linux平臺安裝Oracle比較常見的問題)
    1. 不能啟動安裝界面
    運行runInstaller提示信息類似如下:
    xlib:connection to "localhost:0.0" refused by server
    xlib:client is not authorized to connect to server
    Exception in thread "main" java.lang.InternalError:
    can't connect to x11 window server using "localhost:0.0" at .......
    解決辦法: 設定你的DISPLAY環境參數.
    # export DISPLAY= your_IPaddress :0.0
    把your_IPaddress換成你的IP.或者用root簡單的執行一下# xhost + (要注意這樣會有安全上的隱患)
    2.安裝界面顯示很多"口口"樣子的亂碼
    解決辦法:查看locale輸出
    # locale
    LANG=en_US.UTF-8
    LC_CTYPE=zh_CN.GB18030
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=
    執行#export LC_CTYPE=en_US.UTF-8 然后重新調用安裝程序.
    3. 用IE登錄Linux服務器上的em出現亂碼
    在Linux(Unix) 環境下成功安裝了Oracle 10g,從windows下用IE瀏覽器登錄 10g 的em, 按鈕是"口口"這樣的方框.
    解決辦法: 參考:
    http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm
    4.創建數據庫的時候出現ORA-03113的錯誤
    解決辦法: 查看核心參數是否調整正確.參考:
    http://www.dbanotes.net/Oracle/ORA-03113.htm
    5. RedHat 9 / FC1等系統10g不支持如何安裝?
    解決辦法:在10g不支持的Linux發行版上安裝10g的解決方法
    1). 運行runInstaller -ignoreSysPrereqs,這樣會跳過檢查.
    2). 摘自 www.puschitz.com 修改/etc/redhat-release文件:
    #su - root
    #cp /etc/redhat-release /etc/redhat-release.backup
    #cat > /etc/redhat-release <<   EOF
    Red Hat Enterprise Linux AS release 3 (Taroon)
    EOF
    安裝完畢,執行如下操作:
    #su - root
    #cp /etc/redhat-release.backup /etc/redhat-release
    3). http://www.dbanotes.net/Oracle/10G-Beta-Install-Bug.htm
    同樣的思路,我們可以修改Oracle 的install/oraparam.ini文件達到目的.
    6.如何關掉那些 ocssd.bin 進程?
    解決辦法:編輯/etc/inittab文件(做好備份)
    注釋掉這一行:
    h1:3:respawn:/etc/init.d/init.cssd run >/dev/null 2>................
    ---------------------------------------------------------------------------------------------------------------------
    參考信息
    http://blog.csdn.net/itsdn/archive/2007/05/21/1619114.aspx

    1、在 Linux x86 上安裝Oracle數據庫10g
    http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#rhel3
    2、Oracle 10gR2 + RedHat Enterprise Linux AS4 安裝
    http://www.linuxdiyf.com/viewarticle.php?id=11578
    3、Oracle 10g For Linux安裝手冊
    http://bbs.database.ccidnet.com/htm_data/27/0607/112610.html
    4、Installing Oracle 10g on RHEL AS 3 Step-by-Step
    http://www.dbanotes.net/Oracle/Install-Oracle10g-RHEL3.htm

    /etc/rc.d/init.d/dbora文件內容
    #http://staff.in2.hr/denis/oracle/10g1install_fedora3_en.html#n4_4
    # chkconfig: 0356 95 1
    # description: init script to start/stop oracle database 10g, TNS listener, EMS
    #
    #
    # match these values to your environment:
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
    export ORACLE_SID=CQRCDATA
    export PATH=$PATH:$ORACLE_HOME/bin
    export ORACLE_USER=oracle
    # see how we are called:
    case $1 in
    start)
    dltelecom  - "$ORACLE_USER" -c "$ORACLE_HOME/bin/dbstart"
    dltelecom  - "$ORACLE_USER" -c "$ORACLE_HOME/bin/emctl start dbconsole"
    dltelecom  - "$ORACLE_USER" -c "SORACLE_HOME/bin/isqlplusctl start"
    ;;
    stop)
    dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
    dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
    dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    ;;
    esac

    posted @ 2009-10-13 19:28 田亮 閱讀(463) | 評論 (0)編輯 收藏

    Linux 下安裝JDK

    一、安裝JDK

    首先到sun官網下載安裝包:

    https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter

    分別下載:jdk-6u16-linux-i586-rpm.bin jdk-6u16-linux-i586.bin

    然后將這兩個安裝文件放到:/usr/tmp 目錄下,分別修改權限,命令如下:

    # chmod u+x ./jdk-6u16-linux-i586.bin

    # chmod u+x ./jdk-6u16-linux-i586-rpm.bin

    解壓文件(這兩個文件可以自動解壓):

    # ./jdk-6u16-linux-i586.bin

    創建目錄/usr/java:

    # mkdir /usr/java

    將解壓出來的jdk-6u16-linux-i586目錄復制到/usr/java目錄下:

    # cp -fr jdk-6u16-linux-i586 /usr/java

    解壓文件

    # ./jdk-6u16-linux-i586-rpm.bin

    安裝軟件會將JDK自動安裝到 /usr/java/jdk-6u16-linux-i586目錄下

    二、配置環境變量

    1.修改用戶環境變量

    假設使用java的用戶為 guest,編輯該用戶的.bashrc文件進行環境變量設置。

    # vi /home/ guest /.bashrc

    .bashrc文件中加入:

    export JAVA_HOME=/usr/java/jdk1.6.0_16

    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    2.修改所有用戶的環境變量

    # vi /etc/profile

    在該文件中加入:

    export JAVA_HOME=/usr/java/jdk1.6.0_16

    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    注意CLASSPATH路徑中加入了$CLASSPATH,這樣可以避免將之前配置的路徑被覆蓋。

    profile文件如下:

    ############profile begin###########

    # /etc/profile

    # System wide environment and startup programs, for login setup

    # Functions and aliases go in /etc/bashrc

    pathmunge () {

            if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then

               if [ "$2" = "after" ] ; then

                  PATH=$PATH:$1

               else

                  PATH=$1:$PATH

               fi

            fi

    }

    # ksh workaround

    if [ -z "$EUID" -a -x /usr/bin/id ]; then

            EUID=`id -u`

            UID=`id -ru`

    fi

    # Path manipulation

    if [ "$EUID" = "0" ]; then

            pathmunge /sbin

            pathmunge /usr/sbin

            pathmunge /usr/local/sbin

    fi

    # No core files by default

    ulimit -S -c 0 > /dev/null 2>&1

    if [ -x /usr/bin/id ]; then

            USER="`id -un`"

            LOGNAME=$USER

            MAIL="/var/spool/mail/$USER"

    fi

    HOSTNAME=`/bin/hostname`

    HISTSIZE=1000

    if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then

        INPUTRC=/etc/inputrc

    fi

    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

    #java path

    export JAVA_HOME=/usr/java/jdk1.6.0_16

    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    for i in /etc/profile.d/*.sh ; do

        if [ -r "$i" ]; then

            . $i

        fi

    done

    unset i

    unset pathmunge

    ############profile end###########

    三、卸載jkd

    1、卸載系統自帶的jdk版本:

    查看自帶的jdk

    #rpm -qa | grep gcj

    看到如下信息:

    libgcj-4.1.2-44.el5

    java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

    使用rpm -e --nodeps 命令刪除上面查找的內容:

    #rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

    2、卸載rpm安裝的jkd版本

    查看安裝的jdk

    #rpm -qa|grep jdk

    看到如下信息:

    java-1.6.0-openjdk-1.6.0.0-0.25.b09.el5

    jdk-1.6.0_16-fcs

    卸載:

    #rpm -e --nodeps jdk-1.6.0_16-fcs

    posted @ 2009-10-13 01:58 田亮 閱讀(711) | 評論 (0)編輯 收藏

    twiki 安裝

    twiki4.1.2的安裝及配置收藏

            twiki 遵循 GPL 協議,軟件定位為“靈活、強大、易于使用的企業協作平臺”,運行于 Perl 環境,是很多大型商業公司首選的 wiki 平臺。

    安裝過程及配置:

    #建立 twiki 目錄
    mkdir /home/centeur/public_html/twiki
    cd /home/centeur/public_html/twiki
    #下載并解壓
    wget http://twiki.org/p/pub/Codev/Release/TWiki-4.1.2.tgz
    tar -zxvf TWiki-4.1.2.tgz
    #權限限制
    cp root-htaccess.txt .htaccess
    cp pub-htaccess.txt pub/.htaccess
    cp subdir-htaccess.txt lib/.htaccess
    cp subdir-htaccess.txt data/.htaccess
    cp subdir-htaccess.txt locale/.htaccess
    cp subdir-htaccess.txt templates/.htaccess
    cp bin/.htaccess.txt bin/.htaccess

     

    cp bin/LocalLib.cfg.txt bin/LocalLib.cfg
    #修改 bin/LocalLib.cfg,將 $twikiLibPath 改為合適的路徑
    $twikiLibPath = "/home/centeur/public_html/twiki/lib";
    #修改 bin/.htaccess,將 {DataDir}和{Administrators} 修改為合適的內容
    AuthUserFile /home/centeur/public_html/twiki/data/.htpasswd
    AuthName 'Enter your WikiName: (First name and last name, no space, no dots, capitalized, e.g. JohnSmith). Cancel to register if you do not have one.'
    AuthType Basic
    <FilesMatch "configure.*">
    SetHandler cgi-script
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1, 192.168.1.10
    Require user centeur
    Satisfy Any
    </FilesMatch>
    #建立系統管理員帳戶
    htpasswd -c data/.htpasswd centeur

    #現在就可以在瀏覽器中鍵入 http://example.com/twiki/bin/configure 進行設置了,設置保存在 lib/LocalSite.cfg 中
    #提示缺少 CGI::Session 模塊,進行安裝
    mkdir /home/centeur/CPAN
    cd /home/centeur/CPAN
    wget http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/CGI-Session-4.10.tar.gz
    tar -zxvf CGI-Session-4.10.tar.gz
    cd CGI-Session-4.10
    perl Makefile.PL PREFIX=/home/centeur/CPAN
    make
    make install
    #拷貝模塊到 twiki 的 lib 下
    cd /home/centeur/public_html/twiki
    cp -R /home/centeur/CPAN/lib/perl5/site_perl/5.8.8/CGI lib/CPAN/lib/CGI

    #LocalSite.cfg 的部分設置內容
    $TWiki::cfg{DefaultUrlHost} = 'http://example.com';
    $TWiki::cfg{ScriptUrlPath} = '/twiki/bin';
    $TWiki::cfg{PubUrlPath} = '/twiki/pub';
    $TWiki::cfg{PubDir} = '/home/centeur/public_html/twiki/pub';
    $TWiki::cfg{TemplateDir} = '/home/centeur/public_html/twiki/templates';
    $TWiki::cfg{DataDir} = '/home/centeur/public_html/twiki/data';
    $TWiki::cfg{LocalesDir} = '/home/centeur/public_html/twiki/locale';
    $TWiki::cfg{TempfileDir} = '/home/centeur/tmp';
    $TWiki::cfg{UseClientSessions} = 1;
    $TWiki::cfg{LoginManager} = 'TWiki::Client::TemplateLogin';
    $TWiki::cfg{MinPasswordLength} = 6;
    $TWiki::cfg{Htpasswd}{FileName} = '/home/centeur/public_html/twiki/data/.htpasswd';
    $TWiki::cfg{Languages}{ru}{Enabled} = 0;
    $TWiki::cfg{Languages}{sv}{Enabled} = 0;
    $TWiki::cfg{Languages}{'zh-tw'}{Enabled} = 1;
    $TWiki::cfg{Languages}{cs}{Enabled} = 0;
    $TWiki::cfg{Languages}{'zh-cn'}{Enabled} = 1;
    $TWiki::cfg{Languages}{es}{Enabled} = 0;
    $TWiki::cfg{Languages}{nl}{Enabled} = 0;
    $TWiki::cfg{Languages}{pl}{Enabled} = 0;
    $TWiki::cfg{Languages}{fr}{Enabled} = 0;
    $TWiki::cfg{Languages}{da}{Enabled} = 0;
    $TWiki::cfg{Languages}{de}{Enabled} = 0;
    $TWiki::cfg{Languages}{pt}{Enabled} = 0;
    $TWiki::cfg{Languages}{it}{Enabled} = 0;
    $TWiki::cfg{DisplayTimeValues} = 'servertime';
    $TWiki::cfg{Site}{Locale} = 'zh_CN.UTF-8';
    $TWiki::cfg{Site}{LocaleRegexes} = 1;
    $TWiki::cfg{StoreImpl} = 'RcsLite';
    $TWiki::cfg{WebMasterEmail} = 'lypdarling@gmail.com';
    $TWiki::cfg{UserInterfaceInternationalisation} = 1;
    $TWiki::cfg{UseLocale} = 1;
    $TWiki::cfg{Site}{CharSet} = 'UTF-8';
    $TWiki::cfg{Site}{Lang} = 'zh';
    $TWiki::cfg{Site}{FullLang} = 'zh-cn';

    #現在可以在瀏覽器中鍵入 http://example.com/twiki/bin/view 進入 twiki 頁面了
    #編輯 TWIki > Main 目錄 > TWikiAdminGroup 頁面,將 centeur 加入 GROUP
    * Member list:
      * Set GROUP = centeur
    * Persons/group who can change the list:
      * Set ALLOWTOPICCHANGE = TWikiAdminGroup
    #修改 .htaccess,進行重定向設置
    Redirect /twiki/index.html http://example.com/twiki/bin/view

    posted @ 2009-03-11 17:22 田亮 閱讀(557) | 評論 (0)編輯 收藏

    javascript call gwt method

    這個有些變態的東西折磨了整兩天(最頭疼這種東西了),我遇到的是用gwt的frame的回來一個IOStream(html string),我要高亮html里的關鍵標記,并讓他們有事件,所以,我在返回IOStream之前進行攔截,并repleace關鍵標記,加上了高亮的屬性"background-color='yellow'", 加上了事件處理"onclick=\"javascript:window.top.clickFireEvent('Todd')" (就是這一塊,最讓我頭疼了,因為是個frame所以他們不在同一個窗口下);
    在gwt中:

    //gwt EntryPoint method
    public void onModuleLoad() {
        clickEventFire();
      }

    //This is jsni method

      private static native void clickEventFire()/*-{
       $wnd.clickEventFire = function(id){
       @com.todd.Main::fireScriptEvent(Ljava/lang/String;)(name);
       }
       }-*/;

    //This is a method for javascript call.
    public static void fireScriptEvent(String name) {
        System.out.println("My name is " + name);
    }

    別看短短幾句,真的是很頭疼的東西:)

    posted @ 2008-12-17 00:45 田亮 閱讀(1618) | 評論 (3)編輯 收藏

    Java Debug

    在編程的生涯中,最重要就是能Debug,我最近在玩documentum6.0的內置中間件weblogic,所以Remote Debug是少不了的。
    先說幾個概念(這是我在網上查的):
        1.什么是JPDA:
            Java Platform Debugger Architecture(JPDA:Java平臺調試架構) 由Java虛擬機后端和調試平臺前端組成 :
                a.Java虛擬機提供了Java調試的功能
                b.調試平臺通過調試交互協議向Java虛擬機請求服務以對在虛擬機中運行的程序進行調試
           JPDA架構:
              JPDA通過兩個接口和協議來完成如上的說明,分別是JVMTI(Java虛擬機工具接口)、JDWP(Java調試連線協議)和JDI(Java調試接口)。
                a.JVMTI定義了虛擬機應該提供的調試服務,包括調試信息(Information譬如棧信息)、調試行為(Action譬如客戶端設置一個斷點)和通知                      (Notification譬如到達某個斷點時通知客戶端),該接口由虛擬機實現者提供實現,并結合在虛擬機中
                b.JDWP定義調試服務和調試器之間的通信,包括定義調試信息格式和調試請求機制
                c.JDI在語言的高層次上定義了調試者可以使用的調試接口以能方便地與遠程的調試服務進行交互,Java語言實現,調試器實現者可直接使用該接口訪問虛                擬機調試服務。
           運行方式:
              當虛擬機的調試服務運行時,虛擬機作為調試的服務提供端,監聽一個連接,而調試器通過該連接與虛擬機進行交互。目前,Windows平臺的JVM提供了兩 種          方式的連接:共享內存和 Socket連接,共享內存的服務提供端和調試端只能位于同一臺機,而Socket連接則支持不同異機調試,即遠程調試。
           虛擬參數配置:
              a.啟用調試服務
            -Xdebug 啟用調試
            -Xrunjdwp:<sub-options> 加載JVM的JPDA參考實現庫
              b. Xrunjdwp子參數(sub-options)配置
                 Xrunjdwp子參數的配置格式如下
                 -Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
              c.例子
                 -Xrunjdwp:transport=dt_socket,server=y,address=8000
             在8000端口監聽Socket連接,掛起VM并且不加載運行主函數直到調試請求到達

            -Xrunjdwp:transport=dt_shmem,server=y,suspend=n
            選擇一個可用的共享內存(因為沒有指address)并監聽該內存連接,同時加載運行主函數

            -Xrunjdwp:transport=dt_socket,address=myhost:8000
            連接到myhost:8000提供的調試服務(server=n,以調試客戶端存在),掛起VM并且不加載運行主函數
     
            -Xrunjdwp:transport=dt_shmem,address=mysharedmemory
            通過共享內存的方式連接到調試服務,掛起VM并且不加載運行主函數

            -Xrunjdwp:transport=dt_socket,server=y,address=8000,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub
            等待java.io.IOException被拋出,然后掛起VM并監聽8000端口連接,在接到調試請求后以命令/usr/local/bin/debugstub dt_socket myhost:8000執行
     
            -Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe
            等待一個RuntimeException被拋出,然后掛起VM并監聽一個可用的共享內存,在接到調試請求后以命令d:\bin\debugstub.exe dt_shmem <address>                執行, <address>是可用的共享內存
        2.基本原理
          
    服務器端在啟動的服務器的同時,也把JPDA明確的啟動起來,分配一個端口號,那么你在客戶端只要連接上JPDA服務(sun稱為工具平臺)便能測試了。
        3.Tomcat 實例
          
    打開tomcat的bin目錄,找到catalina.bat, 用記事本打開它。
            找到set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%,
            改為set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=5500,server=y,suspend=n
            這樣就打開了5500端口,然后你到bin目錄下運行jpda start,你再去監聽5500端口,就可以實現remote debug了。
          

    posted @ 2008-06-18 19:11 田亮 閱讀(935) | 評論 (0)編輯 收藏

    節省使用httpsession(此文引用于Effective Enterprise java:39)

        基于html/http的應用中,為了維護代表客戶端的瞬時狀態,servlet容器提供了一種稱為會話空間的設施,被表示為HttpSession接口。這個思想本身是簡單而直接的,servlet程序員可以將任意的可序列化對象置于會話空間,而下一次,同一個用戶對同一個Web應用的任何部分發出請求時,servlet容器將確保同樣的對象會處在HttpSession對象中。這使得servlet開發者可以為在服務器上的Web應用在多個HTTP請求之間維護每個客戶端的狀態信息;

        遺憾的是,這種機制并非完全免費的。首先,在服務器端為每個客戶端存儲數據將會減少該服務器上的可用資源,這意味著服務器的最大負載能力會成比例下降。這個算式很簡單:在會話空間中保存越多的數據,機器能夠處理的會話就越少。由此推導出,為了令給定的機器能夠支持盡可能多的客戶端,必須將會話的存儲量保持在最小。實際上,對于真正具備可擴展性的系統而言,無論何時都應該避免使用會話。如果在服務器端可以不產生任何為每個客戶端進行處理的開銷,那么機器的負載能力(在理論上)可以到達無限,能夠支持任意多連接到它的客戶端。

    posted @ 2007-12-17 10:04 田亮 閱讀(1354) | 評論 (4)編輯 收藏

    eclipse plugin

    Jodeclipse 是Jode的Eclipse插件,JadClipse是Jad的Eclipse插件,它們都是非常好的反編譯插件。

    Jode Eclipse Plugin 1.0.5 for Eclipse version 3.1 / 3.2

    安裝方法

    (1)從如下地址下載:

    http://sourceforge.net/projects/jodeeclipse

    把下載下來的文件jodeplugin_1.0.5.zip直接解壓到eclipse的plugins目錄下。

    (2)啟動eclipse,help -> Software Updates-> Find and Install... -> Search for new features to install,單擊"New Remote Site..." 在URL欄輸入 http://www.technoetic.com/eclipse/update然后下一步,就可以看到“jode decompiler plugin *.*”,選上安裝就可以了。安裝好后可以看到Window -> Preferences...-> Java -> Jode Decompiler選項卡,okay,安裝成功了。


    配置:Window-> Preferences... -> General -> Editors -> File Associations找到"*.class"在"Associated editors"里面可以看到"Jode class file viewer"選中它再單擊Default按鈕.


    JadClipse Eclipse Plugin for Eclipse version 3.1 / 3.2/3.3

    一、下載:
    下載插件:
    下載jadclipse_3.1.0.jar版本,該版本支持eclipse3.1M6~3.2M2
    下載jadclipse_3.2.0.jar版本,該版本支持eclipse3.2M3和eclipse3.2M4.
    下載jadclipse_3.2.4.jar版本,該版本支持eclipse3.2M5~3.3M5

    下載jadclipse_3.3.0.jar版本,該版本支持eclipse3.3M6以上版本

    下載Jad反編譯工具:
    http://www.kpdus.com/jad.html#download,在該頁中找到適合自己操作系統平臺的jad下載。下載后解壓,然后將解壓后的jad.exe文件復制到%JAVA_HOME%\bin目錄下面(可以將jad.exe放到任意位置,只要記住其存放路徑就好,下面要用到)。

    二、安裝:

    Eclipse中的插件安裝可以參考:Eclipse使用技巧(三)Eclipse中插件的安裝
         方法1、直接將jadclipse_x.x.x.jar(x.x.x.代表版本號)復制到%ECLIPSE_HOME%\plugins目錄下。

    方法2、使用link方式安裝,建立D:\Myplugins\jadclipse3.2.4\eclipse\plugins的目錄結構,將jadclipse_3.2.4.jar放到plugins目錄下面(注:其中D:\Myplugins為你自己定義的一個專門放置插件的目錄)。再在%ECLIPSE_HOME%\links目錄下面建立一個jadclipse3.2.4.link文件(該文件名隨便取)。文件里面內容為:path=D:/Myplugins/jadclipse3.2.4.

    常見問題及解決:

    (一)啟動eclipse,打開Window->Preferences->Java->JadClipse,如果沒有找到JadClipse,即JadClipse插件沒有激活。

    (1)檢查插件安裝的版本是否與你安裝的eclipse版本對應

    (2)使用 –clean參數來啟動eclipse

       (二)在使用JadClipse插件反編譯class文件時出現如下類似錯誤:

    /*jadclipse*/



    /*

                    DECOMPILATION REPORT



                    Decompiled from: D:\Program Files\Java\jdk1.5.0_06\jre\lib\rt.jar

                    Total time: 16 ms

                    Jad reported messages/errors:

                    Exit status: 0

                    Caught exceptions:

    java.io.IOException: CreateProcess: (...)



    請確保你的Jad路徑在eclipse中正確制定。
         啟動eclipse,打開:Window->Preferences->Java->JadClipse.
    1、Path to decompiler,這里設置反編譯工具jad的全路徑名,比如:%JAVA_HOME%\bin\jad.exe.
    2、Directory for temporary files,這里設置臨時文件路徑。

    至于Window->Preferences->Java->JadClipse目錄下的Debug,Directives,Formatting,Misc目錄中的參數設置,就不再羅嗦了。

    (三)安裝完成后,eclipse沒有自動將JadClipse Class File Viewer設置成class文件的缺省打開方式。

    如果沒有默認,可以在Eclipse的Windows—> Perference—>General->Editors->File Associations中修改“*.class”默認關聯的編輯器為“JadClipse Class File Viewer”。設置完成后,雙擊*.class文件,eclipse將自動反編譯。

    posted @ 2007-11-29 14:12 田亮 閱讀(975) | 評論 (0)編輯 收藏

    J2EE總結---JNDI技術 我的所有隨筆屬于個人總結,有不足之處請回復指出

     

    1.       什么是JNDIJava Naming and Directory Interface

    JNDI是用于訪問不同命名和目錄服務的統一API接口;

    2.       JNDI的架構和原理

          1.       架構:

             第一層:java代碼,是訪問JNDI的代碼;

             第二層:JNDI API:統一的命名和目錄服務接口

             第三層:JNDI Naming ManagerJNDI管理器

             第四層:JNDI SPI:用于構建JNDI實現的框架,能夠動態的插入命名和目錄服務提供商的產品;

             第五層:命名和目錄服務提供商的產品;

             命名和目錄服務提供商的產品,例如:DNS,LDAP,NIS,NDS……..;因為這些產品都是不同的提供商提供的產品,所以他們的命名和目錄服務的標準不一致,各個目錄服務采用的訪問協議也是不一樣的,所以,要是直接訪問他們的話,就要編寫不同的java代碼來訪問他們;因此,JNDI SPI就解決了這個問題,它能動態的插入這些命名和目錄服務,能夠將其協議專屬的目錄產品集成到系統中,使得我們能只需要調用一個統一的javaAPI就能夠訪問插入的產品了;

             2.原理:

                   JNDI其實很好理解,他就是一個樹狀的結構,它的最頂是一個initialContext節點,然后它的下面就是綁定的一些對象或是一些subContext,用JNDI樹就能夠查找到樹中每一個綁定上的節點上的對象的引用;

    3.怎樣連接到JNDI上?

                      Environment environment = new Environment() ;//創建一個環境對象

                       environment.setProviderurl(“t3://www.tkk7.com”) ;

                       environment.setSecurityPrincipal(“todd”) ;//認證的用戶名

                       environment.setSecurityCredentials(“841026”) ;//密碼

                       Context context = environment.getInitialContext() ;

             //創建一個subContext并綁定一個對象:

                       Context subContext = context.createSubcontext(“subContext”) ;

                       subContext.rebind(“newObject”,object) ;//綁定的對象必須是可序列化的

                       subContext.close() ;

                       context.close() ;

    4.如何通過JNDI查找bind的對象?

             Object object = context.lookup(“User”) ;

             //user窄化到原型

             User user = (User)javax.rmi.PortableRemoteObject.narrow(object, User.class) ;

             context.close() ;

    posted @ 2007-04-09 08:16 田亮 閱讀(3294) | 評論 (4)編輯 收藏

    J2EE總結--Servlet技術 我的所有隨筆屬于個人總結,有不足之處請回復指出

     

    Servlet技術:

    1.       什么是servlet

    Servlet是一個java類,是一個提供基于協議請求和響應的java類;

    2.       它的生命周期

          1.       啟動服務器時就會實例化并加載servlet實例;

          2.       進行初始化:自動調用initServletConfig servletConfig)方法;

          3.       Servlet就緒:調用serviceHttpServletRequest requestHttpServletResponse response)方法(其   中     service   就是dopost()或doget()方法),這是客戶提交時,自動調用的;

          4.       Servlet銷毀:自動調用調用distory()

       注意:在實例化并加載servlet后,步驟二和四只調用一次,而步驟三,是在每次客戶端發出請求時都調用;

    3.       怎樣部署一個servlet

    Servlet類是必須在web.xml中注冊才能使用的,例如,我有一個MyServlet類:

    必須在web.xml中注冊:

    <web-app>

    //-----------------------Servlet聲明----------------------

               <servlet>

                     <servlet-name>myServlet</servlet-name>

                     <servlet-class>servletPakage.MyServlet</servlet-class>

          </servlet>

    //------------------------Servlet注冊(鏡像)---------------

               <servlet-mapping>

                     <servlet-name>myServlet</servlet-name>

                     <url-pattern>myServletURL</ url-pattern >

          </servlet-mapping>

    </web-app>

    這樣你在提交時的Url地址就是/myServletURL了;

    4.       什么是serviceHttpServletRequest requestHttpServletResponse response)方法?

    其中serviceHttpServletRequest requestHttpServletResponse response)方法包括兩種:

          1.       dogetHttpServletRequest requestHttpServletResponse response)方法:

          這種方法被稱為顯式提交方法,主要原因是它的得到的參數放在url中,可以被看到,所以稱為顯示提      交;

          例如:有個表單:

          <form action=”/myServletURL?name=todd” method=”get”>

          </form>

          這種方法其request獲得的參數就是你看到的name=todd

          例如:String s=request.getParameter(“name”);

                其結果s=”todd”;

          2.       dopostHttpServletRequest requestHttpServletResponse response)方法:

             這種方法被稱為隱式提交方法,它的參數不會在url里得到,而是在請求數據體得到參數;

             例如:有個表單:

                <form action=”/myServletURL” method=”post”>

                         <input type=”text” name=”name” value=”todd”>

             </form>

          這種方法其request獲得的參數就是表單體的name=todd

                例如:String s=request.getParameter(“name”);

                其結果s=”todd”;

    5.       什么是ServletContext?

             ServletContext是一個接口,是WebApplication的視圖,它的作用域時Application,它能訪問Application中的初始化參數和屬性,它不局限域一個Servlet,它屬于整個Application

    ServletContext的初始化參數:

    web.xml中:

    <web-app>

        <context-param>

    <param-name>myBlog</param-name>

    <param-value>www.tkk7.com/todd841026</param-value>

    </context-param>

    </web-app>

     這樣在application中任意一個Servlet中可以得到這個參數,

    例如:ServletContext sc = getServletContext ();

              String s = sc.getInitParameter(“myBlog”);

    那么結果s就是”www.tkk7.com/todd841026”

    6.       什么是ServletConfig

    是單獨的Servlet初始化配置;

    例如:在web.xml

    <web-app>

                <servlet>

                     <servlet-name>myServlet</servlet-name>

                     <servlet-class>servletPakage.MyServlet</servlet-class>

          </servlet>

          <init-param>

                <param-name>cache</param-name>

                <param-value>off</param-value>

    </init-param>

    </web-app>

    在這個Servlet中:ServletConfig sc = getServletConfig();

                                String s = sc.getInitParameter(“cache”);

    那么結果s就是off”;

    7.       Servlet怎樣處理多線程

    在默認的情況下,單個Servlet實例是可以處理多個并發請求的,所以要考慮到多線程的共享同一對象的問題,例如:

    //做個Servlet中產生了多少個object對象一個變量的例子

    Private int count = 0 ;

    Public void dopost(HttpServletRequest request,HttpServletResponse response){

               Object object = new Object() ;

               count++ ;

               System.out.println(“count = ” + count) ;

    }

    當有5個用戶提交數據時,因為Servlet是處理多線程的,所以可能出現,第四個用戶的程序已經執行了count++,而第五個用戶剛執行完Object object = new Object() ,就會出現數據不一致性,因為當前有5object對象,但是count卻是4

    解決方案一:

    Private boolean flag = false

    Private int count = 0 ;

    Public void dopost(HttpServletRequest request,HttpServletResponse response){

               synchronized(flag){

                        Object object = new Object() ;

                        count++ ;

    }                

               System.out.println(“count = ” + count) ;

    }

    用同步程序塊解決多線程的問題,這樣在同一時刻就只能有一個訪問該程序塊了;

    解決方案二:

    Private int count = 0 ;

    Public void dopost(HttpServletRequest request,HttpServletResponse response)

    Implements SingleThreadModel{

               Object object = new Object() ;

               count++ ;

               System.out.println(“count = ” + count) ;

    }

    實現SingleThreadModel接口,可以解決多線程問題;

    8.       什么是servlet過濾器?

    也是一個java類,只是它實現了Filter這個接口;

    9.       servlet過濾器的生命周期;

    初始化:自動調用init(FilterConfig config)方法

    執行:自動調用doFilter()方法;

    銷毀:自動調用destory()方法;

    10.   servlet過濾器有什么用途?

          個人認為目前自己用到的Servlet過濾器的主要用途:是安全性檢查

             當然過濾器在Servlet之前也可以修改請求,要是在Servlet之后,也可以修改響應; 

    11.   servlet過濾器怎樣部署?

    web.xml中:

    <web-app>

        <filter>

          <filter-name>myFilter</filter-name>

          <filter-class>filterPage.MyFilter</filter-class>

    </filter>

    <filter-mapping>

          <filter-name>myFilter</filter-name>

          <url-pattern>/Todd/*</url-pattern>

    </filter-mapping>

    </web-app>

    這樣就是說要訪問WEB-INF下的Todd包下的jspServlet的話,就必須要先通過myFilter這個類;

    posted @ 2007-04-08 13:31 田亮 閱讀(4449) | 評論 (6)編輯 收藏

    僅列出標題
    共2頁: 1 2 下一頁 

    導航

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    MyHome

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: AV在线播放日韩亚洲欧| 亚洲丁香色婷婷综合欲色啪| 亚洲黄色免费网址| 亚洲综合丁香婷婷六月香| 95免费观看体验区视频| 亚洲αv久久久噜噜噜噜噜| 最近免费中文字幕MV在线视频3| 亚洲性日韩精品一区二区三区| 男女啪啪免费体验区| 成年免费大片黄在线观看岛国 | 亚洲第一成年免费网站| 亚洲国产av一区二区三区丶| 一级做a爱过程免费视频高清| AV大片在线无码永久免费| 亚洲乱码精品久久久久..| 亚洲精品无AMM毛片| 国产乱子精品免费视观看片| 亚洲欧洲在线播放| 久久久久久AV无码免费网站| 国产黄色一级毛片亚洲黄片大全| 亚洲免费日韩无码系列| 亚洲色大成网站WWW久久九九| 九九美女网站免费| 中文字幕亚洲不卡在线亚瑟| 野花香高清视频在线观看免费| 日本免费在线观看| 亚洲AV无码日韩AV无码导航| 久视频精品免费观看99| 亚洲午夜精品久久久久久人妖| 国产精品视频免费| 国产亚洲漂亮白嫩美女在线| 亚洲一区二区三区影院| 最近免费中文字幕高清大全 | 亚洲国产成人无码av在线播放| 成人免费看黄20分钟| 亚洲人成影院77777| 国产一区二区三区无码免费| 美女18毛片免费视频| 亚洲人成网77777亚洲色| 99久久久精品免费观看国产| 老司机午夜性生免费福利|