OC4J Web容器

 

OracleApplication Server Containers for J2EE

                                                ——OC4J 詳解

 

 

 

 

 

 

作   者:蘇震雲

創建日期:2010-12-02

更新日期:2015-07-21

文檔版本:1.5v

一、文檔控制

 

文檔描述

    主要了解OC4J概念、作用、安裝、啓動及配置和部署應用程序。

二、OC4J概念和作用

1、OC4J概念

      OC4J全稱爲Oracle Application ServerContainers for J2EE, 是EJB(enterpriseJavaBean)、servlet 及JSP的Web容器。

oracle產品家族系列爲我們的大規模的企業級應用提供了高可靠性, 穩定性.

 

OC4J的優點:

OC4J免費的,能適應大中小級的企業級應用. 而不必購買昂貴的服務器套裝.

 

oc4j存在獨立版本和包含在Oracle Application Server套件中組件的版本。

OC4J獨立版本的下載:

http://www.oracle.com/technetwork/cn/middleware/ias/downloads/utilsoft-100681-zhs.html

穩定版本101350

 

OC4J整個請求響應信息交換流程

2、OC4J作用

      Oracle Application Server的核心,屬於j2ee容器。

    EJB,Servlet及JSP的web容器。可以部署J2EE的應用程序。

       Oracle數據庫的OEM

       BIP報表平臺

EBS

其他應用產品

三、OC4J獨立版安裝、配置及開發

3.1、OC4J安裝

3.1.1、下載安裝包

   要安裝獨立的OC4J服務器,下載相應的OC4J安裝程序:

  http://download.oracle.com/otn/java/oc4j/1012/oc4j_extended.zip

oc4j安裝包:oc4j_extended_101350.zip

支持的jdk 1.5或1.6

 

3.1.2、環境變量設置

 

1、JAVA_HOME

JDK本地路徑,這個變量設置用來啓動OC4J服務

JAVA_HOME=/u02/jdk1.6.0_20

並且把JAVA_HOME 加到PATH

 

2、ORACLE_HOME

OC4J安裝目錄,也是用來啓動OC4J服務

 

ORACLE_HOME=/u02/oracle

 

3、J2EE_HOME

 

ORACLE_HOME/j2ee/home目錄,用於安裝admin_client.jar, oc4j.jar, and admin.jar工具

J2EE_HOME=/u02/oracle/j2ee/home

更好調用admin_client.jar, oc4j.jar, and admin.jar

 

3.1.3、linux-安裝

1、新建用戶applprd用戶組 applprd

 

2、在applprd用戶下,新增目錄

/u01/oracle

 

3、上傳jdk1.6 和oc4j_extended_101350.zip

 

4、解壓:

 

將oc4j解壓到 /u01/oracle目錄

 

5、設置管理員密碼

在第一次啓動OC4J時,必須要設置一個管理員賬戶

默認已經有一個oc4jadmin賬號

需要設置密碼:

在ORACLE_HOME /j2ee/home目錄下

#  jazn.jar -activateadmin password

輸入密碼:

 

6、啓動服務命令

/u01/jdk1.6.0_20/bin/java-Xms1024m -Xmx2048m -XX:MaxPermSize=256m -jar /u01/oracle/j2ee/home/oc4j.jar-config /u01/oracle/j2ee/home/config/server.xml

 

 

 

3.2、OC4J服務

環境變量:ORACLE_HOME=/u02/oracle

3.2.1、使用OC4J腳本啓動停止

在ORACLE_HOME/bin 目錄執行

#oc4j –start

#oc4j-shutdown -port 23791 -password daphne

 

必須先設置ORACLE_HOME 和JAVA_HOME 環境變量 (參考OC4J安裝文檔)

3.2.2、使用OC4J.JAR啓動停止

在ORACLE_HOME/j2ee/home目錄下

啓動

#java -jar oc4j.jar [args]

例如:

#java -Xms1024m -Xmx2048m -XX:MaxPermSize=256m

