estou com o seguinte problema, tenho uma aplicação web, desenvolvida em jsp + hibernate + oracle.
Na Maior parte do tempo ela funciona corretamente, mais algumas vezes, a aplicação não responde mais, e tenho que algumas vezes reiniciar o tomcat, e as vezes ate a maquina para que ela volte a funcionar.
O detalhe, que nos log’s, tanto do tomcat, quando os de debug da aplicação não se encontram nenhuma erro.
Alguem teria alguma ideia ?
Caso, ajude, eu utilizo a conexão do manager da aplicação, ou seja onde crio as conexões com o banco;
Fiquei curioso pra saber o motivo de você ter um entity manager só para dispositivos móveis.
De qualquer forma, você já tentou usar um profiler, verificar a memória ou as threads?
Também há um probleminha com entendimentos: o EntityManagerFactory não cria conexões com o banco (como está escrito nos “logs” da classe), talvez você esteja fazendo confusão com conceitos e usando isso de forma errada (fechando a factory e abrindo novamente - o que iria consumir bastante memória na sua aplicação e, com certeza, iria requerer reiniciar o servidor).
Ataxexe, só faço a criação novamente, quando, a entidade está nula ou fechada, de resto, se verifcar, apenas pego o objeto já instanciado para a operação.
[quote=aszarael]Ataxexe, só faço a criação novamente, quando, a entidade está nula ou fechada, de resto, se verifcar, apenas pego o objeto já instanciado para a operação.
Teria alguma dica ou exemplo para me ajudar ??
[/quote]
Você pode tentar usar o JProfiler ou o próprio JDK pra tirar heap dumps e thread dumps (os comandos jmap, jstack e jps serão úteis). O PsiProbe pode te ajudar a ver algumas informações de forma gráfica também.
Outra coisa: o que você chama de “entidade fechada”? Realmente tenho a impressão de que você está se perdendo nos conceitos.
[quote=aszarael]O que quero dizer é, como utiliza o pool de conexões, quando o variavel está nula, eu pelo outra conexão para o pool de conexão.
Você teria alguma exemplo do deste metodos para analse ?
[/quote]
Novamente, pelo seu código, você verifica se o EntityManagerFactory está fechado para abrí-lo novamente. Isso seria análogo a você descartar o pool de conexões inteiro e criá-lo novamente depois. Eu não sei se você está fechando esse objeto porque isso não é claro pelo seu código.
Basicamente o jps te dará o PID do processo Java que você precisa analisar (o processo que roda o Tomcat), o jstack te dará um thread dump e o jmap um heap dump. Você pode analisá-los com outras ferramentas (eu uso o JProfiler pra analisar os heap dumps e o samurai pra analisar os thread dumps). Você pode até usar o Java Mission Control pra analisar os dumps (embora eu não saiba dizer se ele analisa ambos os dumps).
Você pode considerar, também, utilizar um servidor de aplicações (JBoss por exemplo) e se livrar desse trabalho de gerenciar a criação do EntityManager e do EntityManagerFactory, que me parece ser o seu gargalo. Se não quiser fazer isso, ao menos dê uma olhada em alguma práticas para gerenciar isso:
Outra coisa: não entendi ainda o motivo de dois EntityManagerFactory, isso pode ser também um gargalo no seu sistema caso não esteja bem gerenciado.