ADF Performance Monitor: Support for EJB/JPA (EclipseLink)

Not all Oracle ADF projects are built with ADF Business Components (ADF BC). Some organizations prefer to use EJB/JPA (EclipseLink) instead of ADF BC. The EclipseLink JPA provides developers with a standards based Object-Relational persistence solution. The application still reflects the Model-View-Controller architecture. In this case the model is provided by EJB Components, while the view and controller are provided by the ADF framework. In addition to the standard ADF stack (ADF BC, ADF Model, ADF Controller, ADF Faces) the ADF Performance Monitor supports more technologies in the ADF landscape; like EJB/JPA (implemented with EclipseLink), POJO Java based DataControls, JAX-WS webservices, custom instrumentation, e.g.. This blog describes how the performance and health of EJB/JPA based ADF applications can be monitored and analyzed. The new features include EJB specific executions that are visible in ADF request callstacks of the monitor (a kind of ADF stack trace that shows where the request execution time is spent):

EJB/JPA DataControl operations/methods

Runtime invoked methods on EJB SessionBeans

SQL queries and DML actions executed to the database

EJB/JPA specific executions in ADF Callstacks

In the following examples ADF callstacks are shown of the ADF Performance Monitor of an HR application based on EJB/JPA. I reproduced some ‘slow’ queries with this application. In the call stacks, when we click on an execution, detail runtime information is shown in a popup. Like method name, SessionBean- or EntityBean name, parameters, e.g. Also the SQL query executed against the database (SQL link) as well as the EclipseLink specific query is visible.

1 -In this case, apparently there were two SQL queries executed from EJB/JPA that took more than 1.5 seconds to execute (shown in yellow in the request percentage gauges). Also we can inspect the performance and other (runtime) information of methods executed from the DataControl; employeesFindAll(), initDataCollection() . We can see that the method queryByRange() was executed from the oracle.model.HRFacadeBean (an EJB SessionBean).

The runtime execution of select count(o) from Employees o,0,0 (EclipseLink specific query) took 1524 milliseconds. The ‘translated’ query against the Oracle database was SELECT COUNT(EMPLOYEE_ID) FROM EMPLOYEES and this took 1523 milliseconds.

Now we can investigate the root cause of these slow EJB/JPA database executions and troubleshoot it. In the same way production problems can be investigated and resolved.

2 – A call stack example of an insert (persist) action in EJB/JPA (and a UNIQUE key violation exception). We can inspect execution details by clicking for example on the dataControl method persistDepartments() , and inspect the INSERT statement by clicking on the SQL link:

3- Example of a delete action in EJB/JPA:

In the Configuration settings of the ADF Performance Monitor, a parameter can be set whether the monitor should log the SQL and DML statements of ADF Business Components or EJB/JPA or not. If yes, a threshold can be set when it should be collected. For example all SQL queries and DML statement over five seconds (5000 milliseconds):

Also, at the main dashboard the database time executed from EJB/JPA is visible in the graph at the right bottom. It shows for each time range (month/week/day/hour/5 minute) the layer where the execution time is spent. It shows the time spent in the database, webservice, application server, and network/browser load time. At the top right graph (hour overview in this case) we can see some red indicating some very slow requests. In the graph at the right bottom we can now explain what happened; the time was spent in the database – in this case slow queries executed from the ADF application by EJB/JPA.

About Author

Frank Houweling is an Oracle ADF and Java specialist with AMIS (The Netherlands). He focuses mainly on Oracle Fusion ADF, Java Enterprise development and performance management. During the past years he has been requested several times as troubleshooter of ADF projects with bad performance. As such he has been performing performance analysis, bottleneck detection and developing mitigating solutions based on these analysis. He is also the creator of the AMIS ADF Performance Monitor, an advanced monitor that can identify, report and help solve performance bottlenecks in ADF applications.