Oracle EBS R12 consolidation ADF

Environmental Science:
ADF version: 11.1.1.6.0
Oracle EBS version: R12.2.3

The purpose of the program is to obtain information about users when EBS logs in. The whole program architecture is as follows:

ADF program surface:
Step 01: create Java Class: ConnectionProvider, EBizUtil, EBSWrapperFilter, and ConnectionProvider.java code of Java Bean: UserInfo data to access user information in the ViewController

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();
    }
 
}

PS: in EBS environment, the database is online in jdbc mode. You can enter Services - > data sources of weblogic to view, such as JNDI of EBSDataSource: jdbc / test32, and you can know which host to deploy: oacore? Cluster1

EBizUtil.java Code:

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;
    }    
    
}

PS: appl Server ID can get the Server ID from $Inst top / Appl / fnd / 12.0.0/secure/test32.dbc under the EBS APP Server path:
APPL_SERVER_ID=F1CB87199593E5F4E0431F030A0AD0AB31310251131793525291714692481335
Ebswraperfilter.java Code:

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 Code:

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: create view: userInfo.jspx in adfc-config.xml and set Managed Beans
userInfo.jspx 

Page: PageGroupLayout : layout = vertical
      OutPutText: value="Hello #{pageFlowScope.userInfoBean.user}!!"
          inlineStyle="font-size:medium; color:Red;" 
      Separator
       OutPutText: value="#User Info:<br>#{pageFlowScope.userInfoBean.userInfo}" 
           escape="false"
                  inlineStyle="font-size:medium;"

Managed Beans: userInfoBean :

Step 03: set the beforePhase of userInfo.jspx

This is a program in 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: set Filters in web.xml

Settings on Oracle EBS:
Step 01: set 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: settings on Functional Administrator
a.Core Services → Profiles → Code: FND_EXTERNAL_ADF_URL → Go
b. Then click the External ADF Application URL and press Define Profile Values

a. Click Define Profile Values → Responsibility
b. Select responsibility & value
c. Value: the path of the client in weblogic, such as: http://lnxap104:7214/LAB_EBS-ViewController-context-root /. Finally, add/
d. Press Update

A Responsibility can only be bound to the root of one program, so if there are multiple functions, they may be placed in the same package of applications. Other users are asking this question, but there is no further solution. For example: Oracle forum, questions from other users
Step 03: clear caching framework & Testing

Reprinted in this article: ADF integrated in Oracle EBS R12 

 

 

Tags: Java Oracle Session SQL

Posted on Sun, 05 Jan 2020 12:51:17 -0800 by Daniel.Conaghan1