Criar um MAP, seria interessante?

6 respostas
E

Pessoal

Seria interessante criar um MAP nesta rotina,???

executo a rotina abaixo

Set<Analise> analisesConsultadas = analiseService
				.buscarAnalisesPadraoPorMatriz(matriz);
************************************* retorna 1043 linhas				
		for (Analise analise : analisesConsultadas) {
			
			
		       AnaliseContratada analiseContratada = new AnaliseContratada(analise);			
				
			AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(
					itemAtual, analiseContratada);			
			this.todasAnalises.add(analiseItem);
			
		}

Devido a demora aproximadamente 8 segundos -na rotina abaixo - devido ao 1043 registro que achou (analiseService.buscarAnalisesPadraoPorMatriz(matriz):wink: :

AnaliseItem analiseItem = AnaliseItemHelper.criarAnaliseItem(
					itemAtual, analiseContratada);

Seria interessante criar um MAP nesta rotina,???

*****************************************************AnaliseServiceBean  
  
public class AnaliseServiceBean implements AnaliseServiceLocal {  
  
    @PersistenceContext(unitName = "lims-pu")  
    EntityManager em;  
  
    @EJB(name = "ExecucaoServiceBean/local")  
    private ExecucaoServiceLocal resultadoService;  
  
    @SuppressWarnings("unchecked")  
    public Set<Analise> buscarAnalisesPadraoPorMatriz(Matriz matriz) {  
        StringBuffer jpql = new StringBuffer();  
        jpql.append("select a ");  
        jpql.append("from Analise a ");  
        jpql.append("where a.padrao = true ");  
        jpql.append(" and a.matriz = :matriz ");  
  
        Query query = em.createQuery(jpql.toString());  
        query.setParameter("matriz", matriz);  
        query.setHint("org.hibernate.cacheable", true);  
  
        Set<Analise> analises = new HashSet<Analise>(query.getResultList());  
        return analises;  
    }  
  
***************************************************** AnaliseItemHelper  
  
public class AnaliseItemHelper {  
  
  
    public static AnaliseItem criarAnaliseItem(ItemOrcamento itemOrcamento,  
            AnaliseContratada analiseContratada) {  
        return new AnaliseItem(analiseContratada, itemOrcamento, getService()  
                .buscarMetodosPorEnsaioMatriz(analiseContratada.getEnsaio(),  
                        analiseContratada.getMatriz()));  
    }  
      
      
      
*****************************************************  ImportadorServiceBean
public class ImportadorServiceBean implements ImportadorServiceLocal {  
  
    @PersistenceContext(unitName = "lims-pu")  
    private EntityManager em;  
  
    @SuppressWarnings("unchecked")  
    public Set<Metodo> buscarMetodosPorEnsaioMatriz(Ensaio ensaio, Matriz matriz) {  
        StringBuilder jpql = new StringBuilder("select a.metodo ");  
        jpql.append("from Analise a ");  
        jpql.append("where a.ensaio = :ensaio ");  
        jpql.append("and a.matriz = :matriz ");  
  
        Query query = em.createQuery(jpql.toString());  
        query.setParameter("ensaio", ensaio);  
        query.setParameter("matriz", matriz);  
        return new HashSet<Metodo>(query.getResultList());  
    }

6 Respostas

A

Mas qual seria o papel do Map nesse caso?

Estava olhando seu código, não sei se entendi bem a lógica.
Você vai na tabela Analise e pega todos registros de uma determinada matriz.
Depois para cada registro retornado, faz um novo select na mesma tabela??

Rodrigo_Sasaki

um Map pra que ?

E

Para armazenar em memoria…ou alguem teria alguma sugestao ??

pois o usuario esperar 8 segundos quando for escolher um item …seria muito tempo .

ivandasilva

Vc está falando em carregar uma vez só, tipo só quando inicia a aplicação, um “cache”.
Qual o espaço que vc tem na JVM naturalmente rodando a sua aplicação ?
Se for baixo o consumo de memória da sua JVM, pode valer a pena sim…

Dá para monitorar pelo JConsole

E

Ivan,

Esta baixo o consumo.


Vc está falando em carregar uma vez só, tipo só quando inicia a aplicação, um “cache”.
Qual o espaço que vc tem na JVM naturalmente rodando a sua aplicação ?

Como eu poderia fazer isso ???

ivandasilva

Eu falei carregar uma vez só, achando que vc queria fazer isto rsrs. Vamos lá, ele só pode ser carregado uma vez se estes dados são fixos, senão a sua aplicação vai pegar dados inconsistentes, cara para monitorar a memória da sua aplicação, usa o JConsole, ele fica na pasta lib dentro da sua JDK.

Agora, quem vai saber se vale a pena ou não é você, você tem que fazer um teste, sem os registros carregados e com eles carregados… deve haver outras ferramentas para fazer este monitoramento, mas o JConsole é bem bacana.

Criado 23 de novembro de 2012
Ultima resposta 23 de nov. de 2012
Respostas 6
Participantes 4