About Me

My photo
San Fransisco, Bay Area, California, United States
• SIX years of extensive experience in ERP development and Enterprise Applications Practice with proven experience in Developing and customizing Oracle Financials 11i and R12 and Fusion Application Development (FCH, GL, EPF and EPB modules) on AOL of Oracle E-business Suite. • Worked for the Oracle Financials Applications Technology Team and Financial Consolidation Hub (FCH) Application Development group. • Expertise in Oracle Fusion Technologies like Hyperion Essbase, ADF and BPEL • Expertise in development and maintenance of Self-Service Applications using Oracle Application Framework (OAF), Web ADI, XML Publisher based products and frameworks for integration capabilities of the Oracle e-Business Suite. • Excellent track record demonstrating strong analytical and problem solving skills, computer proficiency, and ability to follow through with projects from inception to completion. • Competent in preparing and delivering presentations to both technical and executive positions.

Thursday, November 12, 2009

Weblogic Server :: java.lang.InternalError: erroneous handlers

While debugging one issue on Drop8 Build2C based Standalone WLS, I've encountered one tricky/puzzling error stack:
java.lang.InternalError: erroneous handlers
at oracle.apps.financials.
generalLedger.ledgers.ledgerDefinitions.ess.program.createCubes.execute(createCubes.java:231)
at oracle.as.scheduler.cp.exec.
ExecutableWrapper.execute(ExecutableWrapper.java:135)
at oracle.as.scheduler.rp.
JavaSysExecWrapper$1.run(JavaSysExecWrapper.java:308)
at javax.security.auth.Subject.
doAsPrivileged(Subject.java:517)
at oracle.security.jps.internal.
jaas.AccActionExecutor.execute(AccActionExecutor.java:47)
The above error stack is clueless and doesn't give any clear explanation of the issue. It just have the error - "java.lang.InternalError: erroneous handlers"
After little research, its been found that - 'There is a "real" error behind this error but the BEA JRockit version of java is not showing it.'

To find the real error you need to switch WLS JVM settings to use Sun's Java instead of default Oracle JVM.
If any one of you encounter the above error stack, to get the actual error stack, you need to do the following steps:
  • Modify the setDomainEnv.sh file, to include following parameters:
    1. Include a new environment variable JAVA_VENDOR="Sun" and export it.
    2. Try starting the WLS server now.
    3. If you are hitting "OutOf MemoryException: PermGen error", then :
      1. override the USER_MEM_ARGS param to value = "-Xms256m -Xmx512m -XX:PermSize=512m -XX:MaxPermSize=512m"
    4. Now bounce the WLS
    5. Try reproducing the issue, you should be able to get the exact error stack (and not the above clueless error - "java.lang.InternalError: erroneous handlers")
I'm attaching sample modified setDomainEnv.sh file for your reference.

Monday, September 7, 2009

Hyperion Essbase and JAPI – Custom Applications using JDeveloper

I found an interesting article on usage of JAVA APIs of Essbase. The following articles shows how to expose the Hyperion Essbase cubes to custom applications.Basically, Essbase has 3 different types of APIs. They are

1. C API
2. Microsoft Visual Basic API
3. JAPI for Java

In this article, i would be showing how to use the JAPI from a client machine to access the analytic server data. To do this, i created a sample cube on the Essbase server. My sample cube consisted of 2 dimensions. They are

1. Times
Levels: Year->Quarter->Month->Day

2. Products
Levels: Product Name

The OLAP Model and the Meta Outline are given below in the pictures.
































In order to use the JAPI in a client machine, one would have to download and install the analytic server runtime component (analytic server client). This client would give the necessary jars which we can include in our project. The entire JAPI of Hyperion Essbase is split into 6 main packages. They are

1. com.essbase.api.base
2. com.essbase.api.metadata
3. com.essbase.api.dataquery
4. com.essbase.api.datasource
5. com.essbase.api.domain
6. com.essbase.api.session

As the name suggests, each of these packages have their own importance. For example, com.essbase.api.session and com.essbase.api.base help in creating a session. These package consists of methods that expose the entire functionality of Essbase to end users. In our example, we would be using all these packages to get a value from one of the cells in the Essbase. To do this, i will give an overview of the steps that we would have to take.

