环境
ADF version: 11.1.1.6.0
Oracle EBS version: R12.2.3

程序的目的在于取得 EBS 登入时的用户相关信息。整个程序架构如下图:

ADF 的程序面:
Step 01: 在 ViewController 依序建立 Java Class:ConnectionProvider、EBizUtil、EBSWrapperFilter、以及存取用户信息的 Java Bean: UserInfo资料的 ConnectionProvider.java代码:

package com.oracle.view;import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;public class ConnectionProvider {private static DataSource ebsDS = null;static{try {Context ctx = new InitialContext();ebsDS = (DataSource) ctx.lookup("jdbc/TEST32");// your datasource jndi name as defined during configurationif (ctx != null)ctx.close();} catch (Exception e) {// TODO: Add catch code//ne.printStackTrace(); //ideally you should log itthrow new RuntimeException(e);// means jndi setup is not correct or doesn't exist}}private ConnectionProvider() {super();}public static Connection getConnection() throws SQLException{if (ebsDS == null)throw new IllegalStateException("AppsDatasource is not properly initialized or available");return ebsDS.getConnection();}}

PS: 在 EBS 环境中是以 jdbc 的模式取得数据库联机,可以进入 weblogic 的 Services-> Data Sources 查看,如:EBSDataSource 的 JNDI: jdbc/TEST32 ,并可以得知要布署到那一个主机上:oacore_cluster1

EBizUtil.java 代码:

package com.oracle.view;import java.sql.Connection;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.apps.fnd.ext.common.EBiz;public class EBizUtil {public EBizUtil() {super();}private static final Logger logger = Logger.getLogger(EBizUtil.class.getName());private static EBiz INSTANCE = null;static {Connection connection = null;try {connection = ConnectionProvider.getConnection();// DO NOT hard code applServerID for a real application// Get applServerID as CONTEXT-PARAM from web.xml or elsewhereINSTANCE = new EBiz(connection, "F1CB87199593E5F4E0431F030A0AD0AB31310251131793525291714692481335");} catch (SQLException e) {logger.log(Level.SEVERE, "SQLException while creating EBiz instance -->", e);throw new RuntimeException(e);} catch (Exception e) {logger.log(Level.SEVERE, "Exception while creating EBiz instance -->", e);throw new RuntimeException(e);} finally {if (connection != null) {try {connection.close();} catch (SQLException e) {throw new RuntimeException(e);}}}}public static EBiz getEBizInstance() {return INSTANCE;}    }

PS: APPL_SERVER_ID 可以到 EBS APP Server 路径下的 $INST_TOP/appl/fnd/12.0.0/secure/TEST32.dbc 取得Server ID :
APPL_SERVER_ID=F1CB87199593E5F4E0431F030A0AD0AB31310251131793525291714692481335
EBSWrapperFilter.java代码:

package com.oracle.view;import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import oracle.apps.fnd.ext.common.AppsRequestWrapper;
import oracle.apps.fnd.ext.common.AppsRequestWrapper.WrapperException;public class EBSWrapperFilter implements Filter {public EBSWrapperFilter() {super();}private static final Logger logger = Logger.getLogger(EBSWrapperFilter.class.getName());public void init(FilterConfig filterConfig) {logger.info("Filter initialized ");}public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException,ServletException {AppsRequestWrapper wrapper = null;logger.info("-current URI =" + ((HttpServletRequest)request).getRequestURI());try {wrapper = new AppsRequestWrapper((HttpServletRequest)request, (HttpServletResponse)response, ConnectionProvider.getConnection(), EBizUtil.getEBizInstance());} catch (WrapperException e2) {logger.log(Level.SEVERE, "WrapperException error encountered ", e2);throw new ServletException(e2);} catch (SQLException e2) {logger.log(Level.SEVERE, "SQLException error encountered ", e2);throw new ServletException(e2);}try {logger.info("Created AppsRequestWrapper object." + " Continuing the filter chain.");chain.doFilter(wrapper, response);logger.info("- the filter chain ends");} finally {//AppsRequestWrapper caches a connection internally.//AppsRequestWrapper.getConnection()--returns this connection this connection can be used in doGet()/doPost() service layer//whenever our application requires a connection in order to service the current request.//When AppsRequestWrapper instance is in use, this connection should not be closed by other code.//At this point, we are done using AppsRequestWrapper instance so, as good practice, we are going to close (release) this connection now.if (wrapper != null) {try {logger.info("- releasing the connection attached to the" + " current AppsRequestWrapper instance ");wrapper.getConnection().close();} catch (SQLException e3) {logger.log(Level.WARNING, "SQLException error while closing connection--", e3);throw new ServletException(e3);}}wrapper = null;}}public void destroy() {logger.info("Filter destroyed ");}
}

UserInfo.java 代码:

package com.oracle.bean;import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import oracle.apps.fnd.ext.common.AppsRequestWrapper;
import oracle.apps.fnd.ext.common.Session;public class UserInfo {private String user;private String userInfo;public UserInfo() {super();}public void setUser(String user) {this.user = user;}public String getUser() {return user;}public void beforePhase(PhaseEvent phaseEvent) {// Add event code here...AppsRequestWrapper wrappedRequest =(AppsRequestWrapper)FacesContext.getCurrentInstance().getExternalContext().getRequest();Session session = wrappedRequest.getAppsSession();setUser(session.getUserName());Map columns = session.getInfo();StringBuffer temp = new StringBuffer();temp.append("<table>");for (Object key : columns.keySet()) {temp.append("<tr>");temp.append("<td>");temp.append(key);temp.append("</td>");temp.append("<td>");temp.append(columns.get(key));temp.append("</td>");temp.append("</tr>");}temp.append("</table>");setUserInfo(temp.toString());}public void setUserInfo(String userInfo) {this.userInfo = userInfo;}public String getUserInfo() {return userInfo;}
}

Step 02:在 adfc-config.xml 建立 view: userInfo.jspx 及 设定 Managed Beans
userInfo.jspx

版面:PageGroupLayout :layout = verticalOutPutText:value="Hello #{pageFlowScope.userInfoBean.user}!!"inlineStyle="font-size:medium; color:Red;" SeparatorOutPutText:value="#User Info:<br>#{pageFlowScope.userInfoBean.userInfo}" escape="false"inlineStyle="font-size:medium;"

Managed Beans:userInfoBean :

Step 03: 设定 userInfo.jspx 的 beforePhase

这是在 UserInfo.java 的一段程序

public void beforePhase(PhaseEvent phaseEvent) {// Add event code here...AppsRequestWrapper wrappedRequest =(AppsRequestWrapper)FacesContext.getCurrentInstance().getExternalContext().getRequest();Session session = wrappedRequest.getAppsSession();setUser(session.getUserName());Map columns = session.getInfo();StringBuffer temp = new StringBuffer();temp.append("<table>");for (Object key : columns.keySet()) {temp.append("<tr>");temp.append("<td>");temp.append(key);temp.append("</td>");temp.append("<td>");temp.append(columns.get(key));temp.append("</td>");temp.append("</tr>");}temp.append("</table>");setUserInfo(temp.toString());}

Step 04 : web.xml 中设定 Filters

Oracle EBS 上的设定 :
Step 01: 设定 Function : Menu: Responsibiliey:
Function: WEI_ADFLAB_USERINFO

Function

WEI_ADFLAB_USERINFO

Properties-Type

External ADF Application

WebHTML-HTML Call

GWY.jsp?targetPage=faces/userInfo


Menu:WEI_LAB_MENU 

Responsibility: WEI Labs 

Step 02: Responsibility: Functional Administrator 上的设定
a.Core Services → Profiles → Code: FND_EXTERNAL_ADF_URL → Go
b.然后点选External ADF Application URL 后按 Define Profile Values

a. 点选Define Profile Values → Responsibility
b. 选择 Responsibility & Value
c. Value:  客制程式在 weblogic 的路径,如: http://lnxap104:7214/LAB_EBS-ViewController-context-root/ ,最后要加 /
d. 按 Update

一个Responsibility只能绑定一个程序的root,所以如果有多个功能,可能要放在同一包应用程序里面。也有其它使用者在问此问题,但现在并没有进一步的解法。例如: Oracle论坛,其他使用者提问的 >> 问题
Step 03: 清除 Caching Framework & Testing

本文章转载:ADF 整合於 ( Integrate ) Oracle EBS R12

Oracle EBS R12 整合ADF相关推荐

  1. Oracle EBS R12.2 新特性文档

    附件描述: 附件包含EBS从R12版本到R12.2版本的一些改进特征 Attached is document describing important enhancements to EBS sin ...

  2. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理

    介绍Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断或关机后,重新开机,运行数据库 ...

  3. Oracle EBS R12 客户表结构

    参考链接: Oracle EBS R12 客户表结构 Oracle EBS中的"客户"."客户地点".'订单'之间的关系 Oracle EBS中的"客 ...

  4. oracle电子商务套件视频,Oracle电子商务套件培训 Oracle EBS R12 制造模块培训视频教程 Oracle管理套件教程...

    Oracle电子商务套件培训 Oracle EBS R12 制造模块培训视频教程 Oracle管理套件教程│  ├<01> │  │  ├00_ERP基本原理-概念补充.pdf │  │  ...

  5. Oracle EBS R12.1.1 应用克隆 - 3

    2.2.clone完成后设置环境变量(如果是覆盖环境,则此步骤不需要操作,因为profile不变) 到owner的home目录   vi   .bash_profile       (aix - .p ...

  6. Oracle EBS R12.1.1 应用克隆 - 2

    二.    APPS应用克隆 2.1  开始克隆关键步骤:  [apploserp@nkgtsoserp01-vlx bin]$ pwd /data01/oracle/rlpd/apps/apps_s ...

  7. Oracle EBS R12 - Application patch可不可以reapply

    Oracle EBS R12下, 如果一个补丁已经打了, 能不能再打一次呢? 答案是可以的, 第二次打相同补丁时会有个提示问你是不是要继续, 回答Y即可.(已亲测) Reapply Apps Patc ...

  8. Oracle EBS R12 创建会计科目失败诊断和处理

    前言:Oracle EBS R12 财务系统中运维工作中比较常见的问题就是创建会计科目失败,本文对资产模块和应付模块创建会计科目的一般情况进行总结. 1.创建会计科目失败一般场景 1.1 期间未打开 ...

  9. Oracle ebs r12官方虚拟机配置

    硬件要求 虚拟机硬件 内存:12GB+ 硬盘:300GB+ 处理器:4线程+ 宿主机(本地机器) 内存:16GB+ 硬盘:500GB+ 处理器:8线程+ 笔者宿主机信息如下: 型号:MacBook P ...

最新文章

  1. 样式集(五)微信朋友圈样式模拟
  2. 数据结构——线性表之链式存储结构
  3. LabVIEW2015安装教程
  4. [ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?
  5. python 示例_在Python中带有示例的while关键字
  6. 全国计算机二级等级考试项目有什么,全国计算机等级考试二级内容
  7. 05:年龄与疾病【一维数组】
  8. Java使用RabbitMQ之订阅分发(Topic)
  9. 使textarea支持tab缩进
  10. 2台电脑一根网线传文件_黑龙江工程专用网线报价,黑电源线配件厂家
  11. poj 3735 Training little cats (矩阵快速幂)
  12. yii2 默认路由,默认动作
  13. 『迷你教程』数据分析都不知道的非参数统计概论
  14. 一套价值800元的爱代挂源码完整版
  15. SECS半导体通信委员会参考书
  16. 测绘工作日常总结(不定稿)
  17. JInternalFrame For JTabbedPane 测试
  18. 电大计算机应用基础期末考试题,电大计算机应用基础模拟题答案.docx
  19. strong scaling and weak scaling
  20. 神秘美丽的陨石:蜂窝黄金发光晶体

热门文章

  1. adb的安装及环境配置
  2. python中实现微信登录
  3. 小学生加减乘除法做题系统,代码为纯c语言
  4. 计算机毕业设计-基于ssm的问卷调查管理系统
  5. 新手怎么加入自媒体?新手入门其实很简单
  6. 大学期末考java编程题_大学慕课2020年Java程序设计期末考试大全答案
  7. NYOJ - [第五届河南省程序设计大赛]最强DE战斗力(大数)
  8. 3万字智慧工业园区整体解决方案
  9. p二、使用 docker-compose 安装 Prometheus+Alertmanager+Grafana
  10. 解读《领域驱动设计 软件核心复杂性应对之道》(一)