JavaOAF_开发体系25_达成OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)

 20150719 Created By
BaoXinjian

Java 1一、摘要


在是利用Form/Report/SQL等并发程式时,集中在数码的操作和拍卖上,但是在事物处理与系统相互有相当大的局限性,没有Java程序方便,

故而供给EBS系统中注册并运营Java并发程序,通过Java的无敌成效达成EBS的意义扩张

 

在Oracle EBS中的Java并发程序(Java
Concurrent
Program)是系统效率中的一个亮点,它的面世使得用户能够在E景逸SUVP系统中运行自身定义的Java程序。

 

接纳Java并发程序的利益:

当遭受如下2种情景的时候,用PLSQL程序包来形成将无限麻烦:

(1).
将服务器上的文件通过FTP安全有效的导入到apps环境下

(2).
使用JDBC连接1个非Oracle的数据库,并获得里面的数码,通过验证和更换导入到apps下的客制化表。对于上述假定,须求DBA建立透明网关,对于如此归纳的需要将会做复杂的安装。

  1. 程序接口

(1). 全部的java并发可实施都不可能不实现这么些接口(从那几个接口继承),

它定义了2个浮泛方法public abstract void runProgram(CpContext
cpcontext),其子类必须达成该格局。

public class BatchsCP implements JavaConcurrentProgram{
    public static final String RCS_ID = "$Header: BatchsCP.java 115.0 2008/09/07 14:36:23 pkm ship$";
    public void runProgram(CpContext cpcontext){
      //……coding here
    }
}

(2). 三个主要的包

oracle.apps.fnd.cp.request.*

oracle.apps.fnd.utl.*

 

Java 2二、CpContext类**


  1. LogFile LOG_FILE =
    CpContext.getLogFile():取得并发请求的日志类

LOG_FILE.writeln(String
msg, 1):之前志里面写内容

反编写翻译LogFile类,能够观望它的构造函数:

public LogFile(CpContext cpcontext){
  mCtx = cpcontext;
  mFilePath = System.getProperty("request.logfile");
}

 

  1. ParameterList parameterlist =
    CpContext.getParameterList():取得并发请求的参数

    while(parameterlist.hasMoreElements()){
    NameValueType namevaluetype = parameterlist.nextParameter();
    m_hashParametersList.put(new String(namevaluetype.getName()), new String(namevaluetype.getValue()));
    }

因此那个while循环就足以取出所有的产出请求参数,并将她们存到Hashtable
m_hashParametersList中,后边随时要采纳并发请求参数的时候就足以通过m_hashParametersList.get(String)方法取出参数值来

 

  1. 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)方法就能够知道了。

 

  1. OutFile OUT_FILE = CpContext.
    getOutFile():取得并发请求的日志类

OUT_FILE.writeln(String):往专业请求输出里面写内容

 

  1. Locale mLocale =
    CpContext.getLocale():取得地方区域音信(见java.util.Locale)

 

  1. 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):暂停请求

 

  1. Connection mJConn =
    CpContext.getJDBCConnection:取得Oracle
    JDBC驱动连接

 

  1. CpContext.commit(Connection
    connection):commit连接

 

  1. CpContext.rollback(Connection
    connection):rollback连接

其余还有CpContext.setRollbackSegment(Connection
connection)设置回滚段

 

  1. AppsEnvironmentStore =
    CpContext.createEnvironmentStore():创设EBS环境AppsEnvironmentStore类,它定义了Oracle获取dbc文件,建立连接环境的的操作

 

  1. 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=new TransferCP();
    transfer.runProgram(cpcontext);

 

  1. CpContext.initContext():初步化上下文,里面定义了部分开始化变量的章程和setter方法

 

  1. CpContext.initGlobal():初始化全局环境,能够查看到里边的代码如下:

    begin fnd_global.initialize(?,?,?,?,?,?,?,?,?,?,?,?); end;
    –那一个跟我们在PL/SQL里面早先化apps环境的代码一样效果
    begin
    FND_GLOBAL.APPS_INITIALIZE (USER_ID =>1110, RESP_ID=>50239, RESP_APPL_ID=>200);
    end;

 

  1. CpContext.initConcurrent():伊始化并发,查看代码下:

    begin fnd_concurrent.init_request; end;
    –只是调用了PL/SQL标准包,具体的底细能够去看package fnd

 

15.CpContext.initParameterList():初始化并发请求参数列表,查看代码如下:

select column_seq_num num, 
       srw_param 
  from fnd_descr_flex_column_usages 
 where 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里面获取并发请求参数。

 

  1. 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)方法

 

  1. CpContext.setSession():设置会话相关参数(语言和地方),查看代码如下:

率先取得环境EnvironmentStore environmentstore =
getEnvStore();

接下来mReqDetails.getSessInfo()的getNlsLanguage()、getNlsTerritory()比较,要是取出的值是同一的,则实施如下执行如下PL/SQL:

Begin
  FND_GLOBAL.set_nls_context(p_nls_language=>?,  -- environmentstore.setEnv("NLS_LANGUAGE", s);
                             p_nls_territory=>?); -- environmentstore.setEnv("NLS_TERRITORY", s1);
end;

 

  1. CpContext.setUserContext():设置了用户环境(将用户音信添加到SessionManager)

CpContext.setNLSLocale():获取当地音讯寄存到CpContext.mLocale中

CpContext.setTrace():首先判断System.getProperty(“request.enabletrace”);是或不是为’Y’;假使是,则运转                               

BEGIN
DBMS_SESSION.SET_SQL_TRACE(TRUE); END;

来设置Trace为启用

 

  1. CpContext.requestEnd():执行如下PL/SQL来收尾请求

BEGIN
FND_CONC_STAT.COLLECT; END;

 

  1. CpContext.modifyOutFileInDb(String
    s):更新FND_CONCURRENT_REQUESTS表的OUT_FILE

UPDATE
FND_CONCURRENT_REQUESTS  SET OUTFILE_NAME= ? WHERE REQUEST_ID=
?

 

  1. CpContext.loadEnvironment(Connection
    connection):加载环境上下文,调用如下PL/SQL

    select
    variable_name,
    value
    from fnd_concurrent_requests cr ,
    fnd_env_context ec
    where cr.controlling_manager = ec.concurrent_process_id
    and 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

Java 3

相关文章