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目录结构及配置文件设置

OC4J Web容器_第1张图片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配置文件如下:

 

 OC4J Web容器_第2张图片

所有配置文件放在:/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

 

 

打开配置文件如下:

OC4J Web容器_第3张图片

通过server.xml加载所有其他的配置文件。下面通过不同文件设置来实现不同的功能。

3.4.1、配置启动端口

打开rmi.xml 文件

 OC4J Web容器_第4张图片

修改23791端口,就可以实现一台PC上运行多个oc4j。

 

3.4.2、配置监听端口

打开defaut-web-site.xml 文件

 OC4J Web容器_第5张图片

 

如果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实例目录下

 

进入管理

 OC4J Web容器_第6张图片

下面有一个JDBC的配置

 

点击“编辑”

 

 OC4J Web容器_第7张图片

 

 

 

根据应用程序找到,需要配置的数据库连接池

OC4J Web容器_第8张图片

 

修改配置后,点击应用。

 

最后重新启动对用的应用程序。

 

 

3.4.2、连接池配置

提示:如果应用程序使用OC4J的内部数据源和连接池,那就可以在控制台配置。

 

 

进入控制台后,选择‘管理’标签进入管理任务界面,在界面中找到‘JDBC 资源’一栏,点击后面的连接进入配置界面。

 

JDBC 资源配置界面分为两部分,数据源配置和连接池配置

 

首先配置连接池信息:根据‘JDBC URL’或‘从连接信息生成 URL’创建连接都可以,配置‘身份证明’信息,配置完成后可点击‘测试连接’按钮进行连接池测试。根据需要可对连接池属性进行配置(如连接数、高速缓存、重试间隔等)

其次配置数据源信息:采用‘受管数据源’模式进行配置,选择上一步配置的连接池信息,设置‘JNDI 位置’(此命名在java中的lookup使用),例如我们设置‘JNDI 位置’的值为jdbc/MyPool,配置完成后也可进行连接测试。

 

2.通过修改配置文件进行配置

修改{ORACLE_HOME}\j2ee\home\config\目录下的data-sources.xml文件,相对来说比较麻烦,技术高操者可尝试。

 

查找到对应应用程序连接词,点击进入属性配置

 OC4J Web容器_第9张图片

 

可修改强制超时限制时间间隔

3.4.3、线程池配置

 

参考官网文档:

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

1、了解线程池

点击管理

OC4J Web容器_第10张图片

点击线程池配置

 OC4J Web容器_第11张图片

 

线程池名称

默认线程池: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控制台,性能页签中看到)

 

服务器资源使用情况

 OC4J Web容器_第12张图片

分析后台配置可知

 

每秒有大约64.53个请求,而活动持续时间10分钟(600秒),那么当前存在(包含正在处理的活动和结束的活动)线程数65*600=39000个,约等于前面我们统计活动会话数。

这样导致内存占用高,而CPU占用低,查看服务器资源截图可知。

 

将活动时间设置到5秒后

 

后台资源情况如下:

OC4J Web容器_第13张图片

CPU占用明显变多。

 

内存还在持续观察中。

在实际使用中,应用程序停止了。

 

修改配置,在持续观察

整个请求处理速度比原来要快,内存还是慢慢增加,但是运行多天后,应用程序并没有停止,这个比原来要好很多。

 

改到200后可以,运行一周


修改1000 个线程后,再观察

同时,会话超时设置为0秒

 

重新调整最小线程到200。在继续观察中

 OC4J Web容器_第14张图片

通过server.xml 配置

添加线程配置

更改为如下:

OC4J Web容器_第15张图片

 

 

若修改了server.xml配置文件后,必须重新启动OC4J进程。

3.4.4、会话配置

 OC4J Web容器_第16张图片

点击 模块名称-DwebHub

OC4J Web容器_第17张图片

 

点击配置属性

OC4J Web容器_第18张图片

默认会话超时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节点

OC4J Web容器_第19张图片

 

 

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

 

4、配置defualt-web-site.xml

新增web-app 节点

 OC4J Web容器_第20张图片

     

     

 

配置data-sources.xml

打开data-sources.xml文件

新增connection-pool 节点

 OC4J Web容器_第21张图片

 

 

 

重启OC4J服务。

 

 

 

 

 

 

6.1.2、控制台部署代码

在OC4J home下

点击“部署”

OC4J Web容器_第22张图片

前提必须将文件DBMDL.war文件拷贝到服务器/u04目录下。

修改拥有者和权限。

 

点击下一步

 

OC4J Web容器_第23张图片

点击下一步

 

查看j2ee/home/目录下文件有什么变动

OC4J Web容器_第24张图片

出现如上画面,说明部署成功。

 

 

后台文件和目录变动如下:

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文件

新增如下节点:

OC4J Web容器_第25张图片  

 

     

 

配置default-web-site.xml

新增如下节点:

 

  

  

 

 

 

重启服务即可完成

 

 

6.2、卸载应用程序

6.2.1、控制台卸载代码

登录控制台:http://192.168.188.58:8888

OC4J Web容器_第26张图片

 

勾选 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服务启动不起来,

 OC4J Web容器_第27张图片

 

应该是磁盘空间不足

 OC4J Web容器_第28张图片

 

果然是磁盘空间不足问题,删除文件重新启动

还是报错,

 

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/: .: 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控制台后

 OC4J Web容器_第29张图片

点击“帮助”

 

就可以查看官方帮助文档。

 

 

 

官方资料:

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

 

你可能感兴趣的:(Web容器)