Author: ppoddar
Date: Mon Jul 14 13:46:18 2008
New Revision: 676727
URL: http://svn.apache.org/viewvc?rev=676727&view=rev
Log:
OPENJPA-659: Dirty checking fails for runtime enhanced classes. The original
case reported the failure in a Spring-Tomcat-Weaver with Embdded field. But as
TestSimpleUnenhancedQuery can raise the same failure in a simpler settings. The
fix is related to initializing a SaveFieldManager conditional to having loaded
fields at invocation of saveFields(). The fix removes the condition and ensures
that a SaveFieldManager is assocaited even when saveFields() is invoked without
any field loaded.
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?rev=676727&r1=676726&r2=676727&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
Mon Jul 14 13:46:18 2008
@@ -2660,6 +2660,12 @@
for (int i = 0, len = _loaded.length(); i < len; i++)
saveField(i);
_flags &= ~FLAG_SAVE;
+ // OPENJPA-659
+ // record a saved field manager even if no field is currently
loaded
+ // as existence of a SaveFieldManager is critical for a dirty check
+ if (_saved == null)
+ _saved = new SaveFieldManager(this, getPersistenceCapable(),
+ _dirty);
}
}
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java?rev=676727&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java
(added)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java
Mon Jul 14 13:46:18 2008
@@ -0,0 +1,49 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openjpa.enhance;
+
+import javax.persistence.EntityManager;
+
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+/**
+ * A simple query fails with unenhanced (or runtime enhanced classes)
+ * as originally reported in
+ * <A HREF="https://issues.apache.org/jira/browse/OPENJPA-659">OPENJPA-659</A>.
+ * The original issue reports the failure in a Spring-Tomcat-Weaver settings
+ * with embedded instances but even the following test shows the same failure
+ * in a simpler settings.
+ *
+ * @author Pinaki Poddar
+ *
+ */
+public class TestSimpleUnenhancedQuery extends SingleEMFTestCase {
+ public void setUp() throws Exception {
+ setUp(CLEAR_TABLES, UnenhancedPObject.class);
+ EntityManager em = emf.createEntityManager();
+ em.getTransaction().begin();
+ em.persist(new UnenhancedPObject());
+ em.getTransaction().commit();
+ }
+
+ public void testExtentQuery() {
+ EntityManager em = emf.createEntityManager();
+ assertFalse(em.createQuery("SELECT p FROM UnenhancedPObject p")
+ .getResultList().isEmpty());
+ }
+}
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java?rev=676727&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java
(added)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java
Mon Jul 14 13:46:18 2008
@@ -0,0 +1,25 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openjpa.enhance;
+
+import javax.persistence.Entity;
+
[EMAIL PROTECTED]
+public class UnenhancedPObject {
+
+}