Merge branch 'master' of ssh://git.eclipse.org/gitroot/eclipselink/examples
diff --git a/jpa/employee/employee.dynamic/.classpath b/jpa/employee.dynamic/.classpath
similarity index 100%
rename from jpa/employee/employee.dynamic/.classpath
rename to jpa/employee.dynamic/.classpath
diff --git a/jpa/employee/employee.dynamic/.project b/jpa/employee.dynamic/.project
similarity index 100%
rename from jpa/employee/employee.dynamic/.project
rename to jpa/employee.dynamic/.project
diff --git a/jpa/employee/employee.dynamic/.settings/org.eclipse.core.resources.prefs b/jpa/employee.dynamic/.settings/org.eclipse.core.resources.prefs
similarity index 100%
rename from jpa/employee/employee.dynamic/.settings/org.eclipse.core.resources.prefs
rename to jpa/employee.dynamic/.settings/org.eclipse.core.resources.prefs
diff --git a/jpa/employee/employee.dynamic/.settings/org.eclipse.jdt.core.prefs b/jpa/employee.dynamic/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from jpa/employee/employee.dynamic/.settings/org.eclipse.jdt.core.prefs
rename to jpa/employee.dynamic/.settings/org.eclipse.jdt.core.prefs
diff --git a/jpa/employee/employee.dynamic/.settings/org.eclipse.jpt.core.prefs b/jpa/employee.dynamic/.settings/org.eclipse.jpt.core.prefs
similarity index 100%
rename from jpa/employee/employee.dynamic/.settings/org.eclipse.jpt.core.prefs
rename to jpa/employee.dynamic/.settings/org.eclipse.jpt.core.prefs
diff --git a/jpa/employee/employee.dynamic/.settings/org.eclipse.m2e.core.prefs b/jpa/employee.dynamic/.settings/org.eclipse.m2e.core.prefs
similarity index 100%
rename from jpa/employee/employee.dynamic/.settings/org.eclipse.m2e.core.prefs
rename to jpa/employee.dynamic/.settings/org.eclipse.m2e.core.prefs
diff --git a/jpa/employee/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml b/jpa/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
similarity index 100%
rename from jpa/employee/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
rename to jpa/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
diff --git a/jpa/employee/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.xml b/jpa/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.xml
similarity index 100%
rename from jpa/employee/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.xml
rename to jpa/employee.dynamic/.settings/org.eclipse.wst.common.project.facet.core.xml
diff --git a/jpa/employee/employee.dynamic/pom.xml b/jpa/employee.dynamic/pom.xml
similarity index 100%
rename from jpa/employee/employee.dynamic/pom.xml
rename to jpa/employee.dynamic/pom.xml
diff --git a/jpa/employee/employee.dynamic/src/main/java/org/eclipse/persistence/dynamic/ReflectiveDynamicClassLoader.java b/jpa/employee.dynamic/src/main/java/org/eclipse/persistence/dynamic/ReflectiveDynamicClassLoader.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/main/java/org/eclipse/persistence/dynamic/ReflectiveDynamicClassLoader.java
rename to jpa/employee.dynamic/src/main/java/org/eclipse/persistence/dynamic/ReflectiveDynamicClassLoader.java
diff --git a/jpa/employee/employee.dynamic/src/main/resources/META-INF/employee-constraints.xml b/jpa/employee.dynamic/src/main/resources/META-INF/employee-constraints.xml
similarity index 100%
rename from jpa/employee/employee.dynamic/src/main/resources/META-INF/employee-constraints.xml
rename to jpa/employee.dynamic/src/main/resources/META-INF/employee-constraints.xml
diff --git a/jpa/employee/employee.dynamic/src/main/resources/META-INF/employee-orm.xml b/jpa/employee.dynamic/src/main/resources/META-INF/employee-orm.xml
similarity index 100%
rename from jpa/employee/employee.dynamic/src/main/resources/META-INF/employee-orm.xml
rename to jpa/employee.dynamic/src/main/resources/META-INF/employee-orm.xml
diff --git a/jpa/employee/employee.dynamic/src/main/resources/META-INF/persistence.xml b/jpa/employee.dynamic/src/main/resources/META-INF/persistence.xml
similarity index 100%
rename from jpa/employee/employee.dynamic/src/main/resources/META-INF/persistence.xml
rename to jpa/employee.dynamic/src/main/resources/META-INF/persistence.xml
diff --git a/jpa/employee/employee.dynamic/src/main/resources/META-INF/validation.xml b/jpa/employee.dynamic/src/main/resources/META-INF/validation.xml
similarity index 100%
rename from jpa/employee/employee.dynamic/src/main/resources/META-INF/validation.xml
rename to jpa/employee.dynamic/src/main/resources/META-INF/validation.xml
diff --git a/jpa/employee/employee.dynamic/src/test/java/example/EmployeeDynamicMappings.java b/jpa/employee.dynamic/src/test/java/example/EmployeeDynamicMappings.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/test/java/example/EmployeeDynamicMappings.java
rename to jpa/employee.dynamic/src/test/java/example/EmployeeDynamicMappings.java
diff --git a/jpa/employee/employee.dynamic/src/test/java/example/PersistenceHelper.java b/jpa/employee.dynamic/src/test/java/example/PersistenceHelper.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/test/java/example/PersistenceHelper.java
rename to jpa/employee.dynamic/src/test/java/example/PersistenceHelper.java
diff --git a/jpa/employee/employee.dynamic/src/test/java/example/Queries.java b/jpa/employee.dynamic/src/test/java/example/Queries.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/test/java/example/Queries.java
rename to jpa/employee.dynamic/src/test/java/example/Queries.java
diff --git a/jpa/employee/employee.dynamic/src/test/java/example/Samples.java b/jpa/employee.dynamic/src/test/java/example/Samples.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/test/java/example/Samples.java
rename to jpa/employee.dynamic/src/test/java/example/Samples.java
diff --git a/jpa/employee/employee.dynamic/src/test/java/example/Transactions.java b/jpa/employee.dynamic/src/test/java/example/Transactions.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/test/java/example/Transactions.java
rename to jpa/employee.dynamic/src/test/java/example/Transactions.java
diff --git a/jpa/employee/employee.dynamic/src/test/java/tests/TestDynamicUsingAPI.java b/jpa/employee.dynamic/src/test/java/tests/TestDynamicUsingAPI.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/test/java/tests/TestDynamicUsingAPI.java
rename to jpa/employee.dynamic/src/test/java/tests/TestDynamicUsingAPI.java
diff --git a/jpa/employee/employee.dynamic/src/test/java/tests/TestDynamicUsingXML.java b/jpa/employee.dynamic/src/test/java/tests/TestDynamicUsingXML.java
similarity index 100%
rename from jpa/employee/employee.dynamic/src/test/java/tests/TestDynamicUsingXML.java
rename to jpa/employee.dynamic/src/test/java/tests/TestDynamicUsingXML.java
diff --git a/jpa/employee/employee.model-nosql/.gitignore b/jpa/employee/employee.model-nosql/.gitignore
deleted file mode 100644
index 5e56e04..0000000
--- a/jpa/employee/employee.model-nosql/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin
diff --git a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address.java b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address.java
index 91daa13..c88c514 100644
--- a/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address.java
+++ b/jpa/employee/employee.model/src/main/java/eclipselink/example/jpa/employee/model/Address.java
@@ -13,12 +13,20 @@
******************************************************************************/
package eclipselink.example.jpa.employee.model;
-import javax.persistence.*;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Version;
-import org.eclipse.persistence.annotations.FetchGroup;
+import org.eclipse.persistence.annotations.Cache;
-@FetchGroup(name="1", attributes={})
@Entity
+@Cache(refreshOnlyIfNewer=true)
public class Address {
@Id
@Column(name = "ADDRESS_ID")
@@ -42,6 +50,9 @@
@Basic
private String street;
+
+ @Version
+ private long version;
public Address() {
}
@@ -102,4 +113,12 @@
public void setStreet(String street) {
this.street = street;
}
+
+ public long getVersion() {
+ return version;
+ }
+
+ public void setVersion(long version) {
+ this.version = version;
+ }
}
diff --git a/jpa/employee/employee.model/src/main/java/resources/application.properties b/jpa/employee/employee.model/src/main/java/resources/application.properties
deleted file mode 100644
index 66eed33..0000000
--- a/jpa/employee/employee.model/src/main/java/resources/application.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# -- welcome --
-welcomeTitle=JSF Blank Application
-
-welcomeHeading=Welcome!
-
-welcomeMessage=This is a JSF blank application. \
- You can find the application.properties file with this message in the src/resources folder.
diff --git a/jpa/employee/employee.model/src/test/java/test/PessimisticLockTest.java b/jpa/employee/employee.model/src/test/java/test/PessimisticLockTest.java
index 7bbeeb2..1762946 100644
--- a/jpa/employee/employee.model/src/test/java/test/PessimisticLockTest.java
+++ b/jpa/employee/employee.model/src/test/java/test/PessimisticLockTest.java
@@ -16,8 +16,16 @@
import javax.persistence.EntityManagerFactory;
import javax.persistence.LockModeType;
+import org.eclipse.persistence.descriptors.ClassDescriptor;
+import org.eclipse.persistence.jpa.JpaHelper;
+import org.eclipse.persistence.queries.ReadObjectQuery;
+import org.eclipse.persistence.queries.ReportQuery;
+import org.eclipse.persistence.sessions.UnitOfWork;
+import org.eclipse.persistence.sessions.server.ClientSession;
+import org.eclipse.persistence.sessions.server.Server;
import org.junit.AfterClass;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -47,13 +55,13 @@
Assert.assertNotNull(addr);
Assert.assertNull(addr.getCity());
Assert.assertEquals(em.getLockMode(addr), LockModeType.PESSIMISTIC_WRITE);
-
+
addr.setCity("Ottawa");
Assert.assertNotNull(addr.getCity());
-
+
em.lock(addr, LockModeType.PESSIMISTIC_WRITE);
-
+
Assert.assertEquals(em.getLockMode(addr), LockModeType.PESSIMISTIC_WRITE);
Assert.assertNotNull(addr.getCity());
@@ -62,6 +70,157 @@
em.close();
}
+ @Test
+ public void testRefreshIfNewerTXN() {
+ EntityManager em = getEmf().createEntityManager();
+
+ int id = em.createQuery("SELECT a.id FROM Address a", Number.class).getSingleResult().intValue();
+
+ em.getTransaction().begin();
+
+ Address addr = em.find(Address.class, id);
+
+ Assert.assertNotNull(addr);
+ Assert.assertNull(addr.getCity());
+
+ addr.setCity("Ottawa");
+
+ Assert.assertNotNull(addr.getCity());
+
+ em.refresh(addr);
+
+ Assert.assertNotNull(addr.getCity());
+
+ em.getTransaction().rollback();
+
+ em.close();
+ }
+
+ @Test
+ public void testRefreshIfNewer() {
+ EntityManager em = getEmf().createEntityManager();
+
+ int id = em.createQuery("SELECT a.id FROM Address a", Number.class).getSingleResult().intValue();
+
+ Address addr = em.find(Address.class, id);
+
+ Assert.assertNotNull(addr);
+ Assert.assertNull(addr.getCity());
+
+ addr.setCity("Ottawa");
+
+ Assert.assertNotNull(addr.getCity());
+
+ em.refresh(addr);
+
+ Assert.assertNotNull(addr.getCity());
+
+ em.close();
+ }
+
+ @Test
+ public void testRefreshIfNewerNativeServer() {
+ Server session = JpaHelper.getServerSession(getEmf());
+
+ ReportQuery idQuery = new ReportQuery();
+ idQuery.setReferenceClass(Address.class);
+ idQuery.addAttribute("id");
+ idQuery.setShouldReturnSingleAttribute(true);
+ idQuery.setShouldReturnSingleValue(true);
+
+ int id = ((Number) session.executeQuery(idQuery)).intValue();
+
+ ReadObjectQuery addrQuery = new ReadObjectQuery();
+ addrQuery.setReferenceClass(Address.class);
+ addrQuery.setSelectionCriteria(addrQuery.getExpressionBuilder().get("id").equal(id));
+
+ Address addr = (Address) session.executeQuery(addrQuery);
+
+ Assert.assertNotNull(addr);
+ Assert.assertNull(addr.getCity());
+
+ addr.setCity("Ottawa");
+
+ Assert.assertNotNull(addr.getCity());
+
+ session.refreshObject(addr);
+
+ Assert.assertNotNull(addr.getCity());
+
+ }
+
+ @Test
+ public void testRefreshIfNewerNativeClientSession() {
+ Server session = JpaHelper.getServerSession(getEmf());
+ ClientSession cs = session.acquireClientSession();
+
+ ReportQuery idQuery = new ReportQuery();
+ idQuery.setReferenceClass(Address.class);
+ idQuery.addAttribute("id");
+ idQuery.setShouldReturnSingleAttribute(true);
+ idQuery.setShouldReturnSingleValue(true);
+
+ int id = ((Number) cs.executeQuery(idQuery)).intValue();
+
+ ReadObjectQuery addrQuery = new ReadObjectQuery();
+ addrQuery.setReferenceClass(Address.class);
+ addrQuery.setSelectionCriteria(addrQuery.getExpressionBuilder().get("id").equal(id));
+
+ Address addr = (Address) cs.executeQuery(addrQuery);
+
+ Assert.assertNotNull(addr);
+ Assert.assertNull(addr.getCity());
+
+ addr.setCity("Ottawa");
+
+ Assert.assertNotNull(addr.getCity());
+
+ cs.refreshObject(addr);
+
+ Assert.assertNotNull(addr.getCity());
+
+ }
+
+ @Test
+ public void testRefreshIfNewerNativeUOW() {
+ Server session = JpaHelper.getServerSession(getEmf());
+ UnitOfWork uow = session.acquireUnitOfWork();
+
+ ReportQuery idQuery = new ReportQuery();
+ idQuery.setReferenceClass(Address.class);
+ idQuery.addAttribute("id");
+ idQuery.setShouldReturnSingleAttribute(true);
+ idQuery.setShouldReturnSingleValue(true);
+
+ int id = ((Number) uow.executeQuery(idQuery)).intValue();
+
+ ReadObjectQuery addrQuery = new ReadObjectQuery();
+ addrQuery.setReferenceClass(Address.class);
+ addrQuery.setSelectionCriteria(addrQuery.getExpressionBuilder().get("id").equal(id));
+
+ Address addr = (Address) uow.executeQuery(addrQuery);
+
+ Assert.assertNotNull(addr);
+ Assert.assertNull(addr.getCity());
+
+ addr.setCity("Ottawa");
+
+ Assert.assertNotNull(addr.getCity());
+
+ uow.refreshObject(addr);
+
+ Assert.assertNotNull(addr.getCity());
+
+ }
+
+ @Test
+ public void verifyConfig() {
+ ClassDescriptor desc = JpaHelper.getServerSession(getEmf()).getClassDescriptorForAlias("Address");
+ Assert.assertNotNull(desc);
+
+ Assert.assertTrue(desc.getCachePolicy().shouldOnlyRefreshCacheIfNewerVersion());
+ }
+
private static EntityManagerFactory emf;
private static Diagnostics diagnostics;
@@ -98,4 +257,8 @@
emf = null;
}
+ @Before
+ public void clearCache() {
+ JpaHelper.getServerSession(getEmf()).getIdentityMapAccessor().initializeAllIdentityMaps();
+ }
}
diff --git a/jpa/employee/wls-example.war b/jpa/employee/wls-example.war
deleted file mode 100644
index c5d2ee5..0000000
--- a/jpa/employee/wls-example.war
+++ /dev/null
Binary files differ