View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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          // implicit
57          // setProperty("openjpa.DataCache", "jcache");
58          // setProperty("openjpa.QueryCache", "jcache");
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 }