2016-08-16 61 views
0

我已经将我的应用程序从java7更改为java8,因为我想尝试在方法上使用lambda表达式。连接池已达到其最大尺寸

之后我不得不升级tomcat7到tomcat8,因为它不想再运行我的web服务。

既然现在我改成了tomcat8,我有连接池的问题:\

什么没有做那么远? 搜索了SO和谷歌,但找不到与我的问题相关的任何内容,除了C3P0设置,我还没有那么有经验。

<property name="connection_provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
<property name="c3p0.minPoolSize">5</property> 
<property name="c3p0.maxPoolSize">100</property> 
<property name="c3p0.acquireIncrement">5</property> 
<property name="c3p0.maxStatements">200</property> 
<property name="c3p0.timeout">180</property> 

有没有人有我的想法,或者我必须恢复到java7,因为我昨天没有任何问题。

编辑:添加例外味精

SCHWERWIEGEND: Servlet.service() for servlet [RESTservice] in context with path [] threw exception [org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!] with root cause org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!

编辑2016年8月17日: 我重新编码应用程序为链接的建议,这是没有太大的改变,只是增加EntityManager的依赖,并创建一个持久.xml从现有的hibernate.cfg.xml中。

到目前为止,该源在实现中需要进行一些更改,我已经有注释和持久性导入,并且它与Hibernate语法不同。

但我做到了吗? 我在这种情况下在构造函数中创建了一个JPA实例,并在各处使用它,我是否还需要关闭并重新创建它?

至少我现在面临的问题是这个例外,它不让我进一步试验。

javax.persistence.PersistenceException: No Persistence provider for EntityManager named ServicePU 

我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0"> 

    <persistence-unit name="ServicePU"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="hibernate.connection.url" value="jdbc:sqlserver://xyz" /> 
      <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
      <property name="hibernate.connection.username" value="xyz" /> 
      <property name="hibernate.connection.password" value="xyz" /> 
      <property name="hibernate.archive.autodetection" value="class" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hbm2ddl.auto" value="update" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

我希望MSSQL司机心不是这里的问题:=)

+0

我猜想,你不关闭你的数据库连接,请分享你实现 – naoru

+0

我离开工作,所以我没有源代码,但我所有的获取方法都有这个结构,首先getSession(),用db做一个foreach循环,然后关闭会话。这是一个坏的方法,或者我必须打开每个对象一个会话,然后关闭它? – kaya

+0

如果你确定你的连接关闭(即使在例外的情况下),那么它可能是另一个问题,你可以尝试编写一个300+插入的测试用例,并确保你可以放弃该理论 – naoru

回答

0

看起来你是不是每次访问DB后关闭您的交易。 我会建议使用JPA实体管理器或我个人的偏好使用Spring框架, 反正这个链接,并提供简单的例子 http://www.javawebtutor.com/articles/jpa/jpa-example-using-maven.php

+0

据我可以看到它在我的项目中没有太多改变,我可以让我的pojo构造函数,或者在教程中改变它,构造函数有setMethod调用,我直接用'this.x = x '在我的项目 – kaya

+0

如果这个答案帮助你,请把它标记为修复 – naoru

+0

我开始实施的东西,如果这个工程,这只是真棒,3-4内线刚刚得到一个班轮=) 但我现在面临一个新的问题,我改变了最初的问题,并添加新的例外 – kaya