Criar um MAP, seria interessante?

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());  
    }  

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??

um Map pra que ?

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

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

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

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 ???

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.