-jar/u02/oracle/j2ee/home/oc4j.jar -config /u02/oracle/j2ee/home/config/server.xml

 

默認使用ORACLE_HOME/j2ee/home/config/server.xml 你也可以使用自己指定server.xml文件

#java -jar oc4j.jar -config /yourpath/server.xml [args]

 

 

停止

在ORACLE_HOME/j2ee/home目錄下

 

#java-jar admin_client.jar deployer:oc4j:localhost oc4jadmin password -shutdown

 

#java-jar admin.jar ormi://oc4jHost:oc4jOrmiPort adminId adminPassword -shutdown[ordinary|force] [reason]

 

參數說明:關閉默認參數爲ordinary, 表示每一個線程都正常關閉

Force表示所有線程立即關閉

 

reason會記錄到ORACLE_HOME/j2ee/home/config/server.log文件中

 

#java -jar admin.jar ormi://localhost:23791 oc4jadmin password -shutdown force

  need_to_reboot_host_machine

 

重啓

在ORACLE_HOME/j2ee/home目錄下

 

#java -jar admin_client.jar deployer:oc4j:localhost oc4jadmin password -restart

 

#java -jar admin.jar ormi://oc4jHost:oc4jOrmiPort adminId adminPassword -restart[reason]

 

 

3.2.3、使用OPMN啓動停止

StartingOC4J in an Oracle Application Server Environment

 

在ORACLE_HOME/opmn/bin目錄下

啓動

#opmnctl startall

#opmnctl startproc ias-component=default_group

 

停止

#opmnctl stopall

#opmnctlstopproc ias-component=default_group

 

 

3.2.4、達芙妮OC4J項目

下面以POS實時在線項目爲例說明:

開發環境oc4j_dev(92.168.184.47)root用戶

直接啓動

#/u02/jdk1.6.0_20/bin/java -Xms1024m –Xmx2048m-XX:MaxPermSize=256m -jar /u02/oracle/j2ee/home/oc4j.jar -config/u02/oracle/j2ee/home/config/server.xml

 

或後臺啓動:

#nohup /u02/jdk1.6.0_20/bin/java -Xms1024m –Xmx2048m-XX:MaxPermSize=256m -jar /u02/oracle/j2ee/home/oc4j.jar -config/u02/oracle/j2ee/home/config/server.xml &

或帶性能監控啓動

nohup/u02/jdk1.6.0_20/bin/java -Xms1024m –Xmx2048m-XX:MaxPermSize=256m -Djava.rmi.server.hostname=192.168.184.47-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8080-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false -jar /u02/oracle/j2ee/home/oc4j.jar-config /u02/oracle/j2ee/home/config/server.xml &

 

正式環境oc4j_prd(192.168.188.58) applprd 用戶

nohup/u02/jdk1.6.0_20/bin/java -Xms1024m –Xmx2048m-XX:MaxPermSize=256m -Djava.rmi.server.hostname=192.168.188.58 -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=8080-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false -jar /u02/oracle/j2ee/home/oc4j.jar-config /u02/oracle/j2ee/home/config/server.xml &

 

查看日誌:

#Tail –f nohup.out

 

 

     提示

      10/12/02 12:02:49 Auto-deployingfile:/E:/OC4J/j2ee/home/default-web-app/ (New s

      erver version detected)...

      10/12/02 12:02:49 Auto-deployingfile:/E:/OC4J/j2ee/home/applications/dms0/ (New

       server version detected)...

      10/12/02 12:02:50 Oracle ApplicationServer Containers for J2EE 10g(10.1.2.0.2)

       initialized  

    

   啓動成功,若想返回命令界面 按Ctrl+C

 

驗證是否啓動成功

 

開啓OC4J控制檯:http://localhost:8888 

   

 

停止服務:

/u02/jdk1.6.0_20/bin/java-jar /u02/oracle/j2ee/home/admin.jar ormi://localhost:23791 oc4jadmin daphne-shutdown force need_to_stop_oc4j

 

重啓服務

