Tag: c3p0

hibernate c3p0破管

我正在将hibernate 3和c3p0用于一个程序,该程序不断从某些源中提取数据并将其写入数据库。 现在问题是,由于某些原因,数据库可能变得不可用(在最简单的情况下:我只是将其关闭)。 如果要将任何内容写入数据库,则不应该有任何exception – 查询应该等待所有永恒,直到数据库再次可用。 如果我没有弄错,这是连接池可以为我做的事情之一:如果db存在问题,只需重试连接 – 在最坏的情况下为无穷大。 但相反,我得到一个破坏的管道exception,有时后面连接拒绝,然后exception传递给我自己的代码,这不应该发生。 即使我抓住exception,我怎么能再次干净地重新初始化hibernate呢? (到目前为止没有c3p0我只是简单地建立了会话工厂,但如果这可能会泄漏连接(或者可以这样做,我不会感到惊讶吗?))。 该数据库是Virtuoso开源版。 我的hibernate.xml.cfg c3p0配置: org.hibernate.connection.C3P0ConnectionProvider false -1 30000 my_test_table 3 3 10 顺便说一句:测试表已经创建,我得到了大量的调试输出 – 所以它似乎实际上读取了配置。

c3p0如何关闭所有数据库连接并在需要时重新打开它们?

我有一个TimerTask,每天运行一次(大约1或2个小时)。 并且在每次运行时,它将创建数百个线程来为MySQL数据库中的每个表执行一些计算工作。 我使用c3p0作为数据库源连接池(每个线程在计算之前获得连接并在计算之后关闭连接)。 我将连接池配置设置如下, cpDs = new ComboPooledDataSource(); cpDs.setMinPoolSize(10); cpDs.setMaxPoolSize(20); cpDs.setMaxStatementsPerConnection(10); 在测试期间,我发现在第二天运行时所有数据库连接都丢失了,并且日志文件中显示了许多“由于底层exception导致的通信链路故障”。 所以我添加了以下配置,以便在使用之前测试连接。 // 7 hours, less than MYSQL default value – 8 hours cpDs.setMaxIdleTime(25200); cpDs.setTestConnectionOnCheckout(true); cpDs.setPreferredTestQuery(“select 1”); 但我观察到当TimerTask没有运行时,总有10个连接保持睡眠/空闲状态(通过SQL’show processlist;’),我经常看到着名的“APPARENT DEADLOCK !!!” 警告(该错误在c3p0项目中仍处于打开状态http://sourceforge.net/tracker/?func=detail&aid=3432139&group_id=25357&atid=383690 )。 那么有没有办法在完成所有计算工作后关闭所有连接,并在第二天重新构建连接时再次执行任务? 谢谢。 问候,乔伊

Java Hibernate / C3P0错误:“无法获取连接元数据。 客户端尝试签出连接的尝试已经超时。“

我正在尝试获取一些我已经通过并运行的代码。 它似乎使用Hibernate框架。 我已经完成了调整配置的大部分错误,但这个让我感到难过。 它试图连接到两个数据库:gameapp和gamelog。 两者都存在。 它似乎有连接到游戏日志的问题,但没有连接到gameapp(后来在init中,它连接并加载其他DB就好了)。 下面,我已经粘贴了错误和exception堆栈转储。 我在configs中成像了其他东西,所以我还包括了该db的配置文件。 我知道这很模糊,但我希望有些职业选手可以看到我错过的愚蠢错误。 org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/gamelog root true UTF-8 100 1 none true true org.hibernate.connection.C3P0ConnectionProvider 5 10 30 30 0 5 exception和堆栈跟踪: 2010-04-30 17:50:00,411 WARN [org.hibernate.cfg.SettingsFactory] – Could not obtain connection metadata java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) […]

C3P0是线程安全的吗?

当我试图在MySQL数据库上使用C3P0执行一些简单的读取(SELECT)操作时,会发生中断exception(java.lang.InterruptedException)。 当我将并行线程数增加到100以上(我尝试使用5,10,20,60和100)时会发生exception。 我执行的语句很简单: SELECT `Model.id` FROM `Model` LIMIT 100; 我的连接是从ComboPooledDataSource汇集的,它使用以下属性配置(另请参阅C3P0手册 ): c3p0.jdbcUrl=jdbc:mysql… c3p0.debugUnreturnedConnectionStackTraces=true c3p0.maxIdleTime=5 c3p0.maxPoolSize=1000 c3p0.minPoolSize=5 c3p0.initialPoolSize=5 c3p0.acquireIncrement=3 c3p0.acquireRetryAttempts=50 c3p0.numHelperThreads=20 c3p0.checkoutTimeout=0 c3p0.testConnectionOnCheckin=true c3p0.testConnectionOnCheckout=true user=*** password=*** 我运行测试的机器上的MySQL服务器配置为接受1024个连接,并且我运行的unit testing成功执行(数据按预期从数据库中检索)。 但是,在C3P0日志文件中,我发现以下警告: 15:36:11,449 WARN BasicResourcePool:1876 – com.mchange.v2.resourcepool.BasicResourcePool@9ba6076 — Thread unexpectedly interrupted while performing an acquisition attempt. java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805) at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547) 我想知道这个警告的原因,其次是它对软件稳健性和稳定性的可能影响。 请注意,在使用之后,我会关闭结果集,SQL语句和连接。 最后,一旦测试结束,我通过调用方法ComboPooledDataSource#close()关闭池。 […]

Jetty 7 + MySQL Config

