- 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!