Kaleidoscope 2009 Hands on Lab - Oracle Essbase Java API - Building Your First Application (S656)
I know it has been while since the show but I wanted to make sure this got posted. The plan for this lab was to build on S655 and S654 and for the end result to be a useable Essbase utility written with the Java API in JDeveloper.Â
The lab was focused on the Outline API and was centered around the idea of creating an Outline Extractor. The lab can be downloaded here. This lab will get you started but here is a more complete code sample with XML output.
package com.oracle.essbase.japi;
  import com.essbase.api.base.EssException;
import com.essbase.api.base.IEssIterator;
import com.essbase.api.datasource.IEssCube;
import com.essbase.api.datasource.IEssOlapServer;
import com.essbase.api.domain.IEssDomain;
import com.essbase.api.metadata.IEssCubeOutline;
import com.essbase.api.metadata.IEssDimension;
import com.essbase.api.metadata.IEssGeneration;
import com.essbase.api.metadata.IEssLevel;
import com.essbase.api.metadata.IEssMember;
import com.essbase.api.session.IEssbase;
 import java.util.ResourceBundle;
 import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
 public class OutlineExtractor {
private static String s_userName = "";
private static String s_password = "";
private static String s_olapSvrName = "";
private static String s_provider = "";
private IEssOlapServer olapSvr = null;
private IEssbase ess = null;
private Document doc;
public OutlineExtractor() {
olapSvr = Connect();
}
 public static void main(String[] args) {
OutlineExtractor outlineExtractor = new OutlineExtractor();
outlineExtractor.ReadOutline("Sample","Basic", true);
outlineExtractor.Disconnect();
}
private IEssOlapServer Connect() {
readProperties();
try {
// Create JAPI instance.
ess = IEssbase.Home.create(IEssbase.JAPI_VERSION);
// Sign On to the Provider
IEssDomain dom = ess.signOn(s_userName, s_password, false, null, s_provider);
IEssOlapServer olapSvr = dom.getOlapServer(s_olapSvrName);
olapSvr.connect();
return olapSvr;
}
catch (EssException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
Disconnect();
return null;
}
}
private void Disconnect(){
//Try to sign off
try {
if (olapSvr != null && olapSvr.isConnected() == true){
olapSvr.disconnect();
}
} catch (EssException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
try {
if (ess != null && ess.isSignedOn() == true){
ess.signOff();
}
} catch (EssException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
}
private static void readProperties() {
ResourceBundle settings = ResourceBundle.getBundle("Essbase");
 s_userName=settings.getString("Common.UserName");
s_password=settings.getString("Common.Password");
s_olapSvrName = settings.getString("Common.ServerName");
s_provider = settings.getString("Common.Provider");
}
public void ReadOutline(String ApplicationName, String DatabaseName, Boolean IncludeAttributes){
IEssCube cube;
try {
cube = olapSvr.getApplication(ApplicationName).getCube(DatabaseName);
readOutline(cube,DatabaseName,IncludeAttributes);
} catch (EssException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
}
private void readOutline(IEssCube cube, String DatabaseName, Boolean IncludeAttributes) throws EssException {
IEssCubeOutline otl = null;
try {
otl = cube.openOutline();
IEssIterator dims = otl.getDimensions();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
DOMImplementation impl = builder.getDOMImplementation();
 doc = impl.createDocument(null,null,null);
Element elementCube = doc.createElement("Cube");
elementCube.setAttribute("ApplicationName", cube.getApplicationName());
elementCube.setAttribute("DatabaseName", DatabaseName);
elementCube.setAttribute("CubeType", cube.getCubeType().stringValue());
doc.appendChild(elementCube);
for (int i = 0; i < dims.getCount(); i++) {
IEssDimension dim = (IEssDimension)dims.getAt(i);
if (IncludeAttributes) {
Element elementDim = doc.createElement("Dimension");
elementDim.setAttribute("DimensionName", dim.getName());
elementDim.setAttribute("Category", dim.getCategory().stringValue());
elementDim.setAttribute("StorageType", dim.getStorageType().stringValue());
elementCube.appendChild(elementDim);
getMembersIterator(dim.getDimensionRootMember(),elementDim);
}
else{
if(dim.getCategory() != IEssDimension.EEssDimensionCategory.ATTRIBUTE && dim.getCategory() != IEssDimension.EEssDimensionCategory.ATTRIBUTE_CALC){
Element elementDim = doc.createElement("Dimension");
elementDim.setAttribute("DimensionName", dim.getName());
elementDim.setAttribute("Category", dim.getCategory().stringValue());
elementDim.setAttribute("StorageType", dim.getStorageType().stringValue());
elementCube.appendChild(elementDim);
getMembersIterator(dim.getDimensionRootMember(),elementDim);
}
}
}
otl.close();
otl = null;
// transform the Document into a String
DOMSource domSource = new DOMSource(doc);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
//transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
java.io.StringWriter sw = new java.io.StringWriter();
StreamResult sr = new StreamResult(sw);
transformer.transform(domSource, sr);
String xml = sw.toString();
System.out.println(xml);
} catch (EssException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
catch (ParserConfigurationException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
catch (TransformerException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
finally {
if (otl != null) {
try {
otl.close();
} catch (EssException e) {
System.out.println(e.getMessage());
e.printStackTrace(System.out);
}
}
}
}
 private void getMembersIterator(IEssMember mbr,Element ParentElement) throws EssException{
Element elementMember = doc.createElement("Member");
elementMember.setAttribute("MemberName", mbr.getName());
elementMember.setAttribute("UniqueName", mbr.getUniqueName());
elementMember.setAttribute("MemberFormula", mbr.getFormula());
elementMember.setAttribute("LevelNumber", String.valueOf(mbr.getLevelNumber()));
elementMember.setAttribute("GenerationNumber", String.valueOf(mbr.getGenerationNumber()));
elementMember.setAttribute("ChildCount", String.valueOf(mbr.getChildCount()));
ParentElement.appendChild(elementMember);
IEssIterator mbrs = mbr.getChildMembers();
for (int i = 0; i < mbrs.getCount(); i++) {
getMembersIterator((IEssMember)mbrs.getAt(i),elementMember);
}
}
 }
Here is what my properties file looks like.
Common.UserName=admin Common.Password=password Common.ServerName=localhost Common.Provider=Embedded
If you complete this lab you may run into a bug with connections. Tim Tow has documented this fix very well… http://timtows-hyperion-blog.blogspot.com/2007/12/essbase-api-error-fix-geeky.html

















