Request your free trial!


Fill out the two fields below and we will contact you to schedule your free trial.

Thank you! We will contact you to schedule your trial.

Support for EJB/JPA (EclipseLink)

29/12/2016

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 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).

 

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.

 

Growing supports for more technologies

In addition to the standard ADF stack (ADF BC, ADF Model, ADF Controller, ADF Faces) The ADF Performance Monitor supports more technologies around the ADF landscape:

 

Share this article on social media!