[Joafip-svn] SF.net SVN: joafip:[2915] trunk
Brought to you by:
luc_peuvrier
|
From: <luc...@us...> - 2011-10-03 03:24:49
|
Revision: 2915
http://joafip.svn.sourceforge.net/joafip/?rev=2915&view=rev
Author: luc_peuvrier
Date: 2011-10-03 03:24:41 +0000 (Mon, 03 Oct 2011)
Log Message:
-----------
after check for static field persistence
Modified Paths:
--------------
trunk/joafip/doc/_todo.txt
trunk/joafip/src/main/java/net/sf/joafip/reflect/HelperReflect.java
trunk/joafip/src/main/java/net/sf/joafip/service/AbstractFilePersistenceDelegatingToStore.java
trunk/joafip/src/main/java/net/sf/joafip/service/IFilePersistence.java
trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreSynchro.java
trunk/joafip/src/main/java/net/sf/joafip/store/entity/classinfo/FieldInfo.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/IStore.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/AbstractExporter.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/PersistableWithStaticField.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestAutoSaveWithStatic.java
trunk/joafip/src/test/java/net/sf/joafip/store/service/objectfortest/Bob1.java
trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/manager/TestObjectIOManagerStaticFieldCase.java
trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/serialize/ObjectIOStaticTest.java
trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/service/HeapFileDataManager.java
Modified: trunk/joafip/doc/_todo.txt
===================================================================
--- trunk/joafip/doc/_todo.txt 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/doc/_todo.txt 2011-10-03 03:24:41 UTC (rev 2915)
@@ -20,6 +20,7 @@
- java agent changed
- project divided on sub project
- export speed up
+- kept in memory for object referenced by static field
minor changes:
- added search last in red black tree manager
@@ -74,6 +75,8 @@
currently:
-------------------------------------------------------------------------------------
+export/import problem.
+
changes for garbage management because of autosave
- tests to add
- test for state machine
Modified: trunk/joafip/src/main/java/net/sf/joafip/reflect/HelperReflect.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/reflect/HelperReflect.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/reflect/HelperReflect.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -166,6 +166,9 @@
* static fields
*/
if (!Modifier.isFinal(modifiers)) {
+ /*
+ * only not final field can be acceded
+ */
staticFieldInfoList.add(fieldInfo);
}
} else {
@@ -280,6 +283,7 @@
if (fieldInfo.isFieldDefined()) {
field = fieldInfo.getField();
} else {
+ // FIXMELUC ________why this case field undefined
try {
final Class<?> clazz = fieldInfo.getDeclaringClass();
final String fieldName = fieldInfo.getFieldName();
Modified: trunk/joafip/src/main/java/net/sf/joafip/service/AbstractFilePersistenceDelegatingToStore.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/service/AbstractFilePersistenceDelegatingToStore.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/service/AbstractFilePersistenceDelegatingToStore.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -1188,6 +1188,26 @@
}
@Override
+ public void referencedByPesistedStaticField(
+ final Class<?> classHavingStaticFieldReferenced)
+ throws FilePersistenceException {
+ try {
+ store.referencedByPesistedStaticField(classHavingStaticFieldReferenced);
+ } catch (final StoreException exception) {
+ throw new FilePersistenceException(exception);
+ }
+ }
+
+ @Override
+ public void referencedByPesistedStaticField(
+ final Class<?>[] classHavingStaticFieldReferenced)
+ throws FilePersistenceException {
+ for (Class<?> clazz : classHavingStaticFieldReferenced) {
+ referencedByPesistedStaticField(clazz);
+ }
+ }
+
+ @Override
public String keyOfObjectKeptInMemory(final Object object) {
return store.keyOfObjectKeptInMemory(object);
}
Modified: trunk/joafip/src/main/java/net/sf/joafip/service/IFilePersistence.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/service/IFilePersistence.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/service/IFilePersistence.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -1204,6 +1204,16 @@
void keptInMemory(final String key, final Object object)
throws FilePersistenceException;
+ // FIXMELUC _______________javadoc
+ void referencedByPesistedStaticField(
+ Class<?> classHavingStaticFieldReferenced)
+ throws FilePersistenceException;
+
+ // FIXMELUC _______________javadoc
+ void referencedByPesistedStaticField(
+ Class<?>[] classHavingStaticFieldReferenced)
+ throws FilePersistenceException;
+
/**
*
* @param object
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreSynchro.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreSynchro.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreSynchro.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -42,8 +42,6 @@
public StoreSynchro() { // NOPMD
super();
- // FIXMELUC _____________________for test
- Thread.dumpStack();
}
public void setPersistenceId(final int persistenceId) {
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/entity/classinfo/FieldInfo.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/entity/classinfo/FieldInfo.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/entity/classinfo/FieldInfo.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -36,7 +36,7 @@
private static final String NOT_DEFINED = "not defined:\n";
- private static final DoPrivilegedSetFieldAccessible setFieldAccessible = // NOPMD
+ private static final DoPrivilegedSetFieldAccessible SET_FIELD_ACCESSIBLE =
/**/DoPrivilegedSetFieldAccessible.getInstance();
public static final FieldInfo NULL = new FieldInfo();
@@ -104,7 +104,7 @@
public FieldInfo(final Field field, final ClassInfo declaringClass,
final ClassInfo fieldType) throws ClassInfoException {
this.field = field;
- setFieldAccessible.set(field);
+ SET_FIELD_ACCESSIBLE.set(field);
this.fieldType = fieldType;
primitiveType = fieldType.isPrimitiveType();
basicType = fieldType.isBasicType();
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -36,6 +36,7 @@
import net.sf.joafip.store.entity.StoreHeader;
import net.sf.joafip.store.entity.StoreSynchro;
import net.sf.joafip.store.entity.classinfo.ClassInfo;
+import net.sf.joafip.store.entity.classinfo.FieldInfo;
import net.sf.joafip.store.entity.heaprecordable.IHeapRecordable;
import net.sf.joafip.store.entity.kept.KeptInMemoryObjectKey;
import net.sf.joafip.store.entity.kept.SubstituteOfEnum;
@@ -587,6 +588,7 @@
} catch (final ClassInfoException exception) {
throw new StoreException(exception);
}
+ // FIXMELUC _______________________not good classInfo.setKeptInMemory()
classInfo.setKeptInMemory();
setSubstituteObjectManager(objectClass, KeptInMemoryObjectKey.class,
keptInMemorySubstituteObjectManager);
@@ -594,6 +596,34 @@
}
@Override
+ public void referencedByPesistedStaticField(
+ final Class<?> classHavingStaticFieldReferenced)
+ throws StoreException {
+ ClassInfo classInfo;
+ try {
+ classInfo = classInfoFactory
+ .getNoProxyClassInfo(classHavingStaticFieldReferenced);
+ final FieldInfo[] fieldsInfo = classInfo
+ .getAllDeclaredStaticFields();
+ for (FieldInfo fieldInfo : fieldsInfo) {
+ final Object value = helperReflect.getFieldValue(null,
+ fieldInfo, true);
+ final StringBuilder keyBuilder = new StringBuilder();// NOPMD
+ keyBuilder.append(classInfo.getName());
+ keyBuilder.append('#');
+ keyBuilder.append(fieldInfo.getDeclaringClassInfo().getName());
+ keyBuilder.append('#');
+ keyBuilder.append(fieldInfo.getFieldName());
+ keptInMemory(keyBuilder.toString(), value);
+ }
+ } catch (final ClassInfoException exception) {
+ throw new StoreException(exception);
+ } catch (ReflectException exception) {
+ throw new StoreException(exception);
+ }
+ }
+
+ @Override
public void storedImmutableEnum(final Class<? extends Enum<?>> enumClass)
throws StoreException {
setSubstituteObjectManager(enumClass, SubstituteOfEnum.class,
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/IStore.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/IStore.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/IStore.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -686,6 +686,9 @@
void keptInMemory(String key, Object object) throws StoreException;
+ void referencedByPesistedStaticField(
+ Class<?> classHavingStaticFieldReferenced) throws StoreException;
+
String keyOfObjectKeptInMemory(Object object);
void setRecordSaveActions(boolean recordActions);
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/AbstractExporter.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/AbstractExporter.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/AbstractExporter.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -67,7 +67,7 @@
final protected JoafipLogger logger = JoafipLogger.getLogger(getClass());// NOPMD
- private final static DoPrivilegedSetFieldAccessible setFieldAccessible = // NOPMD
+ private final static DoPrivilegedSetFieldAccessible SET_FIELD_ACCESSIBLE =
/**/DoPrivilegedSetFieldAccessible.getInstance();
final private static HelperReflect helperReflect = HelperReflect// NOPMD
@@ -609,7 +609,7 @@
for (final FieldInfo fieldInfo : fieldInfos) {
if (fieldInfo.isPersisted()) {
final Field field = fieldInfo.getField();
- setFieldAccessible.set(field);
+ SET_FIELD_ACCESSIBLE.set(field);
final Object fieldValue;
fieldValue = field.get(null);
final ClassInfo fieldClassInfo = fieldInfo
@@ -667,7 +667,7 @@
for (final FieldInfo fieldInfo : fieldInfos) {
if (fieldInfo.isPersisted()) {
final Field field = fieldInfo.getField();
- setFieldAccessible.set(field);
+ SET_FIELD_ACCESSIBLE.set(field);
final Object fieldValue;
fieldValue = field.get(object);
final ClassInfo fieldClassInfo = fieldInfo
@@ -725,7 +725,7 @@
// <<<<<<< .working
if (fieldInfo.isPersisted()) {
final Field field = fieldInfo.getField();
- setFieldAccessible.set(field);
+ SET_FIELD_ACCESSIBLE.set(field);
final Object fieldValue;
fieldValue = field.get(object);
final ClassInfo fieldClassInfo = fieldInfo
@@ -1059,7 +1059,7 @@
// <<<<<<< .working
if (fieldInfo.isPersisted()) {
final Field field = fieldInfo.getField();
- setFieldAccessible.set(field);
+ SET_FIELD_ACCESSIBLE.set(field);
final Object fieldValue;
fieldValue = field.get(enumObject);
final ClassInfo fieldClassInfo = fieldInfo
@@ -1117,7 +1117,7 @@
for (final FieldInfo fieldInfo : fieldInfos) {
if (fieldInfo.isPersisted()) {
final Field field = fieldInfo.getField();
- setFieldAccessible.set(field);
+ SET_FIELD_ACCESSIBLE.set(field);
final Object fieldValue;
fieldValue = field.get(enumObject);
final ClassInfo fieldClassInfo = fieldInfo
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/rel400/PersistableWithStaticField.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/rel400/PersistableWithStaticField.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/rel400/PersistableWithStaticField.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -25,6 +25,7 @@
import java.util.Map;
import net.sf.joafip.StorableClass;
+import net.sf.joafip.java.util.PTreeMap;
/**
*
@@ -44,6 +45,12 @@
map.put(EMPTY.getKey(), EMPTY);
}
+ private static final Map<String, String> MAP2 = new PTreeMap<String, String>();
+
+ static {
+ MAP2.put("1", "xxx");
+ }
+
private final String key;
public PersistableWithStaticField(final String key) {
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestAutoSaveWithStatic.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestAutoSaveWithStatic.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestAutoSaveWithStatic.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -54,18 +54,51 @@
}
@SuppressWarnings("PMD")
- public void test() throws FilePersistenceException,
+ public void testReferencedStaticField() throws FilePersistenceException,
FilePersistenceInvalidClassException,
FilePersistenceNotSerializableException,
FilePersistenceClassNotFoundException,
FilePersistenceDataCorruptedException,
FilePersistenceTooBigForSerializationException {
- createFilePersistence();
+ createFilePersistenceForReferencedStaticField();
+ createFilePersistenceForReferencedStaticField();
+ }
+
+ private void createFilePersistenceForReferencedStaticField()
+ throws FilePersistenceException,
+ FilePersistenceInvalidClassException,
+ FilePersistenceNotSerializableException,
+ FilePersistenceClassNotFoundException,
+ FilePersistenceDataCorruptedException,
+ FilePersistenceTooBigForSerializationException {
+ final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setPathName(path.getAbsolutePath());
+ builder.setProxyMode(true);
+ builder.setRemoveFiles(true);
+ final IFilePersistence filePersistence = builder.build();
+ filePersistence
+ .referencedByPesistedStaticField(PersistableWithStaticField.class);
+ final IExclusiveDataAccessSession session = filePersistence
+ .createExclusiveDataAccessSession();
+ session.open();
+ session.close();
+ filePersistence.close();
+ }
+
+ @SuppressWarnings("PMD")
+ public void testStoredStatic() throws FilePersistenceException,
+ FilePersistenceInvalidClassException,
+ FilePersistenceNotSerializableException,
+ FilePersistenceClassNotFoundException,
+ FilePersistenceDataCorruptedException,
+ FilePersistenceTooBigForSerializationException {
+ createFilePersistenceForStoredStatic();
// second failed before correction
- createFilePersistence();
+ createFilePersistenceForStoredStatic();
}
- private void createFilePersistence() throws FilePersistenceException,
+ private void createFilePersistenceForStoredStatic()
+ throws FilePersistenceException,
FilePersistenceInvalidClassException,
FilePersistenceNotSerializableException,
FilePersistenceClassNotFoundException,
Modified: trunk/joafip/src/test/java/net/sf/joafip/store/service/objectfortest/Bob1.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/store/service/objectfortest/Bob1.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/test/java/net/sf/joafip/store/service/objectfortest/Bob1.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -26,6 +26,10 @@
@StoreNotUseStandardSerialization
public class Bob1 implements IBob, Serializable {// NOPMD
+
+ @SuppressWarnings("unused")
+ private static long aStaticFinalLongField = -1L;// NOPMD
+
/**
*
*/
Modified: trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/manager/TestObjectIOManagerStaticFieldCase.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/manager/TestObjectIOManagerStaticFieldCase.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/manager/TestObjectIOManagerStaticFieldCase.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -80,11 +80,12 @@
writeResult);
assertReferenceChange(objectAndPersistInfo, new Class[] { null },
new Class[] { Integer.class }, writeResult);
- assertType(new int[] { HelperBinaryConversion.INTEGER_TYPE,
+ assertType(new int[] { HelperBinaryConversion.LONG_TYPE,
+ HelperBinaryConversion.INTEGER_TYPE,
HelperBinaryConversion.REFERENCE_TYPE }, writeResult);
assertWriteInformationCleared(objectAndPersistInfo);
- assertOriginalValue(new Object[] { Integer.valueOf(0), fieldValue },
- objectAndPersistInfo);
+ assertOriginalValue(new Object[] { Long.valueOf(-1),
+ Integer.valueOf(0), fieldValue }, objectAndPersistInfo);
/* second write state not change */
writeResult = write(objectAndPersistInfo);
@@ -95,8 +96,8 @@
writeResult);
assertNoReferenceChange(writeResult);
assertWriteInformationCleared(objectAndPersistInfo);
- assertOriginalValue(new Object[] { Integer.valueOf(0), fieldValue },
- objectAndPersistInfo);
+ assertOriginalValue(new Object[] { Long.valueOf(-1),
+ Integer.valueOf(0), fieldValue }, objectAndPersistInfo);
/* third write state change */
fieldValue = Integer.valueOf(1);
@@ -109,11 +110,12 @@
assertReferenceChange(objectAndPersistInfo,
new Class[] { Integer.class }, new Class[] { Integer.class },
writeResult);
- assertType(new int[] { HelperBinaryConversion.INTEGER_TYPE,
+ assertType(new int[] { HelperBinaryConversion.LONG_TYPE,
+ HelperBinaryConversion.INTEGER_TYPE,
HelperBinaryConversion.REFERENCE_TYPE }, writeResult);
assertWriteInformationCleared(objectAndPersistInfo);
- assertOriginalValue(new Object[] { Integer.valueOf(1), fieldValue },
- objectAndPersistInfo);
+ assertOriginalValue(new Object[] { Long.valueOf(-1),
+ Integer.valueOf(1), fieldValue }, objectAndPersistInfo);
/* fourth write state change */
Bob1.setObject(null);
@@ -124,11 +126,12 @@
assertReferenceChange(objectAndPersistInfo,
new Class[] { Integer.class }, new Class[] { null },
writeResult);
- assertType(new int[] { HelperBinaryConversion.INTEGER_TYPE,
+ assertType(new int[] { HelperBinaryConversion.LONG_TYPE,
+ HelperBinaryConversion.INTEGER_TYPE,
HelperBinaryConversion.REFERENCE_TYPE }, writeResult);
assertWriteInformationCleared(objectAndPersistInfo);
- assertOriginalValue(new Object[] { Integer.valueOf(1), null },
- objectAndPersistInfo);
+ assertOriginalValue(new Object[] { Long.valueOf(-1),
+ Integer.valueOf(1), null }, objectAndPersistInfo);
/* fifth write state change */
fieldValue = Integer.valueOf(3);
@@ -141,11 +144,12 @@
writeResult);
assertReferenceChange(objectAndPersistInfo, new Class[] { null },
new Class[] { Integer.class }, writeResult);
- assertType(new int[] { HelperBinaryConversion.INTEGER_TYPE,
+ assertType(new int[] { HelperBinaryConversion.LONG_TYPE,
+ HelperBinaryConversion.INTEGER_TYPE,
HelperBinaryConversion.REFERENCE_TYPE }, writeResult);
assertWriteInformationCleared(objectAndPersistInfo);
- assertOriginalValue(new Object[] { Integer.valueOf(2), fieldValue },
- objectAndPersistInfo);
+ assertOriginalValue(new Object[] { Long.valueOf(-1),
+ Integer.valueOf(2), fieldValue }, objectAndPersistInfo);
/**/
writeSon(writeResult);
Modified: trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/serialize/ObjectIOStaticTest.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/serialize/ObjectIOStaticTest.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip/src/test/java/net/sf/joafip/store/service/objectio/serialize/ObjectIOStaticTest.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -55,6 +55,7 @@
classInfoFactory, proxyManager2, helperBinaryConversion);
final ClassInfo classInfo = classInfoFactory
.getNoProxyClassInfo(Bob1.class);
+ // 10 as static field value to save
Bob1.setStaticValue(10);
final ObjectAndPersistInfo objectAndPersistInfo =
/**/new ObjectAndPersistInfo(classInfo);
@@ -69,7 +70,9 @@
*/, objectAndPersistInfo, false/* updateOriginalValue */);
final ObjectInputStatic objectInput = new ObjectInputStatic(this,
classInfoFactory, proxyManager2, helperBinaryConversion);
+ // change static field value to 0
Bob1.setStaticValue(0);
+ // read static field value and check it is 10
objectInput.setObjectStaticState(objectAndPersistInfo, binary, offset);
assertEquals("bad value", 10, Bob1.getStaticValue());
}
Modified: trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/service/HeapFileDataManager.java
===================================================================
--- trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/service/HeapFileDataManager.java 2011-10-02 08:34:45 UTC (rev 2914)
+++ trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/service/HeapFileDataManager.java 2011-10-03 03:24:41 UTC (rev 2915)
@@ -240,7 +240,7 @@
dataRecordIdentifier);
} else {
created = false;
- // FIXMELUC __________________data not change case
+ // FIXMELUC _____________data not change case
if (data.length != heapRecord.getDataAssociatedSize()) {
deleteDataRecord(dataRecordIdentifier);
heapRecord = createHeapRecordForData(data.length,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|