[Joafip-svn] SF.net SVN: joafip:[2932] trunk/joafip/src/main/java/net/sf/joafip/store
Brought to you by:
luc_peuvrier
|
From: <luc...@us...> - 2011-10-21 01:36:37
|
Revision: 2932
http://joafip.svn.sourceforge.net/joafip/?rev=2932&view=rev
Author: luc_peuvrier
Date: 2011-10-21 01:36:31 +0000 (Fri, 21 Oct 2011)
Log Message:
-----------
do not weak reference object if acceded
Modified Paths:
--------------
trunk/joafip/src/main/java/net/sf/joafip/store/entity/objectio/ObjectAndPersistInfo.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/IObjectIOManagerForProxyObjectIO.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/ObjectIOManager.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/SerializerObjectIOManager.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/input/AbstractObjectInputGeneric.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/output/AbstractObjectOutput.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/proxy/ProxyCallBack.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/saver/StoreSaver3.java
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/entity/objectio/ObjectAndPersistInfo.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/entity/objectio/ObjectAndPersistInfo.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/entity/objectio/ObjectAndPersistInfo.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -137,8 +137,11 @@
public ObjectAndPersistInfo nextReferenced;
+ // FIXMELUC __why for checkAssertNotNull
public boolean checkAssertNotNull = true;
+ public boolean acceded;
+
/**
* for {@link #NULL} and {@link ObjectAndPersistInfo#NULL_DEFINED }
*/
@@ -412,7 +415,7 @@
// object!=null may be unreferenced object and statemap not already
// cleared
final boolean weaked;
- if (weakReference == null && object != null) {
+ if (!acceded && weakReference == null && object != null) {
weakReference = new ObjectAndPersistInfoWeakReference(object, this,
queue);
clear();// Unreferenced
@@ -591,7 +594,7 @@
} else {
weak = weakReference.get();
}
- return /**/"weeakReference["
+ return /**/"weakReference["
/**/+ (weakReference == null ?
/**/"none" : // NOPMD
/**/(weak == null ? "null" : (weak.getClass()
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/IObjectIOManagerForProxyObjectIO.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/IObjectIOManagerForProxyObjectIO.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/IObjectIOManagerForProxyObjectIO.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -169,6 +169,9 @@
void unsetProxyObjectState(ObjectAndPersistInfo objectAndItsClassInfo)
throws ObjectIOException, ObjectIOInvalidClassException;
+ void saveAndUnsetProxyObjectState(ObjectAndPersistInfo objectAndItsClassInfo)
+ throws ObjectIOException, ObjectIOInvalidClassException;
+
IProxyManagerForObjectIO getProxyManager2();
ClassInfoFactory getClassInfoFactory();
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/ObjectIOManager.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/ObjectIOManager.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/ObjectIOManager.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -308,6 +308,14 @@
}
@Override
+ public void saveAndUnsetProxyObjectState(
+ final ObjectAndPersistInfo objectAndItsClassInfo)
+ throws ObjectIOException, ObjectIOInvalidClassException {
+ save();
+ unsetProxyObjectState(objectAndItsClassInfo);
+ }
+
+ @Override
protected DataRecordIdentifier associateNewDataRecordIdentifierToObject(
final ObjectAndPersistInfo objectAndPersistInfo)
throws ObjectIODataCorruptedException, ObjectIOException {
@@ -624,6 +632,7 @@
@Override
public void objectIsAccessed(final ObjectAndPersistInfo objectAndPersistInfo) {
+ objectAndPersistInfo.acceded = true;
objectIsAccessedDelegate(objectAndPersistInfo);
}
@@ -683,34 +692,36 @@
// final int numberOfObjectState = getNumberOfObjectState();
final int numberOfObjectState = getNumberOfReferenced();
if (numberOfObjectState >= maxInMemoryThreshold && doAutoSave()) {
- try {
- final long beginTime = System.currentTimeMillis();
- final boolean saveDone = saver.autoSave();
- if (saveDone) {
- final long duration = System.currentTimeMillis()
- - beginTime;
- final int newNumberOfObjectState = getNumberOfObjectState();
- final int numberOfWeakreference = getNumberOfWeakReference();
- if (autoSaveEventListener != null) {
- autoSaveEventListener.saveDone(
- newNumberOfObjectState,
- numberOfWeakreference, duration);
- }
- }
- } catch (final FilePersistenceException exception) {
- throw new ObjectIOException(exception);
- } catch (final FilePersistenceInvalidClassException exception) {
- throw new ObjectIOException(exception);
- } catch (final FilePersistenceNotSerializableException exception) {
- throw new ObjectIOException(exception);
- } catch (final FilePersistenceClassNotFoundException exception) {
- throw new ObjectIOException(exception);
- } catch (final FilePersistenceDataCorruptedException exception) {
- throw new ObjectIOException(exception);
- } catch (final FilePersistenceTooBigForSerializationException exception) {
- throw new ObjectIOException(exception);
+ save();
+ }
+ }
+ }
+
+ protected void save() throws ObjectIOException {
+ try {
+ final long beginTime = System.currentTimeMillis();
+ final boolean saveDone = saver.autoSave();
+ if (saveDone) {
+ final long duration = System.currentTimeMillis() - beginTime;
+ final int newNumberOfObjectState = getNumberOfObjectState();
+ final int numberOfWeakreference = getNumberOfWeakReference();
+ if (autoSaveEventListener != null) {
+ autoSaveEventListener.saveDone(newNumberOfObjectState,
+ numberOfWeakreference, duration);
}
}
+ } catch (final FilePersistenceException exception) {
+ throw new ObjectIOException(exception);
+ } catch (final FilePersistenceInvalidClassException exception) {
+ throw new ObjectIOException(exception);
+ } catch (final FilePersistenceNotSerializableException exception) {
+ throw new ObjectIOException(exception);
+ } catch (final FilePersistenceClassNotFoundException exception) {
+ throw new ObjectIOException(exception);
+ } catch (final FilePersistenceDataCorruptedException exception) {
+ throw new ObjectIOException(exception);
+ } catch (final FilePersistenceTooBigForSerializationException exception) {
+ throw new ObjectIOException(exception);
}
}
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/SerializerObjectIOManager.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/SerializerObjectIOManager.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/manager/SerializerObjectIOManager.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -375,6 +375,13 @@
throw new ObjectIOException(MUST_NOT_BE_CALLED);
}
+ @Override
+ public void saveAndUnsetProxyObjectState(
+ final ObjectAndPersistInfo objectAndItsClassInfo)
+ throws ObjectIOException, ObjectIOInvalidClassException {
+ throw new ObjectIOException(MUST_NOT_BE_CALLED);
+ }
+
/** not maintain in memory for joafip serialization in one data record */
@Override
public boolean isMaintainInMemoryEnabled() {
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/input/AbstractObjectInputGeneric.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/input/AbstractObjectInputGeneric.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/input/AbstractObjectInputGeneric.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -200,7 +200,6 @@
ObjectIODataRecordNotFoundException, ObjectIOInvalidClassException,
ObjectIOClassNotFoundException, ObjectIODataCorruptedException,
ObjectIONotSerializableException {
-
final FieldInfo[] fieldToSetInfo = getFieldToSetInfoImpl(objectAndPersistInfo.objectClassInfo);
objectAndPersistInfo.fieldToSetInfo = fieldToSetInfo;
@@ -923,8 +922,8 @@
fieldValueAndPersistInfo);
}
if (logger.debugEnabled) {
- logger.debug("set field " + fieldInfo.getFieldName() + " is null="
- + (fieldValueAndPersistInfo.getObject() == null));
+ logger.debug("set field " + fieldInfo.getFieldName() + " value="
+ + fieldValueAndPersistInfo);
}
}
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/output/AbstractObjectOutput.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/output/AbstractObjectOutput.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/objectio/serialize/output/AbstractObjectOutput.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -307,10 +307,10 @@
.getDeclaredClassInfo();
final String name = declaredClassInfo.getName();
if (logger.debugEnabled) {
- logger.debug("wrote field " + name + ", is null="
- + (value == null) + ", primitive="
- + declaredClassInfo.isPrimitiveType() + ", at offset "
- + offset);
+ logger.debug("wrote field " + name + ", value="
+ + valueAndType.getObjectAndPersistInfo()
+ + ", primitive=" + declaredClassInfo.isPrimitiveType()
+ + ", at offset " + offset);
}
}
if (valueAndType.declaredIsBasicOrPrimitive()) {
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/proxy/ProxyCallBack.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/proxy/ProxyCallBack.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/proxy/ProxyCallBack.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -175,6 +175,17 @@
return result;
}
+ // FIXMELUC _________________________for test
+// private boolean in() {
+// final StackTraceElement[] stackTraceElements = new Exception()
+// .getStackTrace();
+// final StackTraceElement stackTraceElement = stackTraceElements[3];
+// final String className = stackTraceElement.getClassName();
+// final String methodName = stackTraceElement.getMethodName();
+// return className.contains("MultiMap")
+// && methodName.contains("addKeyDefinition");
+// }
+
@Override
@SuppressWarnings("PMD")
public void intercept$JOAFIP$() {
@@ -182,7 +193,12 @@
if (autoSaveEnabled) {
inObjectCount++;
}
-
+ // FIXMELUC _________________________for test
+// if (in()) {
+// System.out.println("intercept " + inObjectCount + " "
+// + proxyObjectAndPersistInfo);
+// }
+ // end for test
if (exclusiveAccessSession) {
try {
objectIOManager.objectIsAccessed(getInstance$JOAFIP$());
@@ -234,11 +250,23 @@
@Override
@SuppressWarnings("PMD")
public void methodEnd$JOAFIP$() {
+ // FIXMELUC _________________________for test
+// if (in()) {
+// System.out.println("methodEnd " + inObjectCount + " "
+// + proxyObjectAndPersistInfo);
+// }
+ // end for test
synchronized (storeMutex) {
if (autoSaveEnabled) {
- inObjectCount--;
+ final ObjectAndPersistInfo instanceAndPersistInfo = getInstance$JOAFIP$();
+ if (--inObjectCount == 0) {
+ instanceAndPersistInfo.acceded = false;
+ }
// ASSERTX
- assert inObjectCount >= 0 : "running in object count can be negative";
+ assert inObjectCount >= 0 : "running in object count can not be negative, is "
+ + inObjectCount
+ + " "
+ + getInstance$JOAFIP$().toString();
if (!wasLoaded && loaded && inObjectCount == 0) {
try {
objectIOManager.newObjectLoaded();
@@ -249,11 +277,10 @@
if (toUnload && inObjectCount == 0) {
toUnload = false;
loaded = false;
- final ObjectAndPersistInfo instanceAndPersistInfo = getInstance$JOAFIP$();
assert instanceAndPersistInfo != null;
try {
objectIOManager
- .unsetProxyObjectState(instanceAndPersistInfo);
+ .saveAndUnsetProxyObjectState(instanceAndPersistInfo);
} catch (Exception exception) {
LOGGER.error("method end interception error", exception);
throw new ProxyInterceptException(
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/saver/StoreSaver3.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/saver/StoreSaver3.java 2011-10-21 01:32:42 UTC (rev 2931)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/saver/StoreSaver3.java 2011-10-21 01:36:31 UTC (rev 2932)
@@ -611,7 +611,6 @@
: object.getClass()));
}
}
-
addToVisitForSave(sons);
}
} catch (final ObjectIOException exception) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|