Skip to main content

ADF performance results

Doing a quick set of performance tests to just confirm a few things I have experienced with ADF. (I will update this post with new info after each test). All tests done on an XE db

Test 1) Read Only VO vs Updatable vs AM query vs SQL based VO - Scrollable 1000 batches of 1000
+- 300000 results

Read only vo query results: 203,31,47,31,31,47
AM Query timing  31,31,15,15,31,31
SQL timing:78,15,16,0,15,16
VO timing:11653,11919,9812,9485,9781,9734

So definitely a case for not using updateable VO's everywhere.

Test 2) Read Only VO vs Updatable vs SQL based VO - Range Paging 1000 batches of 1000
+- 300000 results

Read only vo query results: 125,47,63,32

SQL timing: 62,32,32,31
VO timing:125, 94, 47, 32

Test 3) Read Only VO vs Updatable vs SQL based VO - Range Paging FIRST_ROWS 1000 batches of 1000
+- 300000 results

Read only vo query results: 172,94,63,31

SQL timing: 78,62,15,15
VO timing:125, 78, 47, 47


NOTE: These are small localized tests to show some performance considerations and one size does not fit all.

Comments

  1. A point to consider though is that an updateable VO based on EO will cache the results in the EO cache - so subsequent queries on the same set of data might result in faster performance. In addition the EO cache can be shared among several VOs. You should be checking this too before making a call.

    ReplyDelete
  2. Yup thanks for the input, it is more an example of variance of changing a few tuning parameters as it stands. Will be expanding this with more results and scenarios as I go along.

    ReplyDelete

Post a Comment

Popular posts from this blog

ADF sort of generic screen for tables with the same structure

We have a couple (about a hundred) of tables with the same structure (Code, Description, Create Date, Update Date). So I wanted to do something simple so that I did not have to create all these screens 1) EO   I created the EO based on one of the tables I had that had the above columns. I then Added a transient attribute called table name to my EO based on a groovy expression. (the expression needs to change as I am reading web tier stuff from the model layer but I will fix this later) I then generated a java class for my EO. And added the following overriden method to my newly created java class. protected StringBuffer buildDMLStatement(int i, AttributeDefImpl[] attributeDefImpl,   AttributeDefImpl[] attributeDefImpl2, AttributeDefImpl[] attributeDefImpl3, boolean b) {   StringBuffer statement = super.buildDMLStatement(   i, attributeDefImpl, attributeDefImpl2, attributeDefImpl3, b); return new StringBuffer(StringUtils.replace(statement.to...

Util code

public static MethodExpression getMethodExpression( String expr, Class returnType, Class[] argTypes){ FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); ExpressionFactory elFactory = fc.getApplication().getExpressionFactory(); return elFactory.createMethodExpression( elctx, expr, returnType, argTypes); } public static javax.faces.el.MethodBinding getMethodBinding( String expr, Class[] argTypes){ FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); return fc.getApplication().createMethodBinding(expr, argTypes); } SetPropertyListener listener = new SetPropertyListener( ActionEvent.class.getName()); listener.setFrom(link.getRoute()); listener.setValueExpression("to", JSFUtils.getValueExpression("#{pageFlowScope.route}", String.class)); action.addActionListener(listener); AdfFacesContext.getCurrentInstance().getPageFlowScope() .put("route", lin...

MANIFEST.MF merge JDeveloper for an executable jar

Goto your project > properties. Then click on deployment in the menu. Edit or add a jar deployment profile. Fill in the details under jar options (select Include manifest and give it a main class name) Also remember that the merge functionality only works with a BLANK line at the end of the merge file. REALLY this caught me. My merge file contents: Class-Path: commons-codec-1.3.jar [...empty line here CRLF...]