Se tu estiver usando spring framework 2.0, isto funciona perfeitamente …
Caso contrario, só é possivel injetar um entity manager factory em um Session Bean ou então em um Servlet …
Na verdade me pediram para cuidar apenas dessa parte de acesso ao BD.
Então fiz o mapeamento das tabelas (classes com gets e sets), o perisitence.xml, e as classes que chamei de DAO onde adiciono, atualizo e removo os dados.
Como mostrado na minha primeira mensagem estava fazendo a conexão daquele jeito (que deve estar errado)
E realmente essa ultima ideia não deu certo.
E agora???
Voce esta abrindo muitas EMFs!!! Tudo bem que esta fechando direito o EM, mas o EMF voce esta abrindo demais, ele pode estar criando um pool para cada EMF, nao sei como o toplink gerencia isso!
Faca o seguinte, devolve sempre a mesma EMF pelo seu JPAConexao, a la singleton. Mais para frente mude isso para injecao de dependencias.
[quote=Paulo Silveira]Voce esta abrindo muitas EMFs!!! Tudo bem que esta fechando direito o EM, mas o EMF voce esta abrindo demais, ele pode estar criando um pool para cada EMF, nao sei como o toplink gerencia isso!
Faca o seguinte, devolve sempre a mesma EMF pelo seu JPAConexao, a la singleton. Mais para frente mude isso para injecao de dependencias.[/quote]
Mas ja não é isso que estou fazendo aqui (singleton)???
[quote]Local Exception Stack:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.4 (Build 060412)): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: FATAL: sorry, too many clients alreadyError Code: 0
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:289)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:84)
at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:167)
at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:537)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:193)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:129)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
at pacotes.persistencias.connector.JPAConexao.getFactory(JPAConexao.java:30)
at pacotes.persistencias.DAO.MenuDAO.atualizar(MenuDAO.java:105)
at org.apache.jsp.index_005fMenu_jsp._jspService(index_005fMenu_jsp.java:106)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:443)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:98)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc3.AbstractJdbc3Connection.(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3.Jdbc3Connection.(Jdbc3Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:382)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:82)
… 32 more[/quote]
Estou com o mesmo erro que vc ynaue. Estou agora utilizando TopLink em vez do Hibernate, e estou usando banco postgres 8.2 . O Erro é identico ao seu, se conseguir resolver me passa por favor.