ADF Business Components Performance Tuning

ADF Business Components Performance Tuning

July 7, 2015
frontpage, Oracle ADF

In most of the ADF outsourced projects we are developing, we need to tune the ADF application for best
performance. We do this by tuning the AppModule or the View Objects.

Application Module Tuning

When tuning the Application Module, you need to have in mind the estimated number of concurrent users. In this example we suppose this number is 75.

The Application Module tuning is as follow:

2015-07-07 14_02_51-ADF Business Components Performance Tuning (1).pdf - Google Drive

1. Initial Pool Size = 8 (number of AM instances created on first ever access, recommended to be 10% more
than estimated number of concurrent users)

2. Maximum Pool Size = 100 (number of maximum AM instances pool can create, recommended to be 20%-30% more than initial pool size)

3. Referenced Pool Size = 75 (number of active AM instances, recommended to be the same as estimated number of concurrent users – to avoid frequent passivation/activation)

4. Minimum Available Size = 5 (when set to 0, allows to release all AM instances after an idle timeout, this helps to release reserved database connections as well. Is set to 0 for tests in stress environment, in your system you may set it to a higher value, but less than referenced pool size)

5. Maximum Available Size = 25 (maximum number of AM instances after pool clean-up)

6. Idle Instance Timeout = 600 (AM instance is considered inactive after 10 minutes of inactivity, this if for the stress test. In your system, you would set it something close to Web session timeout – to prevent
frequent passivation/activation)

7. Pool Pooling Interval = 600 (AM pool is cleaned every 10 minutes)

Views Performance Tuning

In order to optimize data loading, we need to tune all View objects used to display UI tables, lists or LOVs.

For example, this view is used to display ADF table with scrollPolicy=”page” and iterator range size of 20 rows. With the following setup the View will fetch 20 rows at once from the database and load the page iterator with 20 rows at once.

2015-07-07 14_29_01-ADF Business Components Performance Tuning (1).pdf - Google Drive

These best practices are taken from official Oracle documentation and also AndrejusBaranovski’s official blog. For further details on how to create stress test and additionally optimize the settings you can refer to: Stress Testing Oracle ADF BC Applications – Passivation and Activation.

What would be your approach? Share your experience and questions in the comments below.

Todor Gigilev

Having entrepreneurial and business knowledge, I am eager to help innovative companies and startups to build their sales strategy and business model, improve their value proposition and design and develop their product. If you want a software project delivered, you can message me and I will make sure to do my best to propose the best solution. My main expertise is in the Oracle Fusion Middleware stack - I have been heavily involved in actual development, consulting and delivery of Webcenter, ADF, SOA Suite, BPM and Java EE solutions.

More Posts - Website

Follow Me:
TwitterLinkedInGoogle Plus

Do you want more great blogs like this?

Subscribe for Dreamix Blog now!

  • Can you please comment based on your production experience with ADF Application Module Pooling tunnings – how many users do you accommodate per Managed Server?
    How much RAM memory do you allocate per Managed Server?
    What is the maximum number of connections consumed per managed server?
    What is the maximum number of application module instances in the pool, per managed server?


  • Florin, thanks for your post. The questions are indeed relevant. Todor will answer at the first opportunity. Do you work with ADF or you are Oracle enthusiast?

  • Kiran

    Please add Datasource defined in weblogic server tuning parameter info as well.

    Or let is know how many number of connection you have defined in Datasource and what is Inactive Connection Timeout value.

  • Hi Florin and Kiran and thank you for your kind questions.

    I will skip the part saying every tuning may vary greatly and depends on the application architecutre – e.g. number of AppModules, usage of shared AppModule instances, size of BOs and fetches or weather you store objects in session or other scopes. We’ve seen different space allocation based on GarbageCollection policy and type of JVM (Jrockit or Hotspot) as well.

    At the current implementation we have 2 managed servers that our Weblogic administration team setuped. On each of these we have 1 ADF application with allocated memory of 3GB and 2GB respectively. The bigger one has caching of objects in the application scope (SAP reports and excel sheets) that are kept for parsing, thus taking bit more extra space.

    The way we determine what size of DatasourceConnection is via load test. Our DevOps guys make JMeter test (Andreus Baranovski has outlined the process quite well) and then execute the test with the expected number of concurrent users. Next they check what was the maximum number of Datasource connections during the stress test (let’s say 100). This number is set as an minimum capacity and 150 will be set as maximum capacity. I would always recommend to put a valid maximum capacity, since you want to get notified when you reach the limit and check if there are any stuck connections or other problems.

    About inactive connection timeout – the recommendations that we follow is your Session Timeout + several seconds. The idea behind this is to release the connections once a user session has expired.

    Hope to hear your comments on this,

    • Hi Todor,

      This all sounds great, but you were not answering to all my questions:

      How many users do you accommodate per Managed Server?
      What is the maximum number of connections consumed per managed server?
      What is the maximum number of application module instances in the pool, per managed server?

      I am interested on your production experiences alone. Do you have this numbers?

  • Alfredo

    thanks Todor! but i have a question with initial pool size. if there are 75 currents users, the initial pool size should be 75+10%, right? aproximately 83 or 85. in your image you put 8 value in initial pool size, why? And I have 4 managed servers, is the same configuration? thanks