Я пытаюсь внедрить EHCache в свой рабочий прототип, где у меня есть javax.persistence.Entity , представляющая таблицу в моей базе данных (MySQL, mysql -коннектор -java -5.1.20.jar ), которые предоставляются потребителям в виде XML.
Проблема, с которой я столкнулся, заключается в том, что Hibernate все еще извлекает данные из базы данных, даже когда EHCache сохраняет результат запроса в памяти .
Я использую монитор EHCache , чтобы увидеть количество элементов в памяти и изменить данные непосредственно в базе данных до истечения срока действия кеша, чтобы узнать, действительно ли используются кэшированные данные.
Я безуспешно искал репликацию для этой проблемы, так что, возможно, я что-то упустил (Я просто вхожу в мир Java ).
pom.xml
org.hibernate
hibernate-validator
4.3.0.Final
org.hibernate
hibernate-entitymanager
4.1.4.Final
org.hibernate
hibernate-ehcache
4.1.4.Final
net.sf.ehcache
ehcache-core
2.5.2
org.terracotta
ehcache-probe
1.0.2
Класс сущности
package myPrototype.entities
import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity @Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
@Table(name = "Cars")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Cars.findAll", query = "SELECT d FROM Cars d"),
[...]
public class Cars implements Serializable {
private static final long serialVersionUID = 1L;
@Basic(optional = false)
@NotNull
@Column(name = "id")
@ReferenceField
private int id;
[...]
ehcache.xml
*Я попытался установить вечный = "true", но результат все тот же
постоянство.xml
org.hibernate.ejb.HibernatePersistence
java:app/jdbc/mysqlserver/prototype
false
ENABLE_SELECTIVE
*Я пробовал переключаться между SingletonEhCacheRegionFactory и EhCacheRegionFactory
. EJB
import myPrototype.entities.Cars
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class CarsEJB {
@PersistenceContext(unitName="MyPrototype")
private EntityManager em;
@Override
public List getCars() {
return (List)em.createNamedQuery("Cars.findAll").setMaxResults(200).getResultList();
}
}
*Добавлено, чтобы уточнить, как я запускаю запрос
Как я уже сказал, я могу видеть количество элементов в памяти через монитор EHCache, поэтому я отметил следующее: -Срок действия загруженных элементов конфигурации ehcache истекает -Срок действия элементов не сбрасывается при выполнении запроса, пока они еще живы (срок их действия истек через N секунд после первого запроса ).
Очередной раз; Я новичок в java, поэтому предположим, что мне могут не хватать основных понятий.
Спасибо за чтение!