Oracle EBS R12 整合ADF
环境:
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相关推荐
- Oracle EBS R12.2 新特性文档
附件描述: 附件包含EBS从R12版本到R12.2版本的一些改进特征 Attached is document describing important enhancements to EBS sin ...
- Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理
介绍Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处. Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断或关机后,重新开机,运行数据库 ...
- Oracle EBS R12 客户表结构
参考链接: Oracle EBS R12 客户表结构 Oracle EBS中的"客户"."客户地点".'订单'之间的关系 Oracle EBS中的"客 ...
- oracle电子商务套件视频,Oracle电子商务套件培训 Oracle EBS R12 制造模块培训视频教程 Oracle管理套件教程...
Oracle电子商务套件培训 Oracle EBS R12 制造模块培训视频教程 Oracle管理套件教程│ ├<01> │ │ ├00_ERP基本原理-概念补充.pdf │ │ ...
- Oracle EBS R12.1.1 应用克隆 - 3
2.2.clone完成后设置环境变量(如果是覆盖环境,则此步骤不需要操作,因为profile不变) 到owner的home目录 vi .bash_profile (aix - .p ...
- Oracle EBS R12.1.1 应用克隆 - 2
二. APPS应用克隆 2.1 开始克隆关键步骤: [apploserp@nkgtsoserp01-vlx bin]$ pwd /data01/oracle/rlpd/apps/apps_s ...
- Oracle EBS R12 - Application patch可不可以reapply
Oracle EBS R12下, 如果一个补丁已经打了, 能不能再打一次呢? 答案是可以的, 第二次打相同补丁时会有个提示问你是不是要继续, 回答Y即可.(已亲测) Reapply Apps Patc ...
- Oracle EBS R12 创建会计科目失败诊断和处理
前言:Oracle EBS R12 财务系统中运维工作中比较常见的问题就是创建会计科目失败,本文对资产模块和应付模块创建会计科目的一般情况进行总结. 1.创建会计科目失败一般场景 1.1 期间未打开 ...
- Oracle ebs r12官方虚拟机配置
硬件要求 虚拟机硬件 内存:12GB+ 硬盘:300GB+ 处理器:4线程+ 宿主机(本地机器) 内存:16GB+ 硬盘:500GB+ 处理器:8线程+ 笔者宿主机信息如下: 型号:MacBook P ...
最新文章
- 样式集(五)微信朋友圈样式模拟
- 数据结构——线性表之链式存储结构
- LabVIEW2015安装教程
- [ASP.NET Core MVC] 如何实现运行时动态定义Controller类型?
- python 示例_在Python中带有示例的while关键字
- 全国计算机二级等级考试项目有什么,全国计算机等级考试二级内容
- 05:年龄与疾病【一维数组】
- Java使用RabbitMQ之订阅分发(Topic)
- 使textarea支持tab缩进
- 2台电脑一根网线传文件_黑龙江工程专用网线报价,黑电源线配件厂家
- poj 3735 Training little cats (矩阵快速幂)
- yii2 默认路由,默认动作
- 『迷你教程』数据分析都不知道的非参数统计概论
- 一套价值800元的爱代挂源码完整版
- SECS半导体通信委员会参考书
- 测绘工作日常总结(不定稿)
- JInternalFrame For JTabbedPane 测试
- 电大计算机应用基础期末考试题,电大计算机应用基础模拟题答案.docx
- strong scaling and weak scaling
- 神秘美丽的陨石:蜂窝黄金发光晶体