/** * Constructor. Provide instance to save and indicate whether * to copy persistent fields. Transactional fields will be * copied regardless of copy setting. */ public SavepointFieldManager(StateManagerImpl sm, boolean copy) { _sm = sm; _state = _sm.getPCState(); _dirty = (BitSet) _sm.getDirty().clone(); _flush = (BitSet) _sm.getFlushed().clone(); _loaded = (BitSet) _sm.getLoaded().clone(); FieldMetaData[] fields = _sm.getMetaData().getFields(); for (int i = 0; i < _loaded.length(); i++) { if (!_loaded.get(i)) continue; if (copy || fields[i].getManagement() == FieldMetaData.MANAGE_TRANSACTIONAL) { if (_copy == null) _copy = _sm.getPersistenceCapable().pcNewInstance (_sm, true); storeField(fields[i]); } else _loaded.clear(i); } // we need to proxy the fields so that we can track future changes // from this savepoint forward for PNew instances' mutable fields _sm.proxyFields(false, false); _version = _sm.getVersion (); _loadVersion = _sm.getLoadVersion (); }
/** * Constructor. Provide instance to save and indicate whether * to copy persistent fields. Transactional fields will be * copied regardless of copy setting. */ public SavepointFieldManager(StateManagerImpl sm, boolean copy) { _sm = sm; _state = _sm.getPCState(); _dirty = (BitSet) _sm.getDirty().clone(); _flush = (BitSet) _sm.getFlushed().clone(); _loaded = (BitSet) _sm.getLoaded().clone(); FieldMetaData[] fields = _sm.getMetaData().getFields(); for (int i = 0; i < _loaded.length(); i++) { if (!_loaded.get(i)) continue; if (copy || fields[i].getManagement() == FieldMetaData.MANAGE_TRANSACTIONAL) { if (_copy == null) _copy = _sm.getPersistenceCapable().pcNewInstance (_sm, true); storeField(fields[i]); } else _loaded.clear(i); } // we need to proxy the fields so that we can track future changes // from this savepoint forward for PNew instances' mutable fields _sm.proxyFields(false, false); _version = _sm.getVersion (); _loadVersion = _sm.getLoadVersion (); }
/** * Constructor. Provide instance to save and indicate whether * to copy persistent fields. Transactional fields will be * copied regardless of copy setting. */ public SavepointFieldManager(StateManagerImpl sm, boolean copy) { _sm = sm; _state = _sm.getPCState(); _dirty = (BitSet) _sm.getDirty().clone(); _flush = (BitSet) _sm.getFlushed().clone(); _loaded = (BitSet) _sm.getLoaded().clone(); FieldMetaData[] fields = _sm.getMetaData().getFields(); for (int i = 0; i < _loaded.length(); i++) { if (!_loaded.get(i)) continue; if (copy || fields[i].getManagement() == FieldMetaData.MANAGE_TRANSACTIONAL) { if (_copy == null) _copy = _sm.getPersistenceCapable().pcNewInstance (_sm, true); storeField(fields[i]); } else _loaded.clear(i); } // we need to proxy the fields so that we can track future changes // from this savepoint forward for PNew instances' mutable fields _sm.proxyFields(false, false); _version = _sm.getVersion (); _loadVersion = _sm.getLoadVersion (); }
/** * Constructor. Provide instance to save and indicate whether * to copy persistent fields. Transactional fields will be * copied regardless of copy setting. */ public SavepointFieldManager(StateManagerImpl sm, boolean copy) { _sm = sm; _state = _sm.getPCState(); _dirty = (BitSet) _sm.getDirty().clone(); _flush = (BitSet) _sm.getFlushed().clone(); _loaded = (BitSet) _sm.getLoaded().clone(); FieldMetaData[] fields = _sm.getMetaData().getFields(); for (int i = 0; i < _loaded.length(); i++) { if (!_loaded.get(i)) continue; if (copy || fields[i].getManagement() == FieldMetaData.MANAGE_TRANSACTIONAL) { if (_copy == null) _copy = _sm.getPersistenceCapable().pcNewInstance (_sm, true); storeField(fields[i]); } else _loaded.clear(i); } // we need to proxy the fields so that we can track future changes // from this savepoint forward for PNew instances' mutable fields _sm.proxyFields(false, false); _version = _sm.getVersion (); _loadVersion = _sm.getLoadVersion (); }
/** * Constructor. Provide instance to save and indicate whether * to copy persistent fields. Transactional fields will be * copied regardless of copy setting. */ public SavepointFieldManager(StateManagerImpl sm, boolean copy) { _sm = sm; _state = _sm.getPCState(); _dirty = (BitSet) _sm.getDirty().clone(); _flush = (BitSet) _sm.getFlushed().clone(); _loaded = (BitSet) _sm.getLoaded().clone(); FieldMetaData[] fields = _sm.getMetaData().getFields(); for (int i = 0; i < _loaded.length(); i++) { if (!_loaded.get(i)) continue; if (copy || fields[i].getManagement() == FieldMetaData.MANAGE_TRANSACTIONAL) { if (_copy == null) _copy = _sm.getPersistenceCapable().pcNewInstance (_sm, true); storeField(fields[i]); } else _loaded.clear(i); } // we need to proxy the fields so that we can track future changes // from this savepoint forward for PNew instances' mutable fields _sm.proxyFields(false, false); _version = _sm.getVersion (); _loadVersion = _sm.getLoadVersion (); }
/** * Generate the detached state for the given instance. */ private static Object getDetachedState(StateManagerImpl sm, BitSet fields) { // if datastore, store id in first element int offset = (sm.getMetaData().getIdentityType() == ClassMetaData.ID_DATASTORE) ? 1 : 0; // make version state array one larger for new instances; marks new // instances without affecting serialization size much Object[] state; if (sm.isNew()) state = new Object[3 + offset]; else state = new Object[2 + offset]; if (offset > 0) { Object id; if (sm.isEmbedded() || sm.getObjectId() == null) id = sm.getId(); else id = sm.getObjectId(); state[0] = id.toString(); } state[offset] = sm.getVersion(); state[offset + 1] = fields; return state; }
/** * Generate the detached state for the given instance. */ private static Object getDetachedState(StateManagerImpl sm, BitSet fields) { // if datastore, store id in first element int offset = (sm.getMetaData().getIdentityType() == ClassMetaData.ID_DATASTORE) ? 1 : 0; // make version state array one larger for new instances; marks new // instances without affecting serialization size much Object[] state; if (sm.isNew()) state = new Object[3 + offset]; else state = new Object[2 + offset]; if (offset > 0) { Object id; if (sm.isEmbedded() || sm.getObjectId() == null) id = sm.getId(); else id = sm.getObjectId(); state[0] = id.toString(); } state[offset] = sm.getVersion(); state[offset + 1] = fields; return state; }
/** * Generate the detached state for the given instance. */ private static Object getDetachedState(StateManagerImpl sm, BitSet fields) { // if datastore, store id in first element int offset = (sm.getMetaData().getIdentityType() == ClassMetaData.ID_DATASTORE) ? 1 : 0; // make version state array one larger for new instances; marks new // instances without affecting serialization size much Object[] state; if (sm.isNew()) state = new Object[3 + offset]; else state = new Object[2 + offset]; if (offset > 0) { Object id; if (sm.isEmbedded() || sm.getObjectId() == null) id = sm.getId(); else id = sm.getObjectId(); state[0] = id.toString(); } state[offset] = sm.getVersion(); state[offset + 1] = fields; return state; }
/** * Generate the detached state for the given instance. */ private static Object getDetachedState(StateManagerImpl sm, BitSet fields) { // if datastore, store id in first element int offset = (sm.getMetaData().getIdentityType() == ClassMetaData.ID_DATASTORE) ? 1 : 0; // make version state array one larger for new instances; marks new // instances without affecting serialization size much Object[] state; if (sm.isNew()) state = new Object[3 + offset]; else state = new Object[2 + offset]; if (offset > 0) { Object id; if (sm.isEmbedded() || sm.getObjectId() == null) id = sm.getId(); else id = sm.getObjectId(); state[0] = id.toString(); } state[offset] = sm.getVersion(); state[offset + 1] = fields; return state; }
/** * Generate the detached state for the given instance. */ private static Object getDetachedState(StateManagerImpl sm, BitSet fields) { // if datastore, store id in first element int offset = (sm.getMetaData().getIdentityType() == ClassMetaData.ID_DATASTORE) ? 1 : 0; // make version state array one larger for new instances; marks new // instances without affecting serialization size much Object[] state; if (sm.isNew()) state = new Object[3 + offset]; else state = new Object[2 + offset]; if (offset > 0) { Object id; if (sm.isEmbedded() || sm.getObjectId() == null) id = sm.getId(); else id = sm.getObjectId(); state[0] = id.toString(); } state[offset] = sm.getVersion(); state[offset + 1] = fields; return state; }
/** * Transfer the current version object from the state manager to the * detached instance. */ public void detachVersion() { FieldMetaData fmd = sm.getMetaData().getVersionField(); if (fmd == null) return; Object val = JavaTypes.convert(sm.getVersion(), fmd.getTypeCode()); val = fmd.getFieldValue(val, sm.getBroker()); switch (fmd.getDeclaredTypeCode()) { case JavaTypes.LONG: case JavaTypes.SHORT: case JavaTypes.INT: case JavaTypes.BYTE: longval = (val == null) ? 0L : ((Number) val).longValue(); break; case JavaTypes.DOUBLE: case JavaTypes.FLOAT: dblval = (val == null) ? 0D : ((Number) val).doubleValue(); break; default: objval = val; } sm.replaceField(getDetachedPersistenceCapable(), this, fmd.getIndex()); }
/** * Transfer the current version object from the state manager to the * detached instance. */ public void detachVersion() { FieldMetaData fmd = sm.getMetaData().getVersionField(); if (fmd == null) return; Object val = JavaTypes.convert(sm.getVersion(), fmd.getTypeCode()); val = fmd.getFieldValue(val, sm.getBroker()); switch (fmd.getDeclaredTypeCode()) { case JavaTypes.LONG: case JavaTypes.SHORT: case JavaTypes.INT: case JavaTypes.BYTE: longval = (val == null) ? 0L : ((Number) val).longValue(); break; case JavaTypes.DOUBLE: case JavaTypes.FLOAT: dblval = (val == null) ? 0D : ((Number) val).doubleValue(); break; default: objval = val; } sm.replaceField(getDetachedPersistenceCapable(), this, fmd.getIndex()); }
/** * Transfer the current version object from the state manager to the * detached instance. */ public void detachVersion() { FieldMetaData fmd = sm.getMetaData().getVersionField(); if (fmd == null) return; Object val = JavaTypes.convert(sm.getVersion(), fmd.getTypeCode()); val = fmd.getFieldValue(val, sm.getBroker()); switch (fmd.getDeclaredTypeCode()) { case JavaTypes.LONG: case JavaTypes.SHORT: case JavaTypes.INT: case JavaTypes.BYTE: longval = (val == null) ? 0L : ((Number) val).longValue(); break; case JavaTypes.DOUBLE: case JavaTypes.FLOAT: dblval = (val == null) ? 0D : ((Number) val).doubleValue(); break; default: objval = val; } sm.replaceField(getDetachedPersistenceCapable(), this, fmd.getIndex()); }
/** * Transfer the current version object from the state manager to the * detached instance. */ public void detachVersion() { FieldMetaData fmd = sm.getMetaData().getVersionField(); if (fmd == null) return; Object val = JavaTypes.convert(sm.getVersion(), fmd.getTypeCode()); val = fmd.getFieldValue(val, sm.getBroker()); switch (fmd.getDeclaredTypeCode()) { case JavaTypes.LONG: case JavaTypes.SHORT: case JavaTypes.INT: case JavaTypes.BYTE: longval = (val == null) ? 0L : ((Number) val).longValue(); break; case JavaTypes.DOUBLE: case JavaTypes.FLOAT: dblval = (val == null) ? 0D : ((Number) val).doubleValue(); break; default: objval = val; } sm.replaceField(getDetachedPersistenceCapable(), this, fmd.getIndex()); }
/** * Transfer the current version object from the state manager to the * detached instance. */ public void detachVersion() { FieldMetaData fmd = sm.getMetaData().getVersionField(); if (fmd == null) return; Object val = JavaTypes.convert(sm.getVersion(), fmd.getTypeCode()); val = fmd.getFieldValue(val, sm.getBroker()); switch (fmd.getDeclaredTypeCode()) { case JavaTypes.LONG: case JavaTypes.SHORT: case JavaTypes.INT: case JavaTypes.BYTE: longval = (val == null) ? 0L : ((Number) val).longValue(); break; case JavaTypes.DOUBLE: case JavaTypes.FLOAT: dblval = (val == null) ? 0D : ((Number) val).doubleValue(); break; default: objval = val; } sm.replaceField(getDetachedPersistenceCapable(), this, fmd.getIndex()); }
_loaded = (BitSet)sm.getLoaded().clone(); _flush = (BitSet) sm.getFlushed().clone(); _version = sm.getVersion();
_loaded = (BitSet)sm.getLoaded().clone(); _flush = (BitSet) sm.getFlushed().clone(); _version = sm.getVersion();
_loaded = (BitSet)sm.getLoaded().clone(); _flush = (BitSet) sm.getFlushed().clone(); _version = sm.getVersion();
_loaded = (BitSet)sm.getLoaded().clone(); _flush = (BitSet) sm.getFlushed().clone(); _version = sm.getVersion();
/** * Make sure the version information is correct in the detached object. */ private void compareVersion(StateManagerImpl sm, PersistenceCapable pc) { Object version = pc.pcGetVersion(); if (version == null) return; // don't need to load unloaded fields since its implicitly // a single field value StoreManager store = sm.getBroker().getStoreManager(); switch (store.compareVersion(sm, version, sm.getVersion())) { case StoreManager.VERSION_LATER: // we have a later version: set it into the object. // lock validation will occur at commit time sm.setVersion(version); break; case StoreManager.VERSION_EARLIER: case StoreManager.VERSION_DIFFERENT: sm.setVersion(version); throw new OptimisticException(sm.getManagedInstance()); case StoreManager.VERSION_SAME: // no action required break; } }