1. Establish an Essbase session by calling the signOn() method.

2. Specify the Olap Server that you want to connect by using the getOlapServer() method.

3. Connect to the Olap Server using the connect() method.

4. Open the Cube (database in Essbase terminology) by specifying the application name and the database (use the openCubeView method)

5. Perform member selection. Select the members that you would like to display.

6. Get the cell value from the cube for the specified member(s).

The code to do this would look like this.

package essbasetest;

import java.lang.Object;
import com.essbase.api.base.*;
import com.essbase.api.datasource.*;
import com.essbase.api.dataquery.*;
import com.essbase.api.metadata.*;
import com.essbase.api.domain.*;
import com.essbase.api.session.IEssbase;

public class test1
{
public test1()
{

String olapServerName;
String userName = “analyticservices”;
String password = “welcome1″;
String providerURL = “http://localhost:13080/aps/JAPI”;
String analyticServerName = “incq065bb”;
String appName = “LevelTi”;
String dbName = “LevelTi”;

IEssbase ess = null;
IEssOlapServer olapSvr = null;
try
{
ess = IEssbase.Home.create(IEssbase.JAPI_VERSION);
IEssDomain dom;
dom = ess.signOn(userName, password, false, null, providerURL);
//System.out.println(dom.PROP_COUNT_OLAP_SERVERS) ;
olapSvr = (IEssOlapServer)dom.getOlapServer(analyticServerName);
olapSvr.connect();
IEssCube cube = olapSvr.getApplication(appName).getCube(dbName);
System.out.println(cube.getApplicationName());
//getMemberFromCube(cube);

IEssCubeView cv = null;
cv = dom.openCubeView(”Cube Query”, analyticServerName, appName, dbName);

performMemberSelection(ess, cv);
performCubeViewOperation(ess, cv, “pivot”);

} catch (EssException ex){
System.err.println(”Error: ” + ex.getMessage());
}
}

static void performCubeViewOperation(IEssbase ess, IEssCubeView cv,
String opStr) throws EssException
{
IEssGridView grid = cv.getGridView();
grid.setSize(3, 5);
grid.setValue(0, 2, “Product”);
grid.setValue(0, 3, “Market”);
grid.setValue(1, 2, “Jan”); ;
grid.setValue(1, 3, “Feb”);
grid.setValue(1, 4, “Mar”);
grid.setValue(2, 0, “Actual”);
grid.setValue(2, 1, “Sales”);
IEssOperation op = null;

op = cv.createIEssOpPivot();
((IEssOpPivot)op).set(0, 3);

cv.performOperation(op);

int cntRows = grid.getCountRows(), cntCols = grid.getCountColumns();
System.out.print(”Query Results for the Operation: ” + opStr + “\n” +
“—————————————————–\n”);
for (int i = 0; i < j =" 0;">

static void performMemberSelection(IEssbase ess, IEssCubeView cv)
throws EssException {
String fldSel = “< mbr =" mbrs[i];">

mbrs = cv.memberSelection(”1999″, IEssMemberSelection.QUERY_TYPE_CHILDREN,
IEssMemberSelection.QUERY_OPTION_MEMBERSONLY, “1999″, “”, “”);
for (int i = 0; i < mbr =" mbrs[i];">

static void getMemberFromCube(IEssCube cube) throws EssException {
System.out.println
(”\nGetting a Member from Cube (Year): \n” +
“———————————”);
IEssMember mbr = cube.getMember(”1998″);
displayMemberProperties(mbr);

System.out.println
(”\nGetting a Member from Cube (Year): \n” +
“———————————”);
IEssDimension dim = cube.getDimension(”1998″);
IEssMember rootMbr = dim.getDimensionRootMember();
displayDimensionProperties(dim);
displayMemberProperties(rootMbr);

System.out.println
(”\nGetting a Dimension from Cube (Year): \n” +
“———————————”);
dim = cube.getDimension(”1999″);
displayDimensionProperties(dim);
}

static void displayMemberProperties(IEssMember mbr) throws EssException {
System.out.println(”\nDisplaying member properties…\n”);
System.out.println(”Name: ” + mbr.getName());
System.out.println(”Dimension Root Member: ” + mbr.isDimensionRootMember());
System.out.println(”Level Number: ” + mbr.getLevelNumber());
System.out.println(”Generation Number: ” + mbr.getGenerationNumber());
System.out.println(”Unary consolidation type: ” + mbr.getConsolidationType());
System.out.println(”Dimension Name: ” + mbr.getDimensionName());
System.out.println(”Parent member name: ” + mbr.getParentMemberName());
System.out.println(”Member number: ” + mbr.getMemberNumber());
System.out.println(”Dimension number: ” + mbr.getDimensionNumber());
System.out.println(”Next Sibling Member Name: ” + mbr.getNextSiblingMemberName());
System.out.println(”First Child Member Name: ” + mbr.getFirstChildMemberName());
System.out.println(”Previous Sibling Member Name: ” + mbr.getPreviousSiblingMemberName());

}

static void displayDimensionProperties(IEssDimension dim)
throws EssException {
System.out.println(”\nDisplaying dimension properties…\n”);
System.out.println(”Name: ” + dim.getName());
System.out.println(”Dimension number: ” + dim.getDimensionNumber());
System.out.println(”Dimension storage type: ” + dim.getStorageType());
System.out.println(”Dimension tag: ” + dim.getTag());
System.out.println(”Declared size: ” + dim.getDeclaredSize());
System.out.println(”Actual size: ” + dim.getActualSize());
System.out.println(”Attribute dimension data type: ” +
dim.getAttributeDimensionDataType());
}

public static void main(String[] args)
{
test1 a= new test1();
}
}

The output after executing the above package is shown below

The above is just to give you an example and to show you the capabilities of Hyperion Essbase API. One can leverage these java classes in any application. It would be very interesting to see how Essbase gets integrated into Oracle BI stack and i believe it should not be much of a problem. Interesting times ahead indeed!!!

Tuesday, October 21, 2008

ADF:Invoking AM methods from the Managed Bean

Pure JSF way:
-------------

FacesContext facesContext=FacesContext.getCurrentInstance();
ExpressionFactory exp=facesContext.getApplication().getExpressionFactory();
MethodExpression getDeptNames = exp.createMethodExpression(facesContext.getELContext(),
"#{bindings.getAllDepts.execute}", null,new Class[]{});
HashMap map=(HashMap)getDeptNames.invoke(facesContext.getELContext(),null);



ADF way:
---------

Packages to be imported

import javax.el.ExpressionFactory;

import javax.faces.application.Application;
import javax.faces.context.FacesContext;

import oracle.adf.model.OperationBinding;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCIteratorBinding;

Sample Code Snippet:
-------------------
FacesContext fctx = FacesContext.getCurrentInstance();
Application app = fctx.getApplication();
ExpressionFactory exp=fctx.getApplication().getExpressionFactory();

DCBindingContainer bc;
bc = (DCBindingContainer)exp.createValueExpression(fctx.getELContext(),
"#{bindings}",DCBindingContainer.class).
getValue(fctx.getELContext());

//Get Current Row Handle
DCIteratorBinding iter = bc.findIteratorBinding("Emp2Iterator");
Row row = iter.getCurrentRow();
Number empNo = (Number)row.getAttribute("Empno");

//get Access to Method Binding

OperationBinding operation = (OperationBinding)bc.get("printANumber");
operation.getParamsMap().put("data", empNo);
operation.execute();

Sunday, September 28, 2008

Google’s Project 10 the power of 100

Its an exciting opportunity for all of us to ignite our minds to think on the ways of creating more tools for the betterment of society. Many individuals have very good thoughts but do not know the way to realize them. Now as a boon from the Lord, there’s google that doesn’t understand what IMPOSSIBLE is which can serve our requests.

All that we need to do is to submit our IDEA. It will be scrutinized and the screened ones will be listed for public polling. The best selected 5 IDEAS will be funded by Google for their implementation.

The ideas are to be under these categories:

Categories

* Community
* Opportunity
* Energy
* Environment
* Health
* Education
* Shelter
* Everything else

Selection Criteria

* Reach How many people would this idea affect?
* Depth How deeply are people impacted? How urgent is the need?
* Attainability Can this idea be implemented within a year or two?
* Efficiency How simple and cost-effective is your idea?
* Longevity How long will the idea’s impact last?

October 20th is the last date.

You can submit multiple ideas.

This is for a noble cause to help as many people as possible through out the world.

If your Idea gets selected you will not be getting anything apart from the credit of getting known as the person who suggested it. Don’t expect any financial rewards from Google.

However you lose nothing by dropping your idea for a better society.

Don’t miss this as your simple thought might bring in a big change.

For more details:

http://www.project10tothe100.com/intl/EN_GB/index.html

Friday, September 12, 2008

How to Install Oracle Essbase 11.1.1.0 (Fusion Edition) on your PC

Today, I successfully installed the latest Oracle Essbase 11.1.1.0 (Fusion Edition) on my laptop. The process is completely different and easy when compared to that of Essbase 9.3.1

Following are the steps to install the software:
  • Before starting the installation, I strongly recommend you to uninstall the 9.3.1 version existing (If any) on your system . This makes the installation process pretty much smoother by avoiding the port conflicts while Upgrading to 11.1.1.0.
  • Install Oracle XE
    • Do it only if you don't have it already on your system
    • Hyperion Shared Services, required by Essbase Administration Services, can be installed on an Oracle instance.
  • Download the following softwares from edelivery.oracle.com -> Oracle Enterprise Performance Management (11.1.1.0.0) Media Pack for Microsoft Windows (32-bit) to one folder
    1. Oracle Hyperion Enterprise Performance Management System Installer, Fusion Edition Release 11.1.1.0.0
    2. Hyperion Enterprise Performance Management System Foundation Services Release 11.1.1.0.0 Part 1 of 3
    3. Hyperion Enterprise Performance Management System Foundation Services Release 11.1.1.0.0 Part 2 of 3
    4. Hyperion Enterprise Performance Management System Foundation Services Release 11.1.1.0.0 Part 3 of 3
    5. Oracle Essbase Server Release 11.1.1.0.0
    6. Oracle Essbase Client Release 11.1.1.0.0
    7. Oracle Hyperion Financial Reporting, Fusion Edition Release 11.1.1.0.0
  • All the above software will be in individual ZIP files.
  • Unzip all the ZIP files from 1-7 in the same order and to the same location (say, folder \download_location)
    • When the Softwares from 2-7 are unzipped, it'll create a folder with same name "\assemblies". Just override the existing folder.
  • Now,  to install and Configure EPM System products:
    1. Choose a method:
      • (Windows) Double-click installTool.cmd in the root directory to which you extracted the EPM System Installer files.
      • (Windows) From a Windows console, change to the root directory to which you extracted the EPM System Installer files and enter installTool.cmd -console.EPM System Installer launches.
    2. EPM System Installer launches. Review and complete each page of EPM System Installer, clicking Next to move to the next page.
    3. When installation is complete, click Configure to configure the products using EPM System Configurator, or click Finish to close EPM System Installer.
    4. References: http://download.oracle.com/docs/cd/E12825_01/epm.111/epm_install/frameset.htm?launch.html
  • How to Start and Stop EPM System Products services:
    • EPM System Installer installs a single start script in HYPERION_HOME/products/bin, called "start.bat". Running the single start script on a machine in your EPM System deployment starts all EPM System services installed on that machine.
    • A single stop script, "stop.bat" is also installed in HYPERION_HOME/products/bin. Running the stop script on a machine in your EPM System deployment stops all EPM System products on that machine.
  • Once we start the services, we can launch the EPM Products by launching the applications from Start -> Oracle EPM Products -> (Application).
We are done!!! :-)

Regards,

Thursday, September 11, 2008

Me, Myself and Blogging........

Hi there,

My self Santosh Matam working with Oracle India for the last five year in ERP Arena....
Currently, I'm working on Fusion Developent, the next-generation killer ERP.....for which the world is waiting for :)

Let me blog/share my knowledge......

Thanks for visiting and I would appreciate your comments/suggetions.....

Best Regards,
S