/u02/jdk1.6.0_20/bin/java-jar /u02/oracle/j2ee/home/admin.jar ormi://localhost:23791 oc4jadmin daphne-shutdown force need_to_stop_oc4j

3.3、OC4J目錄結構

3.1.4、OC4J目錄結構及配置文件設置

j2ee      目錄下默認爲一個home的OC4J實例,可創建多個

Config      配置文件server.xml

Applications 部署的應用程序

Default-web-app 默認的web應用程序訪問

Demo     系統提供Demo程序

Oc4j.jar 應用oc4j安裝、啓動、停止及等操作

Lib     類包

Log     存放日誌文件

  

E:\OC4J\j2ee\home\config目錄下

  

   http-web-site.xml

     提供:監聽端口設置及應用程序設置,默認爲8888

   principals.xml

     安全機制、用戶名和密碼設置

   server.xml

     設置各種配置文件的使用

   application.xml 

     提供各種類包的使用

   rmi.xml

     遠程服務端口設置,默認爲23971 , 若同一個服務器,安裝兩個OC4J,則另外一個要修改爲23972

 

3.4、OC4J配置文件

OC4J配置文件如下:

 

 

所有配置文件放在:/u02/oracle/j2ee/home/config 下

根據啓動命令, 可知啓動oc4j入口爲server.xml 文件。

/u02/jdk1.6.0_20/bin/java-Xms1024m -Xmx4096m -XX:MaxPermSize=256m

-jar/u02/oracle/j2ee/home/oc4j.jar

-config/u02/oracle/j2ee/home/config/server.xml

 

 

打開配置文件如下:

通過server.xml加載所有其他的配置文件。下面通過不同文件設置來實現不同的功能。

3.4.1、配置啓動端口

打開rmi.xml 文件

 

修改23791端口,就可以實現一臺PC上運行多個oc4j。

 

3.4.2、配置監聽端口

打開defaut-web-site.xml 文件

 

 

如果8888端口已經被佔用,則修改默認端口8888爲8844端口。

 

 

3.4.3、配置應用程序

配置 server.xml , applicaton.xml 及default-web-site.xml文件

可以詳細看6.1.1或6.1.3

五、OC4J控制檯配置

進入:OC4J控制檯

http://192.168.58.*:7777

輸入oc4j管理員的用戶名和密碼:oc4jadmin / *****

 

3.4.1、數據源配置

提示:如果應用程序使用OC4J的內部數據源和連接池,那就可以在控制檯配置。

 

OC4J每個應用app,的數據庫鏈接都是可以修改的。

 

Oc4j:home實例目錄下

 

進入管理

 

下面有一個JDBC的配置

 

點擊“編輯”

 

 

 

 

 

根據應用程序找到,需要配置的數據庫連接池

 

修改配置後,點擊應用。

 

最後重新啓動對用的應用程序。

 

 

3.4.2、連接池配置

提示:如果應用程序使用OC4J的內部數據源和連接池,那就可以在控制檯配置。

 

 

進入控制檯後,選擇‘管理’標籤進入管理任務界面,在界面中找到‘JDBC 資源’一欄,點擊後面的連接進入配置界面。

 

JDBC 資源配置界面分爲兩部分,數據源配置和連接池配置

 

首先配置連接池信息:根據‘JDBC URL’或‘從連接信息生成 URL’創建連接都可以,配置‘身份證明’信息,配置完成後可點擊‘測試連接’按鈕進行連接池測試。根據需要可對連接池屬性進行配置(如連接數、高速緩存、重試間隔等)

其次配置數據源信息:採用‘受管數據源’模式進行配置,選擇上一步配置的連接池信息,設置‘JNDI 位置’(此命名在java中的lookup使用),例如我們設置‘JNDI 位置’的值爲jdbc/MyPool,配置完成後也可進行連接測試。

 

2.通過修改配置文件進行配置

修改{ORACLE_HOME}\j2ee\home\config\目錄下的data-sources.xml文件,相對來說比較麻煩,技術高操者可嘗試。

 

查找到對應應用程序連接詞,點擊進入屬性配置

 

 

