我已将我的应用程序从java7更改为java8,因为我想尝试在方法上使用lambda表达式。
之后我不得不将tomcat7升级到tomcat8,因为它不再需要运行我的webservice了。
现在我将其更改为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!
编辑17.08.2016: 我按照链接中的建议重新编写了应用程序,它没有那么多要改变,只添加了entitymanager依赖项并从现有的hibernate.cfg.xml创建了一个persistence.xml。
到目前为止,源代码需要对实现进行一些更改,我已经进行了Annotations和persistence导入,这与Hibernate语法没有区别。
但我做得对吗? 我在构造函数中创建了一个JPA实例,在这种情况下是一个EntityManager,我在任何地方都使用它,我还需要关闭并在任何地方重新创建吗?
至少我现在面临的问题是这个例外,它不允许我进一步试验。
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 :(得分:0)
在每次访问数据库后,您似乎没有关闭事务。 我建议使用JPA实体管理器或我的个人偏好使用spring框架, 无论如何这个链接提供了简单的例子 http://www.javawebtutor.com/articles/jpa/jpa-example-using-maven.php
答案 1 :(得分:0)
我在更新Tomcat时遇到了这个问题-这是由于未明确说明对我的一个实体类(使用@GeneratedValue批注)处理公钥生成的方式而引起的。
如果使用GenerationType.AUTO代替IDENTITY(用于自动增量主键),我也会遇到同样的异常
public class myExampleClass {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;