<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> <%@page import="org.springframework.web.context.support.ContextExposingHttpServletRequest"%> <%@page import="javax.persistence.EntityManagerFactory"%> <%@page import="org.hibernate.Session"%> <%@page import="javax.persistence.EntityManager"%> <%@page import="org.hibernate.stat.Statistics"%> <%@page import="org.springframework.web.context.support.WebApplicationContextUtils"%> <%@page import="org.springframework.context.ApplicationContext"%> <%@page import="java.text.SimpleDateFormat"%> <%@page import="org.hibernate.hql.QueryTranslator"%> <%@page import="org.hibernate.hql.ast.ASTQueryTranslatorFactory"%> <%@page import="org.hibernate.engine.SessionFactoryImplementor"%> <%@page import="org.hibernate.hql.QueryTranslatorFactory"%> <%@page import="org.hibernate.SessionFactory"%> <%@page import="java.util.Date"%> <%@page import="java.util.List"%> <%@page import="java.util.ArrayList"%> <%@page import="org.hibernate.stat.SecondLevelCacheStatistics"%> <%@page import="org.hibernate.stat.CollectionStatistics"%> <%@page import="org.hibernate.stat.EntityStatistics"%> <%@page import="java.text.Collator"%> <%@page import="java.util.TreeMap"%> <%@page import="java.util.Collections"%> <%@page import="org.hibernate.stat.QueryStatistics"%> <%@page import="java.util.Map"%> <%! static Map queryStatistics = Collections.synchronizedMap( new TreeMap(Collator.getInstance())); static Map entityStatistics = Collections.synchronizedMap( new TreeMap(Collator.getInstance())); static Map collectionStatistics = Collections.synchronizedMap( new TreeMap(Collator.getInstance())); static Map secondLevelCacheStatistics = Collections.synchronizedMap( new TreeMap( Collator.getInstance())); static List generalStatistics = Collections.synchronizedList( new ArrayList(18)); static { for (int i = 0; i < 9; i++) { generalStatistics.add(new Long(-1)); } } static Date lastUpdate; static Date activation; static Date deactivation; public static class HqlToSqlTranslator { public String toSql(SessionFactory sessionFactory, String hqlQueryText) { if (hqlQueryText != null) { final QueryTranslatorFactory ast = new ASTQueryTranslatorFactory(); final SessionFactoryImplementor factory = (SessionFactoryImplementor) sessionFactory; final QueryTranslator newQueryTranslator = ast.createQueryTranslator( hqlQueryText, hqlQueryText, Collections.EMPTY_MAP, factory); try { newQueryTranslator.compile(Collections.EMPTY_MAP, false); return newQueryTranslator.getSQLString(); } catch (Throwable t) { return hqlQueryText; } } return null; } } static HqlToSqlTranslator translator = new HqlToSqlTranslator(); public static class StringUtils { public static final String format(final Date date) { if (date == null) { return null; } final SimpleDateFormat sdf = new SimpleDateFormat( "dd.MM.yy HH:mm:ss"); return sdf.format(date); } public static final String formatTime(final long millis) { Date date = new Date(millis); return format(date); } } %> Hibernate statistics

<% final Statistics statistics = sessionFactory.getStatistics(); final String action = request.getParameter("do"); final StringBuilder info = new StringBuilder(512); if ("activate".equals(action) && !statistics.isStatisticsEnabled()) { statistics.setStatisticsEnabled(true); activation = new Date(); info.append("Statistics enabled\n"); } else if ("deactivate".equals(action) && statistics.isStatisticsEnabled()) { statistics.setStatisticsEnabled(false); deactivation = new Date(); info.append("Statistics disabled\n"); } else if ("clear".equals(action)) { activation = null; deactivation = null; statistics.clear(); generalStatistics.set(0, new Long(0)); generalStatistics.set(1, new Long(0)); generalStatistics.set(2, new Long(0)); generalStatistics.set(3, new Long(0)); generalStatistics.set(4, new Long(0)); generalStatistics.set(5, new Long(0)); generalStatistics.set(6, new Long(0)); generalStatistics.set(7, new Long(0)); generalStatistics.set(8, new Long(0)); queryStatistics.clear(); entityStatistics.clear(); collectionStatistics.clear(); secondLevelCacheStatistics.clear(); info.append("Statistics cleared\n"); } boolean active = statistics.isStatisticsEnabled(); if (info.length() > 0) { %>

<% }%>

Reload

