框架技术--hibernate jpa异常(Exception Description: Unable to acquire a connection from driver [null], use)

使用hibernate JPA在本地部署调试都没有问题,但是打成war包,放到服务后,就会抛出异常。

[#|2013-12-11T12:28:23.947+0800|SEVERE|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=25;_ThreadName=Thread-2;|javax.persistence.PersistenceException: Exception [EclipseLink-4021] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null].  Verify that you have set the expected driver class and URL.  
Check your login, persistence.xml or sessions.xml resource.  
The jdbc.driver property should be set to a class that is compatible with your database platform
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:517)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:277)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:294)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:272)
	at com.haierpip.dao.impl.AdvDaoImpl.getAdvInfo(AdvDaoImpl.java:132)
	at com.haierpip.util.AdvUtil.advStrategy(AdvUtil.java:68)
	at com.haierpip.servlet.LiveEpgServlet.doPost(LiveEpgServlet.java:131)
	at com.haierpip.servlet.LiveEpgServlet.doGet(LiveEpgServlet.java:63)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at com.haierpip.util.visitRecord.AccessFilter.doFilter(AccessFilter.java:23)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)
Caused by: Exception [EclipseLink-4021] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null].  Verify that you have set the expected driver class and URL.  Check your login, persistence.xml or sessions.xml resource.  The jdbc.driver property should be set to a class that is compatible with your database platform
	at org.eclipse.persistence.exceptions.DatabaseException.unableToAcquireConnectionFromDriverException(DatabaseException.java:376)
	at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:91)
	at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
	at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:584)
	at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:206)
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488)
	... 39 more
|#]

经一番搜索,找到点有用的资料: http://www.coderanch.com/t/502791/ORM/databases/exception-JPA-application


修改persistence.xmll配置文件中连接数据库参数即可使用:

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/experiments"/> 
<property name="javax.persistence.jdbc.user" value="root"/> 
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
<property name="javax.persistence.jdbc.password" value=""/> 
<property name="eclipelink.ddl-generation" value="create-tables"/> 
<property name="eclipelink.jdbc.connections.min" value="1"/> 
<property name="eclipelink.jdbc.connections.max" value="2"/> 
<property name="eclipelink.logging.level" value="FINEST"/>

至于原因还需要查找。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误的意思是无法打开JPA EntityManager进行事务操作,嵌套的异常信息是org.hibernate.exception.jdbcconnectionexception:无法获取JDBC连接。 ### 回答2: 这是一个比较常见的问题,出现在使用Hibernate做数据库操作时,通常是因为无法连接到数据库,或者数据库连接被阻塞而导致的。这个错误信息很明显,就是说无法打开JPA EntityManager用于事务处理,具体原因是嵌套异常org.hibernate.exception.jdbcconnectionexception:无法获取JDBC连接。 如果遇到这种问题,最好的办法就是检查一下数据库配置是否正确,包括数据库URL、用户名、密码等是否填写正确。同时也可以检查一下数据库是否已经启动,数据库中的表是否存在,以及数据库连接是否被占用等问题,通常在程序中出现这个问题都是因为其中一个原因导致了数据库连接失败。 如果以上方法都没有解决问题,还可以尝试清理一下JPA EntityManager,以及检查一下Hibernate映射文件是否正确、是否存在错误,通常情况下这些操作可以解决大多数原因导致的数据库连接问题。 总之,以上是绝大部分问题的解决办法,但是如果遇到更加复杂的问题,可能需要从数据库本身的角度来进行排查。 ### 回答3: 这个错误通常意味着应用程序在连接数据库时遇到了问题。应用程序试图使用Java持久性(JPA)实体管理器处理数据库事务,但无法获得JDBC连接。JDBC(Java数据库连接)使Java应用程序能够连接各种数据库,包括MySQL和Oracle等常用的关系型数据库。 在这个错误消息中,“嵌套异常”告诉我们具体的问题是“无法获得JDBC连接”。这可能是由于以下原因导致的: 1.数据库未运行 - 在尝试连接数据库之前,请确保数据库正在运行,并且您有足够的权限访问它。您可以通过在终端上运行命令行或使用图形用户界面来启动数据库。 2. 数据库连接配置错误 - 应用程序的配置可能包含错误的数据库连接字符串,用户名或密码。请确保这些值正确。 3. 数据库连接超时 - 如果数据库连接处于闲置状态一段时间,它可能已关闭。尝试增加连接超时值,让连接保持活动状态。 4. 数据库连接池未正确配置 - 如果使用连接池管理数据库连接,则必须正确配置连接池以保持应用程序的最佳性能。例如,如果连接池的最大连接数设置太低,则可能会遇到无法获得JDBC连接的错误。 要解决这个问题,您可以尝试以下步骤: 1.检查数据库是否正在运行,并确保您有权限访问它。 2. 查看应用程序的数据库连接配置,确保配置正确。如果发现错误,请进行更改并重试。 3. 尝试增加连接超时值,允许连接在空闲时保持活动状态。 4. 如果使用连接池管理数据库连接,请确保连接池正确配置,并且最大连接数不低于应用程序需要的连接数。 如果这些步骤无法解决问题,请尝试其他方法,例如检查网络连接是否正常,重启数据库或应用程序服务器,或联系相关技术支持人员寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值