可修改強制超時限制時間間隔

3.4.3、線程池配置

 

參考官網文檔:

http://docs.oracle.com/cd/B31017_01/web.1013/b28950/threadpool.htm#BHBBDFEC

1、瞭解線程池

點擊管理

點擊線程池配置

 

 

線程池名稱

默認線程池:http、jca、system

線程池必須是下面一個

System:爲OC4J運行時使用的線程池

Jca:工作管理線程池,爲j2ca工作管理服務資源適配器要求

http:處理HTTP請求,AJP請求,RMI 請求(如果沒有配置rmi request線程池),RMI 連接(如果沒有配置rmi connection線程池)

 

rmi request:爲遠程方法調用RMI請求線程池

rmi connection:爲遠程方法連接RMI連接請求線程池

 

線程名字:爲線程池名稱+計數

例如:SystemThreadGroup_+1 , HTTPThreadGroup_+1

 

監控POS實時在線的截圖:

 

最小線程數

OC4J服務器啓動這個線程池可創建的最少線程數,默認爲值0;線程數設置越大,初始系統開銷越大。

Jca線程池默認爲1表示,啓動時就要使用線程。

 

最大線程數

OC4J服務器啓動這個線程池可創建的最多線程數,默認值爲1024;如果線程池中的線程數沒有達到最大值且沒有空閒線程可以使用,則自動創建線程;如果有空閒線程,優先使用線程。

 

 

保持活動

OC4J服務器啓動這個線程池中線程在不管在活動還是空閒狀態,等候新的請求的時間,如果超過時間,則自動銷燬。默認值爲(600秒)10分鐘

若值爲-1 表示永遠都不會銷燬線程,佔用內存大。

若值爲0 表示線程處理完就自動銷燬,佔用CPU高。

 

根據每秒請求數及每個請求處理時間。及CPU和內存情況,重新設置活動保持時間。

 

隊列

OC4J服務器這個線程池中可以保存在隊列中最大請求數,默認值爲0;表示可以存放OC4J使用整數(Integer)最大值

 

隊列中請求數至少是最大線程數的兩倍。

 

堆大小

線程池的堆大小,默認爲0;目前在OC4J的控制檯是不可以設置的。

 

 

 

2、線程池分析

根據POS系統實時在線項目來分析。

項目實現功能:從總部實時在線下載調撥單,鋪貨單,及上傳門店銷售數據到總部。

後臺環境:一臺AP(4 cpu, 8G 內存) 單獨數據庫(數據庫性能不在這裏分析)

前臺門店請求規模:190家門店每隔3秒訪問後臺服務。

 

後臺監控數據:

每秒請求數:64.53個

請求處理時間:0.15秒

活動請求數:156

活動會話數:39,164個

(上面的數據可以用OC4J控制檯,性能頁籤中看到)

 

服務器資源使用情況

 

分析後臺配置可知

 

每秒有大約64.53個請求,而活動持續時間10分鐘(600秒),那麼當前存在(包含正在處理的活動和結束的活動)線程數65*600=39000個,約等於前面我們統計活動會話數。

這樣導致內存佔用高,而CPU佔用低,查看服務器資源截圖可知。

 

將活動時間設置到5秒後

 

後臺資源情況如下:


CPU佔用明顯變多。

 

內存還在持續觀察中。

在實際使用中,應用程序停止了。

 

修改配置,在持續觀察

整個請求處理速度比原來要快,內存還是慢慢增加,但是運行多天後,應用程序並沒有停止,這個比原來要好很多。

 

改到200後可以,運行一週


修改1000 個線程後,再觀察

同時,會話超時設置爲0秒

 

重新調整最小線程到200。在繼續觀察中

 

通過server.xml 配置

添加線程配置

更改爲如下:


 

<thread-pool name="system" min="0"max="1024" queue="0" keepAlive="600000"stackSize="0"/>

<thread-pool name="http" min="100"max="2048" queue="0" keepAlive="1200000"stackSize="0"/>

