環境:
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
PS: 在 EBS 環境中是以 jdbc 的模式取得資料庫連線,可以進入 weblogic 的 Services-> Data
Sources 查看,如:EBSDataSource 的 JNDI: jdbc/TEST32
,並可以得知要佈署到那一個主機上:oacore_cluster1
EBizUtil.java
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
UserInfo.java
Step 02:在 adfc-config.xml 建立 view: userInfo.jspx 及 設定 Managed Beans
userInfo.jspx
Managed Beans:userInfoBean
Step 03: 設定 userInfo.jspx 的 beforePhase
這是在 UserInfo.java 的一段程式
Step 04 : web.xml 中設定 Filters
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 configuration if (ctx != null) ctx.close(); } catch (Exception e) { // TODO: Add catch code //ne.printStackTrace(); //ideally you should log it throw 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(); } } |
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 elsewhere INSTANCE = 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; } } |
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(" "); for (Object key : columns.keySet()) { temp.append(" "); temp.append(""); temp.append(""); temp.append(" "); } temp.append("
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 = vertical OutPutText:value="Hello #{pageFlowScope.userInfoBean.user}!!" inlineStyle="font-size:medium; color:Red;" Separator OutPutText:value="#User Info: #{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(" "); for (Object key : columns.keySet()) { temp.append(" "); temp.append(""); temp.append(""); temp.append(" "); } temp.append("
setUserInfo(temp.toString()); } |
Step 04 : web.xml 中設定 Filters
沒有留言:
張貼留言