Я изменил свое приложение с java7 на java8, поскольку я хотел попробовать и использовать выражение лямбда для метода.Пул соединений достиг максимального размера
Впоследствии мне пришлось обновить tomcat7 до tomcat8, так как он больше не хотел запускать мой веб-сервис.
Теперь, так как я изменил его на tomcat8, у меня есть проблемы с пула соединений: \
Что делал до сих пор? Искал SO и google, но не смог найти ничего, связанного с моей проблемой, рядом с настройками 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, как я не имел никаких проблем вчера.
EDIT: добавлено исключение тзд
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 17.08.2016: я переделал приложение, как предложено в ссылке, это было не так много, чтобы изменить, только добавить EntityManager зависимость и создать настойчивость .xml из существующего hibernate.cfg.xml.
Источник должен был внести несколько изменений в реализацию до сих пор, у меня уже были импорт аннотаций и персистентности, и это не было разницей в синтаксисе 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 разве проблема здесь: =)
Я предположил бы, что вы не закрываете соединения DB, пожалуйста, поделитесь своими реализации – naoru
я оставил работу , поэтому у меня нет исходного кода, но все мои методы выборки имеют эту структуру, сначала getSession(), doStuff на db с циклом foreach, а затем после закрытия сессий. Это плохой подход или мне нужно открыть для каждого отдельного объекта сеанс, а затем закрыть его? – kaya
, если вы убедитесь, что ваше соединение закрыто (даже в случае исключений), это может быть другой проблемой, вы можете попробовать написать тестовый пример с 300 + вставками и убедиться, что вы можете отказаться от этой теории. – naoru