<thread-pool name="jca" min="2"max="1025" queue="0" keepAlive="600000" />

 

若修改了server.xml配置文件後,必須重新啓動OC4J進程。

3.4.4、會話配置

 

點擊 模塊名稱-DwebHub


 

點擊配置屬性

默認會話超時1200秒,“經驗證這個沒有起到效果“

四、OPMN使用

4.1、OPMN概念

     OPMN全稱Oracle Process Manage AndNotifization Server

OPMN是Oracle Application Server 進程管理器及操作進程的命令的實用工具。

4.2、OPMN操作

      目前是在root用戶下啓用,部署在oc4j_apps的OC4J實例的目錄下

 

   路徑:u01/oracle/product/10.1.3.1/OracleAS_1/opmn/bin/  

   啓動:        ./opmnctl startall     -- 啓動 opmn allprocess instance for oracle application server

                ./opmnctl start       --啓動 opmn process manage

   查看狀態:    ./opmnctl status    

   重載配置文件:./opmnctl reload    

   關閉:         ./opmnctl stopall

   單個實例啓動: ./opmnctlstartproc   'process-type=HTTP-Server'

                 ./opmnctl startproc   'process-type=oc4j_apps'    -- oc4j_apps  爲OC4J 實例名

   重啓          ./opmnctl restartproc   'process-type=HTTP-Server'    

  

 

六、應用程序管理

6.1、部署應用程序

 

6.1.1、後臺拷貝War部署程序

1、打包

POS實時項目爲webdpos.war 包

2、上傳文件

將webdpos上傳到將oracle/j2ee/home/applications目錄下

 

 

3、配置application.xml

在home/config 目錄,打開application.xml

添加web-module節點


  <web-module id="webdpos"path="../../home/applications/webdpos.war" />

  <web-module id="controller"path="../../home/applications/controller.war" />

default-web-site.xml文件下增加下列代碼:

<web-appapplication="default" name=" WebReport_web" root="/WebReport" load-on-startup="true" />

 

4、配置defualt-web-site.xml

新增web-app 節點

 

      <web-appapplication="webdpos" name="DWebHub"load-on-startup="true" root="/webdpos" />

      <web-appapplication="controller" name="DWebHub"load-on-startup="true" root="/controller" />

 

配置data-sources.xml

打開data-sources.xml文件

新增connection-pool 節點

 

 

 

 

重啓OC4J服務。

 

 

 

 

 

 

6.1.2、控制檯部署代碼

在OC4J home下

點擊“部署”

前提必須將文件DBMDL.war文件拷貝到服務器/u04目錄下。

修改擁有者和權限。

 

點擊下一步

 

點擊下一步

 

查看j2ee/home/目錄下文件有什麼變動

出現如上畫面,說明部署成功。

 

 

後臺文件和目錄變動如下:

1、applications 目錄下,新增webdpos和webdpos.ear 文件

2、server.xml 文件新增webdpos的web-app節點

3、default-web-site.xml 文件新增 webdpos的application節點

 

可以參考:6.1.3、配置文件的描述。

 

6.1.3、從其他OC4J遷移到另外OC4J

以POS在線實時爲例說明 webdpos來說

拷貝代碼文件

從u01拷貝到u02目錄

進入源目錄:

#cd/u01/oracle/j2ee/home/applications

 

將 webdpos目錄和webdpos.ear文件拷貝到目標目錄

 

# cp -R webdpos/u02/oracle/j2ee/home/applcations

 

 

配置server.xml文件

新增如下節點:

  

 <applicationname="webdpos" path="../applications/webdpos.ear"parent="default" start="true" />

<application name="controller"path="../applications/controller.ear" parent="default"start="true" />     

 

配置default-web-site.xml

新增如下節點:

 

   <web-app application="webdpos"name="DWebHub" load-on-startup="true"root="/webdpos" />

   <web-appapplication="controller" name="DWebHub"load-on-startup="true" root="/controller" />

 

 

 

重啓服務即可完成

 

 

6.2、卸載應用程序

6.2.1、控制檯卸載代碼

