Hibernate-Cache вызывает org.hibernate.service.UnknownServiceException на странице Refresh

Я использую Hibernate 5.0.2.Final и хочу использовать кэширование для таблицы в медленной базе данных. В первый раз это обычно работает, но когда я обновляю страницу, я получаю ошибки. В зависимости от конфигурации я также сталкиваюсь либо с несколькими ошибками, либо вообще без них, либо просто с простой загрузкой без какого-либо результата.

Конфигурация соответствовала руководствам или коду на Github, в котором также использовался Hibernate 5. У меня такое ощущение, что проблема может быть в новой версии Hibernate, но, возможно, я сделал что-то еще не так.

Если я получаю Stacktrace и первый процесс загрузки работает, здесь происходит сбой:

21 октября 2015 г. 17:19:22.585 СЕРЬЕЗНЫЙ [http-nio-8084-exec-78] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() для сервлета [jsp] в контексте с путем [/Buran ] выдало исключение [Произошло исключение при обработке JSP-страницы /filter/Arbeitspreise/Arbeitspreisliste.jsp в строке 26

23:24:25:26:27:
28:29:
$(document).ready(function() {

Я использую следующий файл hibernate.cfg.xml (приношу извинения за немецкие имена). Как видите, я использую источник данных, предоставленный Tomcat 8-Server:

Есть одна вещь, которая беспокоит меня в файле ehcache.xml. Использование его таким образом просто вызывает ванильную ошибку, с которой я сталкиваюсь:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.datasource">java:comp/env/jdbc/sqlserv</property>        
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <property name="hbm2ddl.auto">auto</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.SQLServer2012Dialect</property>
    <property name="hibernate.generate_statistics">true</property>  

    <!--Query Cache: unused>
     <property name="hibernate.cache.use_query_cache">true</property-->
    <!-- Cache -->
    <property name="hibernate.cache.use_second_level_cache"> true</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property>

    <!--property name="hibernate.cache.use_query_cache">false</property-->

    <!-- General Hibernate settings. -->
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="use_sql_comments">true</property>
    <mapping class="arbeitspreisliste.Arbeitspreise"/>
    <mapping class="arbeitspreisliste.Arbeitspreisliste"/>
    <mapping class="arbeitspreisliste.Arbeitspreisgruppe"/>
  </session-factory>
</hibernate-configuration>

Но согласно информации, которую я смог найти, я должен использовать ее с этими записями, верно?

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<diskStore path="java.io.tmpdir/ehcache" />

<defaultCache maxEntriesLocalHeap="1000" eternal="false" timeToIdleSeconds="60" timeToLiveSeconds="120" diskSpoolBufferSizeMB="30" maxEntriesLocalDisk="1000"
    diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" statistics="true">
    <persistence strategy="localTempSwap" />
</defaultCache>

<cache name="org.hibernate.cache.internal.StandardQueryCache" maxEntriesLocalHeap="5" eternal="false" timeToLiveSeconds="120">
    <persistence strategy="localTempSwap" />
</cache>

<cache name="org.hibernate.cache.spi.UpdateTimestampsCache" maxEntriesLocalHeap="1000" eternal="true">
    <persistence strategy="localTempSwap" />
</cache>

</ehcache>

Но это делает невозможным выполнение всех остальных команд Hibernate...

<cache name="arbeitspreisliste.Arbeitspreise" maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="5" timeToLiveSeconds="10">
    <persistence strategy="localTempSwap" />
</cache>

<cache name="arbeitspreisliste.Arbeitspreisgruppe" maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="5" timeToLiveSeconds="10">
    <persistence strategy="localTempSwap" />
</cache>

<cache name="arbeitspreisliste.Arbeitspreisliste" maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="5" timeToLiveSeconds="10">
    <persistence strategy="localTempSwap" />
</cache>

Классы работают просто отлично, поэтому я просто добавляю заголовки первого, они выглядят практически одинаково...

Мой Java-Bean getFullArbeitspreisGruppenverwaltungloaded просто загружает все записи, преобразует их в нужную строку и закрывает сеанс...

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = "[Buran].[dbo].[Arbeitspreisliste]")
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Arbeitspreisliste implements Serializable {

Иногда бывает и так, что вообще ничего не работает и Hibernate просто загружается и загружается до тех пор, пока соединение не будет приостановлено. Версии моих библиотек такие же, как в pom.xml:

private final String hql = "SELECT G FROM arbeitspreisliste.Arbeitspreisgruppe G order by G.agrupID";

public String getFullArbeitspreisGruppenverwaltungloaded() {
    boolean hasError = false;

    Session session = null;
    SessionFactory factory = null;

    try {
        factory = HibernateUtil.getSessionFactory();
        session = factory.openSession();
        session.setCacheMode(CacheMode.NORMAL);
        session.beginTransaction();
        Query query = session.createQuery(hql);
        //query.setCacheable(true); <-- This doesn't really do much..

        List<Arbeitspreisgruppe> apgruppenmaterial = query.list();

        //Do something useful

    } catch (NullPointerException | HibernateException npe) {
            hasError = true;
            Logger.getLogger(Arbeitspreislistenhibernate.class.getName()).log(Level.INFO, null, hql);
            Logger.getLogger(Arbeitspreislistenhibernate.class.getName()).log(Level.SEVERE, null, npe);
    } finally {
        if (session != null) {
            try {
                session.close();
            } catch (HibernateException hibendex) {
                Logger.getLogger(Arbeitspreislistenhibernate.class.getName()).log(Level.INFO, null, hibendex);
                Logger.getLogger(Arbeitspreislistenhibernate.class.getName()).log(Level.FINEST, null, "Couldn't close session...");
            }
        } else {
            Logger.getLogger(Arbeitspreislistenhibernate.class.getName()).log(Level.FINE, null, "Session=null");
        }
    }

У меня была аналогичная проблема, потому что я закрыл

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.datasource">java:comp/env/jdbc/sqlserv</property>        
    <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>
    <property name="hbm2ddl.auto">auto</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.SQLServer2012Dialect</property>
    <property name="hibernate.generate_statistics">true</property>  

    <!--Query Cache: unused>
     <property name="hibernate.cache.use_query_cache">true</property-->
    <!-- Cache -->
    <property name="hibernate.cache.use_second_level_cache"> true</property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property>

    <!--property name="hibernate.cache.use_query_cache">false</property-->

    <!-- General Hibernate settings. -->
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="use_sql_comments">true</property>
    <mapping class="arbeitspreisliste.Arbeitspreise"/>
    <mapping class="arbeitspreisliste.Arbeitspreisliste"/>
    <mapping class="arbeitspreisliste.Arbeitspreisgruppe"/>
  </session-factory>
</hibernate-configuration>
, а затем попытался выполнить другой запрос, но, похоже, это не та же ситуация. Можете ли вы добавить
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<diskStore path="java.io.tmpdir/ehcache" />

<defaultCache maxEntriesLocalHeap="1000" eternal="false" timeToIdleSeconds="60" timeToLiveSeconds="120" diskSpoolBufferSizeMB="30" maxEntriesLocalDisk="1000"
    diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" statistics="true">
    <persistence strategy="localTempSwap" />
</defaultCache>

<cache name="org.hibernate.cache.internal.StandardQueryCache" maxEntriesLocalHeap="5" eternal="false" timeToLiveSeconds="120">
    <persistence strategy="localTempSwap" />
</cache>

<cache name="org.hibernate.cache.spi.UpdateTimestampsCache" maxEntriesLocalHeap="1000" eternal="true">
    <persistence strategy="localTempSwap" />
</cache>

</ehcache>
содержание в свой пост? Вы также можете использовать
<cache name="arbeitspreisliste.Arbeitspreise" maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="5" timeToLiveSeconds="10">
    <persistence strategy="localTempSwap" />
</cache>

<cache name="arbeitspreisliste.Arbeitspreisgruppe" maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="5" timeToLiveSeconds="10">
    <persistence strategy="localTempSwap" />
</cache>

<cache name="arbeitspreisliste.Arbeitspreisliste" maxEntriesLocalHeap="10000" eternal="false" timeToIdleSeconds="5" timeToLiveSeconds="10">
    <persistence strategy="localTempSwap" />
</cache>
напрямую...

<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <netbeans.hint.deploy.server>Tomcat</netbeans.hint.deploy.server>
    <!-- Hibernate EHCache API -->
    <hibernate-ehcache.version>5.0.2.Final</hibernate-ehcache.version>

    <!-- Ehcache -->
    <ehcache-core.version>2.6.11</ehcache-core.version>

    <hibernate-validator.version>5.2.2.Final</hibernate-validator.version>

    <hibernate-core.version>5.0.2.Final</hibernate-core.version>

    <hibernate-entitymanager.version>5.0.2.Final</hibernate-entitymanager.version>

</properties>
    <!-- HIBERNATE -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>${hibernate-ehcache.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
        <version>${ehcache-core.version}</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate-core.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate-entitymanager.version}</version>
        <scope>compile</scope>
    </dependency>

person Qohelet    schedule 21.10.2015    source источник
comment
Это было довольно давно, тем временем кое-что обновлено: stackoverflow.com/a/33230317/2516892   -  person Elrond_EGLDer    schedule 28.12.2015
comment
Stacktrace:] с основной причиной org.hibernate.service.UnknownServiceException: запрошена неизвестная служба [org.hibernate.cache.spi.RegionFactory] в org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:184) в org. hibernate.cfg.Settings.getRegionFactory(Settings.java:300) в org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1322) в org.hibernate.internal.SessionFactoryImpl.openSession(SessionFactoryImpl.java:677) в arbeitspreisliste.Arbeitspreislistenhibernate.getFullArbeitspreisGruppenverwaltungloaded(Arbeitspreislistenhibernate.java:68) в org.apache.jsp.filter.Arbeitspreise.Arbeitspreisliste_jsp._jspService(Arbeitspreisliste_jsp.java:109) в org.apache.jaspaseBaseB.sppJspJ :70) в javax.servlet.http.HttpServlet.service(HttpServlet.java:725) в org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapp er.java:432) в org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) в org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) в javax.servlet.http .HttpServlet.service(HttpServlet.java:725) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) в org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) в org.apache.catalina.core.ApplicationFilterChain. doFilter(ApplicationFilterChain.java:206) в org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter(приложение licationFilterChain.java:206) в filter.SessionCheckFilter.doFilter(SessionCheckFilter.java:114) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) по адресу org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) по адресу org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) по адресу org.apache. каталина.аутентификатор. AuthenticatorBase.invoke(AuthenticatorBase.java:501) на org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) на org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) на org .apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter .java:537) в org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) в org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) в org.apache.coyote. http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) в org.apache.tomcat.util.net.NioEndpoint$ SocketProcessor.run(NioEndpoint.java:1513 ) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) в org.apache.tomcat.util.threads.TaskThread$ WrappingRunnable.run(TaskThread.java:61) на java.lang.Thread.run(Thread.java:745)   -  person Qohelet    schedule 28.12.2015