oaf java_OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)...
一、摘要
在是使用Form/Report/SQL等并发程式时,集中在数据的操作和处理上,但是在事物处理与系统交互有很大的局限性,没有Java程序方便,
因此需要EBS系统中注册并运行Java并发程序,通过Java的强大功能实现EBS的功能扩展
在Oracle EBS中的Java并发程序(Java Concurrent Program)是系统功能中的一个亮点,它的出现使得用户可以在ERP系统中运行自己定义的Java程序。
使用Java并发程序的好处:
当遇到如下2种情况的时候,用PLSQL程序包来完成将无比麻烦:
(1). 将服务器上的文件通过FTP安全有效的导入到apps环境下
(2). 使用JDBC连接一个非Oracle的数据库,并获取里面的数据,通过验证和转换导入到apps下的客制化表。对于上述假定,需要DBA建立透明网关,对于如此简单的需求将会做复杂的设置。
2. 程序接口
(1). 所有的java并发可执行都必须实现这个接口(从这个接口继承),
它定义了一个抽象方法public abstract void runProgram(CpContext cpcontext),其子类必须实现该方法。
public class BatchsCP implementsJavaConcurrentProgram{
public static final String RCS_ID = "$Header: BatchsCP.java 115.0 2008/09/07 14:36:23 pkm ship$";
public voidrunProgram(CpContext cpcontext){
//……coding here}
}
(2). 两个重要的包
oracle.apps.fnd.cp.request.*
oracle.apps.fnd.utl.*
二、CpContext类
1. LogFile LOG_FILE = CpContext.getLogFile():取得并发请求的日志类
LOG_FILE.writeln(String msg, 1):往日志里面写内容
反编译LogFile类,可以看到它的构造函数:
publicLogFile(CpContext cpcontext){
mCtx=cpcontext;
mFilePath= System.getProperty("request.logfile");
}
2. ParameterList parameterlist = CpContext.getParameterList():取得并发请求的参数
while(parameterlist.hasMoreElements()){
NameValueType namevaluetype=parameterlist.nextParameter();
m_hashParametersList.put(new String(namevaluetype.getName()), newString(namevaluetype.getValue()));
}
通过这个while循环就可以取出所有的并发请求参数,并将他们存到Hashtable m_hashParametersList中,后面随时要用到并发请求参数的时候就可以通过m_hashParametersList.get(String)方法取出参数值来
3. ReqDetails mReqDetails = CpContext.getReqDetails():取得并发请求细节信息
(1). mReqDetails.getRequestId():获取RequestId信息
(2). mReqDetails.ReqGeneralInfo():取得并发请求的信息类mReqGeneralInfo,这个类提供更相信的有关并发请求的信息,如下所示:
(3). mReqDetails.getSessInfo():取得session相关信息ReqSessInfo类
EnableTrace,NlsLanguage,NlsTerritory,NlsCodeSet,NlsNumChar的setter和getter方法。
(4). mReqDetails.getUserInfo():取得用户相关信息ReqUserInfo类
UserId,RespId,RespAppId,LoginId,SecGrpId,UserName,RespName的setter和getter方法。
(5). mReqDetails.getParaInfo():取得参数相关信息ReqParameterInfo类
定义了对参数的操作:添,删等。
实际上这些细节是通过一条SQL从Oracle表中取出,看其getDetails(Connection connection)方法就可以知道了。
4. OutFile OUT_FILE = CpContext. getOutFile():取得并发请求的日志类
OUT_FILE.writeln(String):往标准请求输出里面写内容
5. Locale mLocale = CpContext.getLocale():取得地点区域信息(见java.util.Locale)
6. ReqCompletion mReqCompletion = CpContext.getReqCompletion():取得请求结束信息ReqCompletion类
另外还有setReqDetails(ReqDetails reqdetails, int i)方法。
(1). ReqCompletion.setCompletion(int i, String s):s参数可以写入一些信息,设置请求结束状态
(a) 0: NORMAL
(b) 1: WARNING
(c) 2: ERROR
(d) 3: PAUSED
(2).ReqCompletion.setPaused(String s):暂停请求
7. Connection mJConn = CpContext.getJDBCConnection:取得Oracle JDBC驱动连接
8. CpContext.commit(Connection connection):commit连接
9. CpContext.rollback(Connection connection):rollback连接
另外还有CpContext.setRollbackSegment(Connection connection)设置回滚段
10. AppsEnvironmentStore = CpContext.createEnvironmentStore():创建EBS环境AppsEnvironmentStore类,它定义了Oracle获取dbc文件,建立连接环境的的操作
11. CpContext.setParameterList(String s):设置并发请求参数。格式(参数间用’冒号’分隔)如下:
params="P_IP_ADDS="+host+":P_PORT="+sport+":P_USER_NAME="+user+":P_PASSWORD="+pass+":P_START_PATH="+filename+":P_END_PATH="+path+":P_DIRECTION="+"upload";
cpcontext.setParameterList(params);
TransferCP transfer=newTransferCP();
transfer.runProgram(cpcontext);
12. CpContext.initContext():初始化上下文,里面定义了一些初始化变量的方法和setter方法
13. CpContext.initGlobal():初始化全局环境,可以查看到里面的代码如下:
begin fnd_global.initialize(?,?,?,?,?,?,?,?,?,?,?,?); end;--这个跟我们在PL/SQL里面初始化apps环境的代码一样效果
beginFND_GLOBAL.APPS_INITIALIZE (USER_ID =>1110, RESP_ID=>50239, RESP_APPL_ID=>200);end;
14. CpContext.initConcurrent():初始化并发,查看代码下:
begin fnd_concurrent.init_request; end;--只是调用了PL/SQL标准包,具体的细节可以去看package fnd
15.CpContext.initParameterList():初始化并发请求参数列表,查看代码如下:
selectcolumn_seq_num num,
srw_paramfromfnd_descr_flex_column_usageswhere application_id = ? --mReqDetails.getGeneralInfo().getProgAppId();
and descriptive_flexfield_name = ? --"$SRS$." + mReqDetails.getGeneralInfo().getProgName();
and descriptive_flex_context_code = ? --"Global Data Elements"
and enabled_flag = ? --"Y"
order by 1
--可以看到可以从表fnd_descr_flex_column_usages里面获取并发请求参数。
16. CpContext.loadProfiles():
将SECURITY_GROUP_ID、
USER_ID、
USERNAME、
CONC_LOGIN_ID、
RESP_ID、
RESP_APPL_ID、
CONC_REQUEST_ID、
CONC_PROGRAM_APPLICATION_ID、
PROG_APPL_ID、
CONC_PROGRAM_ID、
PROGRAM_ID、
CONC_PROGRAM_NAME、
APPL_SHRT_NAME、
CONC_PRIORITY_REQUEST、
CONC_PARENT_REQUEST、
AFLOG_ENABLED、
AFLOG_LEVEL信息加载到并发请求的Profiles中(这些参数都可以通过mReqDetails来获取)。
另外还有对应的CpContext.setReqProfile(String s, String s1)方法
17. CpContext.setSession():设置会话相关参数(语言和地区),查看代码如下:
首先获取环境EnvironmentStore environmentstore = getEnvStore();
然后mReqDetails.getSessInfo()的getNlsLanguage()、getNlsTerritory()比较,如果取出的值是一致的,则执行如下执行如下PL/SQL:
BeginFND_GLOBAL.set_nls_context(p_nls_language=>?, --environmentstore.setEnv("NLS_LANGUAGE", s);
p_nls_territory=>?); --environmentstore.setEnv("NLS_TERRITORY", s1);
end;
18. CpContext.setUserContext():设置了用户环境(将用户信息添加到SessionManager)
CpContext.setNLSLocale():获取本地信息存放到CpContext.mLocale中
CpContext.setTrace():首先判断System.getProperty("request.enabletrace");是否为’Y’;如果是,则运行
BEGIN DBMS_SESSION.SET_SQL_TRACE(TRUE); END;
来设置Trace为启用
19. CpContext.requestEnd():执行如下PL/SQL来结束请求
BEGIN FND_CONC_STAT.COLLECT; END;
20. CpContext.modifyOutFileInDb(String s):更新FND_CONCURRENT_REQUESTS表的OUT_FILE
UPDATE FND_CONCURRENT_REQUESTS SET OUTFILE_NAME= ? WHERE REQUEST_ID= ?
21. CpContext.loadEnvironment(Connection connection):加载环境上下文,调用如下PL/SQL
selectvariable_name,
valuefromfnd_concurrent_requests cr ,
fnd_env_context ecwhere cr.controlling_manager =ec.concurrent_process_idand cr.request_id = ?
Thanks and Regards
参考:http://blog.csdn.net/cunxiyuan108/article/details/7677773
参考:http://blog.csdn.net/cunxiyuan108/article/details/7677758
参考:http://www.cnblogs.com/echochen/archive/2011/11/17/2253148.html
oaf java_OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)...相关推荐
- oracle 图片 显示不出,Sql Server 中image类型迁移到Oracle 中Blob类型出现图片显示不出来,why????请博客们帮忙 | 学步园...
我现在在一项目中碰到这么一个问题 Sql Server 中image类型迁移到Oracle Blob类型出现图片显示不出来,我在Sql Server 中看了一条image数据 如下: 1.Sql Se ...
- OAF_开发系列03_实现OAF如何在保存前判断数据是否存在变更(案例)
2014-06-26 Created By BaoXinjian 一.摘要 在OAF的开发中,可能有这样的需求,在选择保存按钮时,如果存在改动的数据,则提交事务,保存到数据库中: 如果不存在改动的数据 ...
- 【JNI】JNI中java类型的简写
在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示 ...
- JNI中java类型的简写
在JNI中,当我们使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定义JNINativeMethod等时,我们需要表示成员变 ...
- OAF_开发系列11_实现OAF通过DataBoundValues动态显示表列的左右对齐
20150712 Created By BaoXinjian 一.摘要 在OAF中除了Required, Rendered,Disabled, 和 Read Only这些属性可以通过属性面板用SPEL ...
- OAF_开发系列19_实现OAF对话框提示dialogPage(案例)
20150716 Created By BaoXinjian 一.摘要 Oracle dialogPage是OAF提示框的一种用法,具体应用例如在删除数据时,提示用户进行确认是否可以删除 二.实现方法 ...
- OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)
20150506 Created By BaoXinjian 一.摘要 Vector.ArrayList和Hashtable Jashmap的异同 线性表,链表,哈希表是常用的数据结构,在进行Java ...
- OAF_开发系列21_实现OAF事物控制TransactionUnitHelper(案例)
20150716 Created By BaoXinjian 一.摘要 TransactionUnitHelper用以创建一个被标记的Transaction,个人感觉类似PLSQL SavePoint ...
- OAF_开发系列18_实现OAF页面跳转setForwardURL / forwardImmediately(案例)
20150716 Created By BaoXinjian 一.摘要 setForwardURL()与forwardImmediately() 1. forwardImmediately会停止当前页 ...
最新文章
- 阿里云:国际化是云计算技术能力的照妖镜
- svn命令行 批量添加(add)所有新增文件
- Delphi中取得和设置硬盘上文件的创建日期、修改日期、访问日期、文件属性
- Remoting技术简介
- RCE、exp、Exploit、Exploit Pack、exp-gui、Payload、MetaSploit都是啥
- picker封装 uniapp_uniapp自定义picker城市多级联动组件
- 1+2+3+n;1*1*2*n
- 【原】webpack--plugins,主要解释plugins干了啥
- 推荐系统遇上深度学习(七)--NFM模型理论和实践
- 【Python3网络爬虫开发实战】 3.1.3-解析链接
- phalapi可以依赖注入么_phalapi-进阶篇8(PhalApi能带来什么和进阶篇总结)
- PostgresSQL支持geometry类型
- 同事1000行又臭又长 的类!被我用IDEA几分钟重构!真香!
- ARM指令集之跳转指令
- CentOS-7镜像文件下载
- 重载(Overload)和重写(Override)的区别?
- 转:以Delphi Package架构多人开发应用程序环境
- 【软件工程/系统软件/程序设计语言】 2019年-中国计算机学会推荐国际学术会议和期刊目录(四)
- android手机电话铃声设置,怎么设置来电铃声-安卓手机小技巧:教你传输自己喜欢的歌曲铃声到系统铃声设置里...
- 微信群发工具,纯Python编写~
热门文章
- QQ互联登录提示redirect uri is illegal(100010)完美解决方法亲测有用!
- 操作系统虚拟机如何卸载docker
- nasm汇编实现贪吃蛇
- C语言自定义函数如何返回数组
- MongoDB和Node.js的Mongoose简介
- 全维观测器matlab,全维状态观测器详解.ppt
- 手机端网站SEO优化要点
- 全国最美的美女机器人 机械制造技术“屌”到爆
- Python,计算欧氏距离
- java 灰度直方图_【数字图像处理】灰度直方图、直方图均衡化、直方图规定化...