You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
As per section 2.1.3 of JPA/Hibernate book, when enabling Hibernate statistics, Hibernate will expose a number of metrics that are useful when tuning a running system. This can be extremely helpful in trouble-shooting and performance analysis situations.
Add the following line to the properties section of your persistence.xml:
<property name="hibernate.generate_statistics" value="true"/>
Create HibernateUtils class:
import org.hibernate.stat.Statistics;
import javax.persistence.EntityManager;
import org.jboss.seam.persistence.HibernateSessionProxy;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.In;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.AutoCreate;
@Name("hibernateUtils")
@AutoCreate
public class HibernateUtils {
@In EntityManager entityManager;
public Statistics getStatistics() {
return ((HibernateSessionProxy)entityManager.getDelegate()).getSessionFactory().getStatistics();
}
}
Inject HibernateUtils into your backing bean and call logSummary() method:
HotelBookingAction:
@Stateful
@Name("hotelBooking")
public class HotelBookingAction implements HotelBooking {
@In
private EntityManager entityManager;
@In
private HibernateUtils hibernateUtils;
@In(required=false)
@Out
private Hotel hotel;
@Begin
public void selectHotel(Hotel selectedHotel)
{
hotel = entityManager.merge(selectedHotel);
hibernateUtils.getStatistics().logSummary();
}
}
output:
0:01,205 INFO [StatisticsImpl] Logging statistics.... 0:01,206 INFO [StatisticsImpl] start time: 1240643960318 0:01,207 INFO [StatisticsImpl] sessions opened: 5 0:01,207 INFO [StatisticsImpl] sessions closed: 3 0:01,208 INFO [StatisticsImpl] transactions: 3 0:01,209 INFO [StatisticsImpl] successful transactions: 3 0:01,210 INFO [StatisticsImpl] optimistic lock failures: 0 0:01,211 INFO [StatisticsImpl] flushes: 2 0:01,213 INFO [StatisticsImpl] connections obtained: 4 0:01,214 INFO [StatisticsImpl] statements prepared: 4 0:01,215 INFO [StatisticsImpl] statements closed: 4 0:01,216 INFO [StatisticsImpl] second level cache puts: 0 0:01,217 INFO [StatisticsImpl] second level cache hits: 0 0:01,217 INFO [StatisticsImpl] second level cache misses: 0 0:01,218 INFO [StatisticsImpl] entities loaded: 13 0:01,219 INFO [StatisticsImpl] entities updated: 0 0:01,220 INFO [StatisticsImpl] entities inserted: 0 0:01,221 INFO [StatisticsImpl] entities deleted: 0 0:01,222 INFO [StatisticsImpl] entities fetched (minimize this): 0 0:01,223 INFO [StatisticsImpl] collections loaded: 0 0:01,224 INFO [StatisticsImpl] collections updated: 0 0:01,225 INFO [StatisticsImpl] collections removed: 0 0:01,226 INFO [StatisticsImpl] collections recreated: 0 0:01,228 INFO [StatisticsImpl] collections fetched (minimize this): 0 0:01,229 INFO [StatisticsImpl] queries executed to database: 3 0:01,229 INFO [StatisticsImpl] query cache puts: 0 0:01,231 INFO [StatisticsImpl] query cache hits: 0 0:01,231 INFO [StatisticsImpl] query cache misses: 0 0:01,233 INFO [StatisticsImpl] max query time: 9ms
NOTE: make sure the EntityManager instance name and case matches the value of the name attribute for the SMPC tag in components.xml:
<persistence:managed-persistence-context name="entityManager"
auto-create="true"
persistence-unit-jndi-name="java:/fooEntityManagerFactory"/>
References:
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/stat/Statistics.html
http://www.seamframework.org/Community/HibernateStatisticsAndJPA