EntityManager + WebService + Jersey

0 respostas
AlencarCanton

E ae,galera!
Beleza?

To com um problema aqui,talvez alguem possa me dar uma luz.
Construí um webservice utilizando o fw Jersey,são feitas requisições ao banco a partir de um sistema que está instalado em um tablet.

Tablet >>>(requisição)>>> WebService >>>> BD

feito isso,o fluxo segue da seguinte maneira:

BD >>> WebService >>>(xml)>>> Tablet

Estava fazendo uns testes,mandando 1 requisição a cada dez segundos,e ele funciona,mas depois de alguns minutos,gera a exception:

javax.persistence.PersistenceException: [PersistenceUnit: persistenceUnit] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
        ....

Segue a minha factory para injetar o EntityManager no contexto:

public class EmFactory {
	
	public EntityManagerFactory getFactory() throws Exception {
		EntityManagerFactory entityManagerFactory;
	    entityManagerFactory = Persistence.createEntityManagerFactory( "persistenceUnit" );
	    return entityManagerFactory;
	}

}

A classe DAO,que faz as operações:

public class OrdemServicoDao {

	EmFactory emFactory;
	EntityManager em;
	
	public OrdemServicoDao(){
		if (emFactory==null){
			emFactory = new EmFactory();
		}
		
		if (em==null){
			try {
				em = emFactory.getFactory().createEntityManager();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

        public List<OrdemServico> buscarPorTecnico(Integer codTec) throws ParseException{
        List<OrdemServico> listaOs = null;
		try {
		//código do método,executa várias querys buscando objetos do banco,sem alterar e inserir.
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (em.isOpen()) {
			    em.close();
		        }
		}
		
		return listaOs;
	}

E aqui segue a servlet do jersey que recebe e processa a requisição:

@Path("/chamados")
public class ChamadoResource {
	
	GeradorChamados gc;
	
	public ChamadoResource(){

		if (this.gc==null){
			this.gc = new GeradorChamados();
		}
		
	}

@GET
	@Produces("text/xml")
	@Path("/{idTec}")
	public List<Chamado> getChamados(@PathParam("idTec") Integer idTec) throws ParseException {
		OrdemServicoDao dao = new OrdemServicoDao();
		
		List<OrdemServico> listaOrdemServico = new ArrayList<OrdemServico>();
		List<Chamado> listaChamado = new ArrayList<Chamado>();
		
		listaOrdemServico = dao.buscarPorTecnico(idTec);
		
		listaChamado = this.gc.geraListaChamados(listaOrdemServico);
		
		return listaChamado;
	}

}

Chega um momento em que o webservice não consegue injetar o EntityManager,gerando aquela exception,alguem pode me ajudar?

Criado 27 de dezembro de 2012
Respostas 0
Participantes 1