From 80b3f09e847b1af6599f757022f2cf1f03ce691a Mon Sep 17 00:00:00 2001 From: fabio Date: Wed, 20 Jan 2021 14:30:34 +0000 Subject: [PATCH] fixes bug#21436 dev: Valvevir qua: git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@105106 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../dao/hibernate/GenericHibernateDAO.java | 54 ++++++++++++++++++- .../OperadorEmbarcadaHibernateDAO.java | 24 +++++++-- .../OperadorEmbarcadaServicoHibernateDAO.java | 17 +++--- 3 files changed, 83 insertions(+), 12 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/GenericHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/GenericHibernateDAO.java index b2bd8798d..008d4e991 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/GenericHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/GenericHibernateDAO.java @@ -1,15 +1,24 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import java.io.Serializable; +import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.util.Collection; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; +import org.hibernate.Session; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; +import org.hibernate.engine.LoadQueryInfluencers; +import org.hibernate.engine.SessionFactoryImplementor; +import org.hibernate.impl.CriteriaImpl; +import org.hibernate.impl.SessionImpl; +import org.hibernate.loader.OuterJoinLoader; +import org.hibernate.loader.criteria.CriteriaLoader; +import org.hibernate.persister.entity.OuterJoinLoadable; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.rjconsultores.ventaboletos.dao.GenericDAO; @@ -20,7 +29,8 @@ import com.rjconsultores.ventaboletos.dao.GenericDAO; */ @SuppressWarnings("unchecked") public class GenericHibernateDAO extends HibernateDaoSupport implements GenericDAO { - + public long start = System.currentTimeMillis(); + public GenericHibernateDAO() { this.persistentClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } @@ -106,4 +116,46 @@ public class GenericHibernateDAO extends HibernateDa public void suscribirTodos(Collection entidades) { getHibernateTemplate().saveOrUpdateAll(entidades); } + + /* + * Metodo que retorna o sql do criteria passado + * para uso em debug e auxilio nas analises + * */ + public String getCriteriaSql( Criteria c, Session se) { + try { + CriteriaImpl ci = (CriteriaImpl) c; + SessionImpl s = (SessionImpl) se; + SessionFactoryImplementor factory = (SessionFactoryImplementor) s.getSessionFactory(); + String[] implementors = factory.getImplementors(ci.getEntityOrClassName()); + LoadQueryInfluencers lqis = new LoadQueryInfluencers(); + CriteriaLoader loader = new CriteriaLoader((OuterJoinLoadable) factory.getEntityPersister(implementors[0]), factory, ci, implementors[0], lqis); + Field f = OuterJoinLoader.class.getDeclaredField("sql"); + f.setAccessible(true); + String sql = (String) f.get(loader); + return sql; + } catch (Exception e) { + return "exception "+e.getMessage(); + } + } + + /* + * Metodo adicionado para retornar em o tempo de execucao + * de cada metodo chamado, sendo chamado nas implementacoes + * e printado via log.debug, para que possa ser analizado + * qualquer eventual demora na execução + * */ + public String printInfo(String method, long start) { + long milliseconds = System.currentTimeMillis() - start; + long minutes = (milliseconds / 1000) / 60; + long seconds = (milliseconds / 1000) % 60; + + String info = String.format("[%s] %d minutos e %d segundos", method, minutes, seconds); + + if ((minutes + seconds) == 0) { + info = String.format("[%s] %d milissegundos", method, milliseconds); + } + + return info; + } + } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/OperadorEmbarcadaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/OperadorEmbarcadaHibernateDAO.java index d7b7d4326..73de76103 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/OperadorEmbarcadaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/OperadorEmbarcadaHibernateDAO.java @@ -9,6 +9,7 @@ import org.hibernate.criterion.Restrictions; import org.hibernate.transform.AliasToBeanResultTransformer; import org.hibernate.type.IntegerType; import org.hibernate.type.StringType; +import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; @@ -20,7 +21,8 @@ import com.rjconsultores.ventaboletos.entidad.PuntoVentaVO; @Repository("operadorEmbarcadaDAO") @SuppressWarnings("unchecked") public class OperadorEmbarcadaHibernateDAO extends GenericHibernateDAO implements OperadorEmbarcadaDAO { - + private static Logger log = org.slf4j.LoggerFactory.getLogger(OperadorEmbarcadaHibernateDAO.class); + @Autowired public OperadorEmbarcadaHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); @@ -28,32 +30,42 @@ public class OperadorEmbarcadaHibernateDAO extends GenericHibernateDAO buscarTodosOperadores() { + start = System.currentTimeMillis(); Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); - return c.list(); + List retorno = c.list(); + log.debug( printInfo("buscarOperadorEmbarcadaPorUsuario", start)); + return retorno; } @Override public OperadorEmbarcada burcarOperadorPorId(Long operadorEmbarcadaID) { + start = System.currentTimeMillis(); Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("operadorEmbarcadaId", operadorEmbarcadaID)); - return (OperadorEmbarcada) c.uniqueResult(); + OperadorEmbarcada retorno = (OperadorEmbarcada) c.uniqueResult(); + log.debug( printInfo("burcarOperadorPorId", start)); + return retorno; } @Override public OperadorEmbarcada buscarOperadorEmbarcadaPorUsuario(Integer idUsuario) { + start = System.currentTimeMillis(); Criteria c = getSession().createCriteria(getPersistentClass()); c.add(Restrictions.eq("activo", Boolean.TRUE)); c.add(Restrictions.eq("usuario.usuarioId", idUsuario)); - - return (OperadorEmbarcada) c.uniqueResult(); + + OperadorEmbarcada op = (OperadorEmbarcada) c.uniqueResult(); + log.debug( printInfo("buscarOperadorEmbarcadaPorUsuario", start)); + return op; } @Override public PuntoVentaVO getPuntoVentaVO(Integer operador) { + start = System.currentTimeMillis(); StringBuilder sb = new StringBuilder(); sb.append(" SELECT "); sb.append(" PV.PUNTOVENTA_ID AS puntoventaId, "); @@ -73,6 +85,8 @@ public class OperadorEmbarcadaHibernateDAO extends GenericHibernateDAO corridasString = new ArrayList(); @@ -327,12 +329,13 @@ public class OperadorEmbarcadaServicoHibernateDAO extends GenericHibernateDAO obterListaTramo( String chave, Integer rutaId ) throws Exception{ - + start = System.currentTimeMillis(); StringBuilder sb = new StringBuilder(); sb.append(" SELECT"); @@ -340,7 +343,7 @@ public class OperadorEmbarcadaServicoHibernateDAO extends GenericHibernateDAO list = query.list(); + log.debug( printInfo("obterListaTramo", start)); + return list; }