- So you can try it on your own outlines; and
- To make more Essbase Java API examples available online.
- Make sure you have a Java JDK installed on your system and referenced with the JAVA_HOME environment variable.
- Make sure you have a backup of your Essbase outline (just in case).
- Create two text files; name on file 'EssOutlineOpenTimingsTest.cmd' and the other 'EssOutlineOpenTimingsTest.java'.
- Copy the following to code to the EssOutlineOpenTimingsTest.cmd (and I apologize in advance for the small size of the code; I had to shrink it for the blogger software to properly display all of the code):
@echo off rem Change the directory below to point to your jar file set CLASSPATH=%CLASSPATH% ;C:\Hyperion\products\Essbase\aps\lib\ess_japi.jar; echo Compiling ... "%JAVA_HOME%\bin\javac" *.java -d . echo Running test class ... echo . "%JAVA_HOME%\bin\java" -ms128m -mx512m EssOutlineOpenTimingsTest echo . echo . echo Done ... pause
- Copy the following code to the EssOutlineOpenTimingsTest.java file:
import com.essbase.api.base.*; import com.essbase.api.session.*; import com.essbase.api.datasource.*; import com.essbase.api.domain.*; import com.essbase.api.metadata.*; import java.text.DecimalFormat; public class EssOutlineOpenTimingsTest { // TODO: CHANGE THE VARIABLES BELOW TO USE YOUR INFORMATION private static String _user = "timt"; private static String _password = "essbase"; private static String _server = "mustang"; private static String _url = "http://mustang:13080/aps/JAPI"; public static void main(String[] args) { IEssbase ess = null; IEssOlapServer server = null; try { // create api instance ess = IEssbase.Home.create(IEssbase.JAPI_VERSION); // signon to the domain IEssDomain dom = ess.signOn (_user, _password, false, null, _url); // connect to the server server = (IEssOlapServer)dom.getOlapServer(_server); server.connect(); // print the column headers System.out.println( "Try #|Application|Cubename|Milliseconds|Filesize (Mb)|Members" ); // TODO: CHANGE THE NUMBER OF LOOPS BELOW AS DESIRED // open each outline 3 times in a loop for (int i = 1; i <= 3; i++) { // TODO: CHANGE THE APPLICATIONS/DATABASES BELOW, // AND ADD/DELETE OPENOUTLINE CALLS, AS DESIRED openOutline(i, server.getApplication("Sample") .getCube("Basic")); openOutline(i, server.getApplication("ASOSamp") .getCube("Sample")); openOutline(i, server.getApplication("Big1") .getCube("Big1")); openOutline(i, server.getApplication("BigASO") .getCube("BigASO")); openOutline(i, server.getApplication("BigASO_C") .getCube("BigASO_C")); openOutline(i, server.getApplication("zzz") .getCube("zzz")); openOutline(i, server.getApplication("zzz_C") .getCube("zzz_C")); } } catch (EssException e) { System.out.println("Error: " + e.getMessage()); } finally { try { if (server != null && server.isConnected() == true) server.disconnect(); } catch (EssException e) { System.out.println("Error: " + e.getMessage()); } try { if (ess != null && ess.isSignedOn() == true) ess.signOff(); } catch (EssException e) { System.out.println("Error: " + e.getMessage()); } } } static void openOutline(int tryNumber, IEssCube cube) throws EssException { IEssCubeOutline outline = null; try { // stop/start the cubes to get a fair timing try { cube.getApplication().stop(); } catch (EssException e) { // fails if not started, so just ignore } // start cube cube.start(); // let the machine catch it's breath try { Thread.sleep(3000); } catch(InterruptedException e) { } // get the start time long startMillis = System.currentTimeMillis(); // open the outline outline = cube.openOutline(); // compute the time to open long totalMillis = System.currentTimeMillis() - startMillis; // declare variables for the output string int memberCount = 0; String filesize = ""; if (tryNumber == 1) { // get the dimensions IEssIterator dims = outline.getDimensions(); // loop the dimensions for (int i = 0; i < dims.getCount(); i++) { // get the dimension IEssDimension dim = (IEssDimension)dims.getAt(i); // count the members memberCount += dim.getDeclaredSize(); } // get the size of the outline file byte[] bytes = cube.copyOlapFileObjectFromServer( IEssOlapFileObject.TYPE_OUTLINE, cube.getName(), false); // count the bytes filesize = new DecimalFormat("0.0") .format(bytes.length / (1024 * 1024)); } // print the result System.out.println(tryNumber + "|" + cube.getApplication().getName() + "|" + cube.getName() + "|" + totalMillis + "|" + filesize + "|" + memberCount); } finally { // cleanup if (outline != null && outline.isOpen()) outline.close(); } } }
- Modify the parameters in the Java code were noted. These parameters will set the code to user your server, username, password and databases.
- Save both files, then double click the cmd file to run.
Let me know your results!