You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2010/03/05 23:38:59 UTC
svn commit: r919657 - in
/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa:
enhance/ManagedClassSubclasser.java kernel/BrokerImpl.java
kernel/DetachManagerLite.java
Author: curtisr7
Date: Fri Mar 5 22:38:59 2010
New Revision: 919657
URL: http://svn.apache.org/viewvc?rev=919657&view=rev
Log:
OPENJPA-1545: Refectored code. Fixed bug where unloaded fields were being loaded due to detach.
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManagerLite.java
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java?rev=919657&r1=919656&r2=919657&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/ManagedClassSubclasser.java Fri Mar 5 22:38:59 2010
@@ -289,7 +289,7 @@
}
}
- private static void debugBytecodes(BCClass bc) throws IOException {
+ public static void debugBytecodes(BCClass bc) throws IOException {
// Write the bytecodes to disk for debugging purposes.
if ("true".equals(System.getProperty(
ManagedClassSubclasser.class.getName() + ".dumpBytecodes")))
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java?rev=919657&r1=919656&r2=919657&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java Fri Mar 5 22:38:59 2010
@@ -3348,10 +3348,12 @@
}
private void detachAllInternalLite() {
- Collection<StateManagerImpl> states = getManagedStates();
- // TODO : should I call clear on old cache first? perhaps a memory leak?
- // Clear out all persistence context caches.
+ ManagedCache old = _cache;
_cache = new ManagedCache(this);
+ // TODO : should I call clear on old cache first? perhaps a memory leak?
+ Collection<StateManagerImpl> states = old.copy();
+
+ // Clear out all persistence context caches.
if (_transCache != null) {
_transCache.clear();
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManagerLite.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManagerLite.java?rev=919657&r1=919656&r2=919657&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManagerLite.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DetachManagerLite.java Fri Mar 5 22:38:59 2010
@@ -18,6 +18,7 @@
*/
package org.apache.openjpa.kernel;
+import java.util.BitSet;
import java.util.Collection;
import org.apache.openjpa.enhance.PersistenceCapable;
@@ -30,10 +31,7 @@
*
*/
public class DetachManagerLite {
- final TransferFieldManager _fm;
-
public DetachManagerLite() {
- _fm = new TransferFieldManager();
}
/**
@@ -43,13 +41,17 @@
* The StateManagers to be detached.
*/
public void detachAll(Collection<StateManagerImpl> states) {
+ TransferFieldManager fm = new TransferFieldManager();
for (StateManagerImpl sm : states) {
ClassMetaData cmd = sm.getMetaData();
if (sm.isPersistent() && cmd.isDetachable()) {
PersistenceCapable pc = sm.getPersistenceCapable();
// Detach proxy fields.
+ BitSet loaded = sm.getLoaded();
for (FieldMetaData fmd : cmd.getProxyFields()) {
- detachProxyField(fmd, pc, sm);
+ if (loaded.get(fmd.getIndex())) {
+ detachProxyField(fmd, pc, sm, fm);
+ }
}
pc.pcReplaceStateManager(null);
}
@@ -66,20 +68,20 @@
* @param sm
* The StateManagerImpl that the PersistenceCapable belongs to.
*/
- private void detachProxyField(FieldMetaData fmd, PersistenceCapable pc, StateManagerImpl sm) {
+ private void detachProxyField(FieldMetaData fmd, PersistenceCapable pc, StateManagerImpl sm, TransferFieldManager fm) {
int fieldIndex = fmd.getIndex();
if (fmd.isLRS() == true) {
// need to null out LRS fields.
- nullField(fieldIndex, pc, sm);
+ nullField(fieldIndex, pc, sm, fm);
} else {
Object o = sm.fetchObject(fieldIndex);
if (o instanceof Proxy) {
// Get unproxied object and replace
Proxy proxy = (Proxy) o;
Object unproxied = proxy.copy(proxy);
- _fm.storeObjectField(fieldIndex, unproxied);
- sm.replaceField(pc, _fm, fieldIndex);
- _fm.clear();
+ fm.storeObjectField(fieldIndex, unproxied);
+ sm.replaceField(pc, fm, fieldIndex);
+ fm.clear();
// clean up old proxy
proxy.setOwner(null, -1);
if (proxy.getChangeTracker() != null) {
@@ -99,9 +101,9 @@
* @param sm
* The StateManagerImpl that the PersistenceCapable belongs to.
*/
- private void nullField(int fieldIndex, PersistenceCapable pc, StateManagerImpl sm) {
- _fm.storeObjectField(fieldIndex, null);
- sm.replaceField(pc, _fm, fieldIndex);
- _fm.clear();
+ private void nullField(int fieldIndex, PersistenceCapable pc, StateManagerImpl sm, TransferFieldManager fm) {
+ fm.storeObjectField(fieldIndex, null);
+ sm.replaceField(pc, fm, fieldIndex);
+ fm.clear();
}
}