【FND】EBS中Java并发程序开发

开发步骤

  1. 下载相关标准包
    fndutil.jar
    fndcp.jar
    fndctx.jar
    下载目录$JAVA_TOP/oracle/apps/fnd/jar/

  2. 写java类
    定义包名规则:
    a. 如果完成后只有简单的class类,则定义报名的路径要和上传到服务器的路径一致,如package oracle.apps.hqc; 则class文件需要上传到$JAVA_TOP/oracle.apps.hqc/目录下;
    b. 如果项目比较复杂最好打包成jar,然后上传到服务器指定的目录
    类说明:
    自己的类必须实现JavaConcurrentProgram接口,并且实现并发入口函数runProgram(CpContext ctx)

  3. 发布注册
    3.1 发布java程序
    a. 如果只有简单的class类,则上传到服务器的包名路径,如package oracle.apps.hqc; 则class文件需要上传到$JAVA_TOP/oracle.apps.hqc/目录下即可,并发管理器会自动找到class文件;
    b. 如果程序打包成jar包则可以上传到$JAVA_TOP中指定的目录,然后有两种方式引用jar包:
    方法一:修改$APPL_TOP/admin/adovars.env里的CLASSPATH和AF_CLASSPATH,把jar的绝对路径添加进去,然后重启并发管理器。
    方法二:在并发程序的选项上增加如下内容:

-classpath <path_to_your_custom.jar>/custom.jar:<path_to_JAVA_TOP>:<path_to_appsborg.zip>/appsborg.zip 
---绝对路径 
<path_to_appsborg.zip> = $COMMON_TOP/java/lib/appsborg.zip 
例如:
-classpath /u1/TEST52/apps/apps_st/comn/java/classes/hqc/Loadjava/EBSExcel.jar:/u1/TEST52/apps/apps_st/comn/java/classes:/u1/TEST52/apps/apps_st/comn/java/lib/appsborg.zip
R12.2环境
1、上传com文件夹到$JAVA_TOP下
2、编译object、package
3、注册请求

R12.2.10中POI3.10已在ebs3rdpartyManifest.jar中,ebs3rdpartyManifest.jar已在classpath
$COMMON_TOP/shared-libs/ebs-3rdparty/WEB-INF/lib/ebs3rdpartyManifest.jar

R12.1.3
1、上传CuxFndExcel.jar至$JAVA_TOP/oppo
2、编译object、package
3、注册请求
-Xms512M -Xmx1024M -classpath /u1/TEST52/apps/apps_st/comn/java/classes/oppo/CuxFndExcel.jar:/u1/TEST52/apps/apps_st/comn/java/classes:/u1/TEST52/apps/apps_st/comn/java/lib/appsborg.zip

参考:
1.Classpath Setting of Third Party Jar Files in R12 Java Concurrent Program (JCP) (文档 ID 1292694.1)
2.Path for java/appsborg2.zip in R12

在这里插入图片描述

3.2 并发请求注册

执行方法:Java并发程序
执行文件名:类名
执行文件路径:包名

在这里插入图片描述

并发请求设置同其他并发程序,略

  1. 示例
package oracle.apps.hqc;

import oracle.apps.fnd.cp.request.CpContext;
import oracle.apps.fnd.cp.request.JavaConcurrentProgram;
import oracle.apps.fnd.cp.request.LogFile;
import oracle.apps.fnd.cp.request.ReqCompletion;
import oracle.apps.fnd.util.NameValueType;
import oracle.apps.fnd.util.ParameterList;

public class TestHqc implements JavaConcurrentProgram {
    
    

    @Override
    public void runProgram(CpContext ctx) {
    
    
        //取得并发程序传入的参数列表
        ParameterList lPara = ctx.getParameterList();
        ReqCompletion lrc = ctx.getReqCompletion();
        try
        {
    
    
            //把参数名字和参数的值分别在log和output中打印出来
            while(lPara.hasMoreElements())
            {
    
    
                NameValueType nvt = lPara.nextParameter();
                ctx.getOutFile().writeln(nvt.getName() + ":" + nvt.getValue());
                ctx.getLogFile().write(nvt.getName() + ":" + nvt.getValue(), LogFile.STATEMENT);
            }

            //完成打印的步骤后,设置程序的结束状态为Normal,如果这个步骤不做,虽然程序没有错误,但是执行结果还是会报错的
            lrc.setCompletion(ReqCompletion.NORMAL, "Normal Ending");
        }
        catch(Exception e)
        {
    
    

            //如果程序出现异常,设置程序的执行结果,本来是应该设置ERROR的
            ctx.getLogFile().write(e.toString(), LogFile.STATEMENT);
            lrc.setCompletion(ReqCompletion.WARNING, "Exception Occurs!!!");
        }
    }   
}

5、FQA

1)idea打包jar运行报错
Exception in thread “main” java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
解决:使用压缩软件打开jar包 删除:META-INF目录下的除了mainfest.mf,.rsa及maven文件夹 以外的其他所有文件

2)使用高版本jdk报错
java.lang.UnsupportedClassVersionError: com/oppo/ebs/DemoHqc : Unsupported major.minor version 52.0
解决:换用jdk1.6打包

参考文献

  1. https://www.docin.com/p-373932599.html
  2. https://blog.csdn.net/sunansheng/article/details/51837077
  3. https://www.cnblogs.com/echochen/archive/2011/11/17/2253148.html
    https://www.cnblogs.com/echochen/archive/2012/01/02/2309735.html
    4.OAF_开发系列25_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(概念)

Guess you like

Origin blog.csdn.net/qingshimoon4/article/details/116531443