1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.jcs.jcache.openjpa;
20
21 import org.apache.derby.jdbc.EmbeddedDriver;
22 import org.apache.openjpa.conf.OpenJPAConfiguration;
23 import org.apache.openjpa.datacache.QueryKey;
24 import org.apache.openjpa.persistence.JPAFacadeHelper;
25 import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
26 import org.junit.Test;
27
28 import javax.persistence.Entity;
29 import javax.persistence.EntityManager;
30 import javax.persistence.EntityManagerFactory;
31 import javax.persistence.GeneratedValue;
32 import javax.persistence.Id;
33 import javax.persistence.Persistence;
34 import javax.persistence.Query;
35 import java.util.HashMap;
36 import java.util.Map;
37 import java.util.Properties;
38
39 import static org.hamcrest.CoreMatchers.instanceOf;
40 import static org.junit.Assert.assertEquals;
41 import static org.junit.Assert.assertNotNull;
42 import static org.junit.Assert.assertThat;
43 import static org.junit.Assert.assertTrue;
44
45 public class OpenJPAJCacheDataCacheTest
46 {
47 private static final Properties props = new Properties()
48 {{
49 setProperty("openjpa.MetaDataFactory", "jpa(Types=" + MyEntity.class.getName() + ")");
50 setProperty("openjpa.ConnectionDriverName", EmbeddedDriver.class.getName());
51 setProperty("openjpa.ConnectionURL", "jdbc:derby:memory:test;create=true");
52 setProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema");
53 setProperty("openjpa.DataCacheManager", "jcache");
54 setProperty("openjpa.RuntimeUnenhancedClasses", "supported");
55
56
57
58
59 }};
60
61 @Test
62 public void entity()
63 {
64 final EntityManagerFactory emf = Persistence.createEntityManagerFactory("test-jcache", props);
65 final OpenJPAConfiguration conf = OpenJPAEntityManagerFactorySPI.class.cast(emf).getConfiguration();
66
67 final EntityManager em = emf.createEntityManager();
68
69 final MyEntity entity = new MyEntity();
70 entity.setName("cacheMe1");
71 em.getTransaction().begin();
72 em.persist(entity);
73 em.getTransaction().commit();
74 assertNotNull(conf.getDataCacheManagerInstance().getDataCache("default"));
75
76 assertThat(conf.getDataCacheManagerInstance(), instanceOf(OpenJPAJCacheDataCacheManager.class));
77 assertThat(conf.getDataCacheManagerInstance().getDataCache("default"), instanceOf(OpenJPAJCacheDataCache.class));
78 assertTrue(conf.getDataCacheManagerInstance().getDataCache("default").contains(JPAFacadeHelper.toOpenJPAObjectId(conf.getMetaDataRepositoryInstance().getCachedMetaData(MyEntity.class), entity.getId())));
79
80 em.close();
81
82 emf.close();
83 }
84
85 @Test
86 public void query()
87 {
88 final EntityManagerFactory emf = Persistence.createEntityManagerFactory("test-jcache", props);
89 final OpenJPAConfiguration conf = OpenJPAEntityManagerFactorySPI.class.cast(emf).getConfiguration();
90
91 final EntityManager em = emf.createEntityManager();
92
93 final MyEntity entity = new MyEntity();
94 entity.setName("cacheMe1");
95 em.getTransaction().begin();
96 em.persist(entity);
97 em.getTransaction().commit();
98 final Query query = em.createQuery("select e from OpenJPAJCacheDataCacheTest$MyEntity e where e.id = :id");
99 assertEquals(1, query.setParameter("id", entity.getId()).getResultList().size());
100 assertNotNull(conf.getDataCacheManagerInstance().getDataCache("default"));
101
102 assertThat(conf.getDataCacheManagerInstance(), instanceOf(OpenJPAJCacheDataCacheManager.class));
103 assertThat(conf.getDataCacheManagerInstance().getDataCache("default"), instanceOf(OpenJPAJCacheDataCache.class));
104 assertTrue(conf.getDataCacheManagerInstance().getDataCache("default").contains(JPAFacadeHelper.toOpenJPAObjectId(conf.getMetaDataRepositoryInstance().getCachedMetaData(MyEntity.class), entity.getId())));
105
106 final Map<Object, Object> args = new HashMap<Object, Object>()
107 {{
108 put("id", entity.getId());
109 }};
110 final QueryKey qk = QueryKey.newInstance(query.unwrap(org.apache.openjpa.kernel.Query.class), args);
111 assertNotNull(conf.getDataCacheManagerInstance().getSystemQueryCache().get(qk));
112
113 em.close();
114
115 emf.close();
116 }
117
118 @Entity
119 public static class MyEntity
120 {
121 @Id
122 @GeneratedValue
123 private long id;
124 private String name;
125
126 public long getId()
127 {
128 return id;
129 }
130
131 public String getName()
132 {
133 return name;
134 }
135
136 public void setName(final String name)
137 {
138 this.name = name;
139 }
140 }
141 }