У нас есть веб-приложение, написанное на Java, работающее на GlassFish, которое использует EhCache в качестве механизма кэширования второго уровня. Мы определили, что трафик не гарантирует кэш-память второго уровня, и решили удалить его. Однако, очевидно, это не так просто, как первоначально предполагалось.
Я изменяю файл persistence.xml, чтобы включить ... <property name="hibernate.cache.use_second_level_cache" value="false"/>
, и удалил ehcache из нашего Maven POM.
Он читается иинициализируется через ... EntityManagerFactory emf = Persistence.createEntityManagerFactory("devDB");
.
Full persistence.xml ...
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
<persistence-unit name="devDB" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/nepedia</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>ALL</shared-cache-mode>
<properties>
<property name="hibernate.ejb.entitymanager_factory_name" value="devDB"/>
<property name="hibernate.connection.release_mode" value="auto" />
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>
<property name="hibernate.current_session_context_class" value="jta"/>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.use_sql_comments" value="false" />
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.generate_statistics" value="true"/>
<property name="hibernate.cache.use_structured_queries" value="false"/>
<property name="hibernate.cache.use_minimal_puts" value="false"/>
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
</persistence-unit>
</persistence>
Когда я развертываю приложение в Glassfish, оно жалуется ... Caused by: org.hibernate.cache.NoCacheRegionFactoryAvailableException: Second-level cache is used in the application, but property hibernate.cache.region.factory_class is not given; please either disable second level cache or set correct region factory using the hibernate.cache.region.factory_class setting and make sure the second level cache provider (hibernate-infinispan, e.g.) is available on the classpath.
Есть ли другое место, где это можно установить?