"> <%=(active ? "DEACTIVATE" : "ACTIVATE")%> | CLEAR <% if (active) { lastUpdate = new Date(); String[] names; generalStatistics.set(0, statistics.getConnectCount()); generalStatistics.set(1, statistics.getFlushCount()); generalStatistics.set(2, statistics. getPrepareStatementCount()); generalStatistics.set(3, statistics. getCloseStatementCount()); generalStatistics.set(4, statistics.getSessionCloseCount()); generalStatistics.set(5, statistics.getSessionOpenCount()); generalStatistics.set(6, statistics.getTransactionCount()); generalStatistics.set(7, statistics. getSuccessfulTransactionCount()); generalStatistics.set(8, statistics. getOptimisticFailureCount()); queryStatistics.clear(); names = statistics.getQueries(); if (names != null && names.length > 0) { for (int i = 0; i < names.length; i++) { queryStatistics.put(names[i], statistics.getQueryStatistics( names[i])); } } entityStatistics.clear(); names = statistics.getEntityNames(); if (names != null && names.length > 0) { for (int i = 0; i < names.length; i++) { entityStatistics.put(names[i], statistics.getEntityStatistics( names[i])); } } collectionStatistics.clear(); names = statistics.getCollectionRoleNames(); if (names != null && names.length > 0) { for (int i = 0; i < names.length; i++) { collectionStatistics.put(names[i], statistics.getCollectionStatistics( names[i])); } } secondLevelCacheStatistics.clear(); names = statistics.getSecondLevelCacheRegionNames(); if (names != null && names.length > 0) { for (int i = 0; i < names.length; i++) { secondLevelCacheStatistics.put(names[i], statistics.getSecondLevelCacheStatistics( names[i])); } } } %>

Last update: <%=(lastUpdate != null ? StringUtils.format(lastUpdate) : "none")%>
Activation: <%=(activation != null ? StringUtils.format(activation) : "none")%>
Deactivation: <%=(deactivation != null ? StringUtils.format(deactivation) : "none")%>
Active duration: <%=(activation != null ? StringUtils.formatTime((deactivation != null ? deactivation.getTime() : new Date().getTime()) - activation.getTime()) : "none")%>

<% boolean hasGeneral = false; for (int i = 0; i < 9; i++) { if (generalStatistics.get(i).longValue() > -1) { hasGeneral = true; break; } } if (hasGeneral) { %>
Connects <%=generalStatistics.get(0)%>
Flushes <%=generalStatistics.get(1)%>
Prepare statements <%=generalStatistics.get(2)%>
Close statements <%=generalStatistics.get(3)%>
Session opens <%=generalStatistics.get(5)%>
Session closes <%=generalStatistics.get(4)%>
Total Transactions <%=generalStatistics.get(6)%>
Successfull Transactions <%=generalStatistics.get(7)%>
Optimistic failures <%=generalStatistics.get(8)%>

<% }%> <% if (queryStatistics.size() > 0) { %> <% QueryStatistics queryStats; boolean odd = true; for (String query : queryStatistics.keySet()) { queryStats = queryStatistics.get(query); %> "> <% odd = !odd; } %>
Query statistics
HQL Query SQL Query Calls Total rowcount Max dur. Min dur. Avg dur. Total dur. Cache hits Cache miss Cache put
<%=query%> <%=translator.toSql(sessionFactory, query)%> <%=queryStats.getExecutionCount()%> <%=queryStats.getExecutionRowCount()%> <%=queryStats.getExecutionMaxTime()%> <%=queryStats.getExecutionMinTime()%> <%=queryStats.getExecutionAvgTime()%> <%=queryStats.getExecutionAvgTime() * queryStats. getExecutionCount()%> <%=queryStats.getCacheHitCount()%> <%=queryStats.getCacheMissCount()%> <%=queryStats.getCachePutCount()%>

<% } if (entityStatistics.size() > 0) { %> <% EntityStatistics entityStats; boolean odd = true; for (String entity : entityStatistics.keySet()) { entityStats = entityStatistics.get( entity); %> "> <% odd = !odd; } %>
Entity statistics
Entity Loads Fetches Inserts Updates Deletes Optimistic failures
<%=entity%> <%=entityStats.getLoadCount()%> <%=entityStats.getFetchCount()%> <%=entityStats.getInsertCount()%> <%=entityStats.getUpdateCount()%> <%=entityStats.getDeleteCount()%> <%=entityStats.getOptimisticFailureCount()%>

<% } if (collectionStatistics.size() > 0) { %> <% CollectionStatistics collectionStats; boolean odd = true; for (String collection : collectionStatistics.keySet()) { collectionStats = collectionStatistics. get(collection); %> "> <% odd = !odd; } %>
Collection statistics
Role Loads Fetches Updates Recreate Remove
<%=collection%> <%=collectionStats.getLoadCount()%> <%=collectionStats.getFetchCount()%> <%=collectionStats.getUpdateCount()%> <%=collectionStats.getRecreateCount()%> <%=collectionStats.getRemoveCount()%>

<% } if (secondLevelCacheStatistics.size() > 0) { long totalSizeInMemory = 0; %> <% SecondLevelCacheStatistics cacheStats; boolean odd = true; for (String cache : secondLevelCacheStatistics.keySet()) { cacheStats = secondLevelCacheStatistics. get(cache); totalSizeInMemory += cacheStats. getSizeInMemory(); %> "> <% odd = !odd; } %>
2nd level cache statistics
Regionname Puts Hits Misses Elements in memory Size in memory Elements on disk
<%=cache%> <%=cacheStats.getPutCount()%> <%=cacheStats.getHitCount()%> <%=cacheStats.getMissCount()%> <%=cacheStats.getElementCountInMemory()%> <%=cacheStats.getSizeInMemory()%> <%=cacheStats.getElementCountOnDisk()%>
  <%=totalSizeInMemory%>  

<% }%>