2016-08-16 6 views
0

Ich habe meine App von Java7 in Java8 geändert, weil ich versuchen wollte, Lambda-Ausdruck auf einer Methode zu verwenden.Verbindungspool hat seine maximale Größe erreicht

Danach musste ich tomcat7 auf tomcat8 upgraden, da mein Webservice nicht mehr laufen sollte.

Jetzt, da ich es tomcat8 geändert, habe ich ein Problem mit dem Verbindungspool: \

Was bisher gemacht? Gesucht SO und Google aber konnte nichts zu meinem Problem finden, neben C3P0 Einstellungen, die ich noch nicht so erfahren bin.

<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> 

Hat jemand eine Idee für mich haben, oder muss ich zurück zu Java7 zurückkehren, wie ich gestern Probleme hatte den Ball hielt.

EDIT: hinzugefügt Ausnahme msg

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!

EDIT 2016.08.17: ich die app umcodiert wie in der Verbindung vorgeschlagen, es war nicht so viel, nur zu ändern EntityManager Abhängigkeit hinzufügen und eine Persistenz erstellen .xml aus der vorhandenen hibernate.cfg.xml.

Die Quelle benötigte einige Änderungen in der Implementierung, ich hatte bereits Anmerkungen und Persistenzimporte und es war nicht so ein Unterschied zur Hibernate-Syntax.

Aber habe ich es richtig gemacht? Ich habe eine einzelne JPA-Instanz in diesem Fall einen EntityManager im Konstruktor erstellt und verwende ihn überall. Muss ich ihn immer noch schließen und neu erstellen?

Zumindest das Problem, dem ich im Moment gegenüberstehe, ist diese Ausnahme, die mich nicht weiter experimentieren lässt.

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

mein 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> 

ich den MSSQL Fahrer hoffen, ist nicht das Problem hier: =)

+0

Ich würde vermuten, dass Sie Ihre DB-Verbindungen nicht zu schließen, geben Sie bitte Ihre Implementierung – naoru

+0

ich Arbeit links teilen , also habe ich keinen Quellcode, aber alle meine Fetch-Methoden haben diese Struktur, zuerst getSession(), doStuff auf db mit einer foreach-Schleife und dann Sitzungen danach schließen. Ist das ein schlechter Ansatz oder muss ich für jedes einzelne Objekt eine Session öffnen und dann schließen? – kaya

+0

Wenn Sie sicherstellen, dass Ihre Verbindung geschlossen ist (auch im Fall von Ausnahmen), könnte es ein anderes Problem sein. Sie können versuchen, einen Testfall mit mehr als 300 Einfügungen zu schreiben. – naoru

Antwort

0

Es sieht aus wie Sie nicht Ihre Transaktionen, die nach jedem Zugriff auf die DB Schließen . Ich würde empfehlen, JPA Entity Manager oder meine persönliche Präferenz mit Feder Framework, ohnehin Link bietet und einfaches Beispiel http://www.javawebtutor.com/articles/jpa/jpa-example-using-maven.php

+0

Soweit ich sehen kann, ist es nicht viel zu ändern in meinem Projekt, kann ich meinen pojo Konstruktor wie er ist oder ändern Sie es wie im Tutorial, der Konstruktor hat setMethod Aufrufe, ich habe direkt initiiert mit this.x = x 'in meinem Projekt – kaya

+0

wenn diese Antwort half Ihnen bitte markieren Sie es als beheben – naoru

+0

Ich begann mit der Umsetzung der Sachen, wenn das funktioniert, das ist einfach genial, 3-4 Liner haben nur ein Liner =) aber ich stelle ein neues Problem jetzt , ändere ich die ursprüngliche Frage und füge die neue Ausnahme hinzu – kaya

Verwandte Themen