我一直在尝试为Jetty配置一个c3p0数据库连接池,但我一直得到一个ClassNotFoundException: 2010-03-14 19:32:12.028:WARN::Failed startup of context WebAppContext@fccada@fccada/phpMyAdmin,file:/usr/local/jetty/webapps/phpMyAdmin/,file:/usr/local/jetty/webapps/phpMyAdmin/ java.lang.ClassNotFoundException: org.mortbay.jetty.webapp.WebAppContext at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:313) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:266) at org.eclipse.jetty.util.Loader.loadClass(Loader.java:90) at org.eclipse.jetty.xml.XmlConfiguration.nodeClass(XmlConfiguration.java:224) at org.eclipse.jetty.xml.XmlConfiguration.configure(XmlConfiguration.java:187) at org.eclipse.jetty.webapp.JettyWebXmlConfiguration.configure(JettyWebXmlConfiguration.java:77) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:975) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:586) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:349) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:165) at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:162) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:165) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:92) at org.eclipse.jetty.server.Server.doStart(Server.java:228) at […]

Hibernate:尝试获取锁定时发现死锁

我在我的项目中使用hibernate,我得到随机的表观死锁,用于非常简单的数据库操作。 有一个堆栈跟踪: https ://gist.github.com/knyttl/8999006 – 让我感到困惑的是,第一个Exception是RollbackException,然后是LockAquisition Exceptions。 问题经常出现在类似的条款中: @Transactional public void setLastActivity() { User user = em.findById(…); user.setLastActivity(new Date()); em.merge(user); em.flush(); } 我很困惑,因为我不知道它是Hibernate,MySQL还是C3P0的问题。 我的Hibernate配置: ${database.dialect} ${database.structure} ${database.connection} ${database.username} ${database.password} ${database.driver} true 0 UTF-8 UTF-8 ${database.show_sql} false disabled org.hibernate.connection.C3P0ConnectionProvider 0 50 120 0 0 0 120 1 8 EDIT1: 我上面写的是发生了表观死锁 – 这是错误的,只有“试图获取锁定时发现死锁”发生。 EDIT2: 这也发生在这些方法上 – 那些需要用@Transactional注释的需求: […]

连接超时是在不活动期后

我们有一个使用hibernate作为ORM工具的api,我们使用c3p0作为连接池处理程序。 我们在负载下没有问题。 但是,当api处于非活动状态一天左右时,我们就会遇到“无法获取连接”的exception。 因此,如果周末没有人使用api,我们会在周一早上收到连接错误。 Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. 我们使用mysql作为数据库。 在我的研究中,我知道mySQL在8小时左右后连接失效。 连接池可能会向客户端发出过时的连接,从而导致客户端的连接超时exception。 目前,我们没有在C3Po中配置任何连接测试。 可以说,如果我在池中将它们提供给客户端之前使用IdleTestPeriod来测试连接。 那么如果我的所有连接在某个时间点都未通过测试会发生什么? 是否会从池中删除这些失败的连接,并再次生成新的活动连接? 目前,这是我们正在使用的c3p0设置。 这个问题可能有其他原因吗? 谢谢您的帮助

Spring Data JPA – “无法初始化代理 – 无会话” – 使用标记为事务的方法

我有一个模型有一个相当大的子实体图和hibernate最终制作大约9个语句懒洋洋地获取所需的所有数据,但约4级深我得到一个“无法初始化代理 – 没有会话”错误,我是不知道为什么。 调节器 @Transactional(readOnly = true) @RequestMapping(value = “/v2/plans”, method = RequestMethod.GET) public @ResponseBody List show(HttpServletRequest request) throws Exception { List planPresenters = new ArrayList(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery planQuery = criteriaBuilder.createQuery(Plan.class); Root root = planQuery.from(Plan.class); if (request.getParameter(“region”) != null || request.getParameter(“group”) != null) { List criteria = new ArrayList(); if (request.getParameter(“region”) != […]

抢先并优雅地检查org.hibernate.Session是否仍然连接(通过c3p0)

我在多分类数据库环境中工作,其中分片的停机时间不是致命的。 当应用程序启动时,所有分片信息都会加载到缓存中并加载相应的Session对象,但是,在应用程序正常运行期间,预计某些分片可能会关闭,在这种情况下,应用程序会故障转移到剩余的分片之一碎片。 它几乎是一个标准的用例场景。 在某些情况下,我需要进行交叉分片扫描,我这样做的方法是遍历上述会话映射并检索数据。 当我的Hibernate会话到一个同时因为会话打开而失败的数据库时,问题出现了。 我希望有一种先发制人的方法来检查数据库是否已关闭而不尝试事务并获取org.hibernate.exception.GenericJDBCException ,这是我现在发现它的方式,但这很糟糕,因为它是运行时exception,在所有其他邪恶中。 我还尝试了Session.isOpen()和Session.isConnected()但即使数据库关闭,这两种方法都返回true。 有没有办法先发制人地优雅地检查Hibernate Session的连接? 像向数据库发送ping一样的东西。 也值得知道我们使用c3p0进行连接池。 有没有办法可以配置它来告诉Hibernate连接断开并关闭/断开相关会话?

成功发送到服务器的最后一个数据包大于70,400,003毫秒。 比配置的服务器长

我有以下例外 javax.persistence.PersistenceException:Exception [EclipseLink-4002](Eclipse Persistence Services – 2.5.2.v20140319-9ad6abd):org.eclipse.persistence.exceptions.DatabaseException内部exception:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功收到的最后一个数据包是70,400,002毫秒。 成功发送到服务器的最后一个数据包是70,400,003毫秒之前。 比服务器配置的’wait_timeout’值长。 您应该考虑在应用程序中使用之前到期和/或测试连接有效性,增加服务器配置的客户端超时值,或使用Connector / J连接属性“autoReconnect = true”来避免此问题。 我做了一些研究并将persistance.xml更改为此 最新 org.hibernate.ejb.HibernatePersistence com.rh.xxx 最新的代码看起来是否正确? 任何帮助,将不胜感激