OPENJPA-680 - After load and after refresh callbacks were each resulting in a post load call resulting in the duplicate call. Fix addresses the same and re-introduces the original fix(Merge back from trunk).

git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/0.9.7-r547073@719358 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
index f170420..4ce688a 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
@@ -320,7 +320,8 @@
      */
     protected boolean load(FetchConfiguration fetch, int loadMode,
         BitSet exclude, Object sdata, boolean forWrite) {
-        if (!forWrite && (!isPersistent() || isNew() || isDeleted()))
+        if (!forWrite
+            && (!isPersistent() || (isNew() && !isFlushed()) || isDeleted()))
             return false;
 
         // if any fields being loaded, do state transitions for read
diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
new file mode 100644
index 0000000..cd84f7a
--- /dev/null
+++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
@@ -0,0 +1,39 @@
+/*

+ * 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.persistence.simple;

+

+import org.apache.openjpa.persistence.test.SingleEMTestCase;

+

+public class TestRefresh extends SingleEMTestCase {

+

+    public void setUp() {

+        super.setUp(CLEAR_TABLES, Item.class, "openjpa.AutoDetach", "commit");

+    }

+

+    public void testFlushRefreshNewInstance() {

+        em.getTransaction().begin();

+        Item item = new Item();

+        item.setItemData("Test Data");

+        em.persist(item);

+        em.flush();

+        em.refresh(item);

+        em.getTransaction().commit();

+        assertEquals("Test Data", item.getItemData());

+    }

+}

diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java
index 2f1a9c8..64f81f9 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java
@@ -57,8 +57,7 @@
             case POST_UPDATE:
                 return new int[]{ LifecycleEvent.AFTER_STORE };
             case POST_LOAD:
-                return new int[]{ LifecycleEvent.AFTER_LOAD,
-                    LifecycleEvent.AFTER_REFRESH };
+                return new int[]{ LifecycleEvent.AFTER_LOAD };
             default:
                 return null;
         }
diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java
index 60738b4..bad534a 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java
@@ -91,7 +91,7 @@
     }
 
     public void afterRefresh(LifecycleEvent event) {
-        makeCallback(event);
+        // no analagous callback
     }
 
     public void beforeStore(LifecycleEvent event) {