[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. |