public interface PerfStatistics { String getOpenJPAStatistics(); String getEntityClasses(); } @Stateless public class PerfStatisticsImpl implements PerfStatistics { @Inject private EntityManagerJPAFactory entityManagerFactory; private OpenJPAEntityManagerFactory openJPAEntityManagerFactory; @PostConstruct public void init() { openJPAEntityManagerFactory = OpenJPAPersistence.cast(entityManagerFactory.getEntityManager().getEntityManagerFactory()); } @Override public String getOpenJPAStatistics() { StoreCache cache = openJPAEntityManagerFactory.getStoreCache(); CacheStatistics st = cache.getStatistics(); return String.format("{ \"ReadCount\": %d, \"HitCount\": %d, \"WriteCount\": %d }", st.getReadCount(), st.getHitCount(), st.getWriteCount()); } @Override public String getEntityClasses() { StringBuilder res = new StringBuilder("{ \"Entities\": ["); EntityManagerFactory emf = openJPAEntityManagerFactory; EntityManager em = emf.createEntityManager(); Cache cache = emf.getCache(); for(EntityType entityType : em.getMetamodel().getEntities()) { Class cls = entityType.getBindableJavaType(); res.append(String.format("\"%s\", ", cls.getCanonicalName())); } res.append("\"\"], \"Cache\": \""); res.append(cache.toString()); res.append("\" }"); return res.toString(); } }