首先,
我有一个使用 JPA/Hibernate 设计的应用程序以实现持久性、一个 JMS 队列和一个与第三方系统的 SOAP Web 服务接口。该应用程序在集群的 JBoss EAP 6.0 服务器中运行。
有 2 个数据库,第一个是 Oracle 10g 数据库,我从中获取我想要处理的所有数据,第二个是 PostgreSQL 数据库,我将处理结果保存到其中。PostgreSQL 数据库用作持久缓存,因为处理来自 Oracle 10g 数据库的数据需要太多时间。整个过程是这样的:
- 从 Oracle 10g 数据库中获取数据
- 处理数据并生成结果
- 将结果异步发送到持久 JMS 队列,并将结果作为 WebService XML 返回
- MDB 使用队列中的结果并使用 JPA 将其保存在数据库中
但是,响应时间仍然太长,我们需要减少它。当我尝试使用 EHCACHE 作为带有 Hibernate 的二级缓存来缓存来自 PostgreSQL 数据库的结果时,缓存仅在我查询两次时才有效。也就是说,如果数据库中有任何更新、删除或插入,缓存就会与它不同步。我的问题是:
当我在数据库中更新/删除/插入某些内容时,我应该如何更新/同步 EHCACHE?
我的 persistence.xml 是:
<persistence-unit name="sDs" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/sDs</jta-data-source>
<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
<mapping-file>META-INF/jpql/NamedQueries.xml</mapping-file>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<class>x.AusenciaX</class>
<properties>
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />
<property name="hibernate.cache.default_cache_concurrency_strategy" value="read-write" />
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.default_schema" value="sisfpj" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.generate_statistics" value="true" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
ehcache.xml:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false" monitoring="autodetect"
dynamicConfig="true">
<defaultCache
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="86400"
timeToLiveSeconds="86400"
overflowToDisk="true"
/>
</ehcache>
提前致谢。