登錄控制檯:http://192.168.188.58:8888

 

勾選 controller

點擊停止服務

點擊取消部署

 

 

6.2.1、後臺手工卸載代碼

1、配置server.xml 

刪除webdpos 的application節點

2、配置default-web-site.xml

刪除webdpos的web-app節點

 

 

3、配置application.xml

刪除webdpos的web-module 節點

 

4、刪除源代碼文件

刪除applications目錄下,webdpos文件和webdpos.ear及webdpos.war

 

九、變更記錄&常見問題&參考資料

9.1、變更記錄

 

9.2、常見問題

Oc4j服務啓動不起來,

 

 

應該是磁盤空間不足

 

 

果然是磁盤空間不足問題,刪除文件重新啓動

還是報錯,

 

INFO: Legacy datasource detected...attempting to convert to new syntax.

2015-07-09 18:36:31.895 NOTIFICATION JMSServer[]: OC4J JMS serverrecovering transactions (commit 0) (rollback 0) (prepared 0).

2015-07-09 18:36:31.907 NOTIFICATION JMSServer[]: OC4J JMS serverrecovering local transactions Queue[jms/Oc4jJmsExceptionQueue].

2015-07-09 18:36:31.918 NOTIFICATION JMSServer[]: OC4J JMS serverrecovering local transactions Queue[OracleASRouter_store].

2015-07-09 18:36:31.924 ERROR Failed to set the internal configuration ofthe OC4J JMS Server with:XMLJMSServerConfig[file:/u01/oracle/j2ee/home/config/jms.xml]

15/07/09 18:36:31 *** (SEVERE) Failed to set the internal configuration ofthe OC4J JMS Server with:XMLJMSServerConfig[file:/u01/oracle/j2ee/home/config/jms.xml]

2015-07-09 18:36:31.926 ERROR J2EE OJR-00011 Exception starting JMSserver: Failed to set the internal configuration of the OC4J JMS Server with:XMLJMSServerConfig[file:/u01/oracle/j2ee/home/config/jms.xml]

15/07/09 18:36:33 WARNING:ApplicationStateRunning.loadConnectors Exception loading connector OracleASjms: Error parsing oc4j-ra.xml at/u01/oracle/j2ee/home/application-deployments/default/OracleASjms: Fatalerror at line 1 offset 1 infile:/u01/oracle/j2ee/home/connectors/OracleASjms/OracleASjms/: .<Line 1,Column 1>: XML-20108: (Fatal Error) Start of root element expected.

 

2015-07-09 18:36:33.388 WARNING J2EE JNDI-00002 Resource referencejms/routerCF not found.  AllowingJ2EEContext creation to continue anyway.

2015-07-09 18:36:33.389 ERROR J2EE EJB-03027 [default] An error occureddeploying EJB module: java.lang.NullPointerException

15/07/09 18:36:33 WARNING: Application.setConfig Application: default isin failed state as initialization failed.

java.lang.InstantiationException: Error initializing ejb-modules: null

15/07/09 18:36:33 Error initializing server: Application: default is infailed state as initialization failed

15/07/09 18:36:34 Fatal error: server exiting

 

根據紅色的提示:

檢查這個節點後發現:oc4j-ra.xml 文件爲空了。對比其他環境發現是有xml的數據。

 

因此解決方法:從其他環境吧這個文件覆蓋,重新啓動 OK

 

回到問題:由於我kill 進程oc4j,導致這個文件被寫空了,平常到超做也是這樣的。爲什麼會出現這個問題(一個特別地方是,我電腦使用jconsole進程遠程監控,應該先關閉)

這個還需要後續的觀察。

9.3、參考資料

 

在我們安裝OC4J後,

例如:

使用如下URL

http://192.168.188.58:8888/em/console/help/zh_CN/

 

或登錄OC4J控制檯後

 

點擊“幫助”

 

就可以查看官方幫助文檔。

 

 

 

官方資料:

http://docs.oracle.com/cd/B31017_01/web.1013/b28950/toc.htm

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章