private void getRelations(StateManagerImpl sm, Collection rels, StoreContext ctx) { FieldMetaData[] fields = sm.getMetaData().getFields(); for (int i = 0; i < fields.length; i++) { Object obj = sm.fetch(i); StateManagerImpl esm = (StateManagerImpl)ctx.getStateManager(obj); if (esm != null) { if (!esm.isEmbedded()) rels.add(esm); else getRelations(esm, rels, ctx); } } }
/** * 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; }
@Override void initialize(StateManagerImpl context, PCState previous) { // mark r/w ok, remove from management context.unproxyFields(); context.getPersistenceCapable().pcReplaceStateManager(null); context.getBroker().setStateManager(context.getId(), context, BrokerImpl.STATUS_TRANSIENT); }
public Object getObjectId() { StateManagerImpl sm = this; while (sm.getOwner() != null) sm = (StateManagerImpl) sm.getOwner(); if (sm.isEmbedded() && sm.getOwner() == null) return sm._ownerId; return sm._oid; }
PersistenceCapable pc = sm.getPersistenceCapable(); manager.setAttachedCopy(toAttach, pc); FieldMetaData[] fields = sm.getMetaData().getFields(); int restore = broker.getRestoreState(); sm.setPostLoadCallback(false); sm.loadFields(load, fc, fc.getWriteLockLevel(), null); Object origVersion = sm.getVersion(); sm.setVersion(_version); BitSet loaded = sm.getLoaded(); int set = StateManager.SET_ATTACH; sm.setPostLoadCallback(false); for (int i = 0; i < fields.length; i++) { if (!_loaded.get(i)) case JavaTypes.BOOLEAN: if (_dirty.get(i)) sm.settingBooleanField(pc, i, (loaded.get(i)) && sm.fetchBooleanField(i), longval == 1, set); else sm.storeBooleanField(i, longval == 1); break; case JavaTypes.BYTE: if (_dirty.get(i))
if (orig != null) { if (orig.getOwner() == owner && orig.getMetaData(). getEmbeddingMetaData() == ownerMeta) return orig; orig.load(_fc, StateManagerImpl.LOAD_ALL, null, null, false); id = StateManagerId.newInstance(this); StateManagerImpl sm = new StateManagerImpl(id, meta, this); sm.setOwner((StateManagerImpl) owner, ownerMeta); } else { copySM = orig; pc = orig.getPersistenceCapable(); sm.initialize(copy, state); return sm; } catch (OpenJPAException ke) {
sm.cascadePersist(call); else cascadeTransient(OpCallbacks.OP_PERSIST, obj, call, if (sm.isDetached()) throw new ObjectExistsException(_loc.get ("persist-detached", Exceptions.toString(obj))). setFailedObject(obj); if (!sm.isEmbedded()) { sm.persist(); _cache.persist(sm); if ((action & OpCallbacks.ACT_CASCADE) != 0) sm.cascadePersist(call); return sm; sm.getOwner().dirty(sm.getOwnerIndex()); _cache.persist(sm); pc = sm.getPersistenceCapable(); } else { pc = assertPersistenceCapable(obj); sm = new StateManagerImpl(id, meta, this); if ((_flags & FLAG_ACTIVE) != 0) { if (explicit) sm.initialize(pc, PCState.PNEW); else sm.initialize(pc, PCState.PNEWPROVISIONAL); } else
return; if (sm != null && sm.isPersistent()) { assertActiveTransaction(); sm.transactional(); sm.load(_fc, StateManagerImpl.LOAD_FGS, null, null, false); sm.setCheckVersion(true); if (updateVersion) sm.setUpdateVersion(true); getMetaData(obj.getClass(), _loader, true); Object id = StateManagerId.newInstance(this); sm = new StateManagerImpl(id, meta, this); sm.initialize(assertPersistenceCapable(obj), PCState.TCLEAN);
StateManagerImpl sm = new StateManagerImpl(StateManagerId. newInstance(this), meta, this); sm.initialize(pc, PCState.TLOADED); try { switch (op) { case OpCallbacks.OP_PERSIST: sm.cascadePersist(call); break; case OpCallbacks.OP_DELETE: sm.cascadeDelete(call); break; case OpCallbacks.OP_REFRESH: sm.gatherCascadeRefresh(call); break; default: sm.release(true);
private void setPKValue(StateManagerImpl sm, Object pkVal) { ClassMetaData meta = sm.getMetaData(); FieldMetaData[] fmds = meta.getPrimaryKeyFields(); if (fmds.length == 0) return; Strategy strat = ((FieldMapping)fmds[0]).getStrategy(); // single value primary key if (strat instanceof PrimitiveFieldStrategy) ((PrimitiveFieldStrategy)strat).setAutoAssignedValue(sm, null, null, pkVal); else { //composite key String mappedByIdFieldName = getMappedByIdValue(); if (mappedByIdFieldName != null && mappedByIdFieldName.length() > 0) { //The name of the attribute within the composite key to which //the relationship attribute corresponds. Object target = ((ObjectId)sm.getObjectId()).getId(); if (target == null) return; setMappedByIdValue(target, pkVal, mappedByIdFieldName); pkVal = target; } sm.storeObjectField(fmds[0].getIndex(), pkVal); } }
sm.setObjectId(oid); sm.initialize(sm.getMetaData().getDescribedType(), state);
getMetaData(obj.getClass(), _loader, true); sm = new StateManagerImpl (StateManagerId.newInstance(this), meta, this); sm.initialize(assertPersistenceCapable(obj), PCState.TCLEAN); } else if (sm.isPersistent()) { assertActiveTransaction(); sms.add(sm); if (sm.getPCState() == PCState.HOLLOW) { if (load == null) load = new ArrayList(); sm.setCheckVersion(true); if (updateVersion) sm.setUpdateVersion(true);
/** * Ask store manager to assign our oid, optionally flushing and * optionally recaching on the new oid. */ private boolean assignObjectId(boolean flush, boolean preFlushing) { if (_oid != null || isEmbedded() || !isPersistent()) return true; if (_broker.getStoreManager().assignObjectId(this, preFlushing)) { if (!preFlushing) assertObjectIdAssigned(true); } else if (flush) _broker.flush(); else return false; return true; }
if (_loading != null) { sm = _loading.get(oid); if (sm != null && sm.getPersistenceCapable() == null) return sm; sm.setObjectId(oid); return sm;
/** * If not already cached, create an empty copy of the given state * manager in the given state. */ OpenJPAStateManager copy(OpenJPAStateManager copy, PCState state) { beginOperation(true); try { assertOpen(); Object oid = copy.fetchObjectId(); Class type = copy.getManagedInstance().getClass(); if (oid == null) throw new InternalException(); // cached instance? StateManagerImpl sm = null; if (!copy.isEmbedded()) sm = getStateManagerImplById(oid, true); if (sm == null) { MetaDataRepository repos = _conf. getMetaDataRepositoryInstance(); ClassMetaData meta = repos.getMetaData(type, _loader, true); // construct a new state manager with all info known sm = new StateManagerImpl(oid, meta, this); sm.setObjectId(oid); sm.initialize(sm.getMetaData().getDescribedType(), state); } return sm; } finally { endOperation(); } }
StateManagerImpl sm = (StateManagerImpl)row.getPrimaryKey(); if (sm != null) { ClassMapping meta = (ClassMapping)sm.getMetaData(); if (hasGeneratedKey(meta)) { sm.setObjectId(ApplicationIds.create( sm.getPersistenceCapable(), meta));
private Object getPKValue(StateManagerImpl pkSm) { ClassMetaData pkMeta = pkSm.getMetaData(); FieldMetaData[] fmds = pkMeta.getPrimaryKeyFields(); // MappedById is for single value primary key or embeddable id if (fmds.length == 0) return null; else return ApplicationIds.getKey(pkSm.getObjectId(), pkMeta); }
public void storeObject(int field, Object externalVal) { FieldMetaData fmd = _meta.getField(field); externalVal = fmd.order(externalVal); if (!fmd.isExternalized()) storeObjectField(field, externalVal); else storeField(field, fmd.getFieldValue(externalVal, _broker)); }
/** * Gets the value of the given field of the managed object. * * @param field name of a persistent property * @return value of the given field in the managed instance * @exception IllegalArgumentException if the named field is not a persistent property */ public Object getManangedFieldValue(String field) { FieldMetaData fmd = _sm.getMetaData().getField(field); if (fmd == null) { throw new IllegalArgumentException(field + " does not exist in " + _original); } return _sm.fetch(fmd.getIndex()); }
private void assignVersionField(Object version) { if (version instanceof Timestamp) { if (_datePrecision == -1) { try { OpenJPAConfiguration conf = _broker.getConfiguration(); Class confCls = Class.forName("org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl"); if (confCls.isAssignableFrom(conf.getClass())) { Object o = conf.getClass().getMethod("getDBDictionaryInstance").invoke(conf, (Object[]) null); _datePrecision = o.getClass().getField("datePrecision").getInt(o); } else { _datePrecision = 1000; } } catch (Throwable e) { _datePrecision = 1000; } } version = roundTimestamp((Timestamp) version, _datePrecision); } _version = version; FieldMetaData vfield = _meta.getVersionField(); if (vfield != null) store(vfield.getIndex(), JavaTypes.convert(version, vfield.getTypeCode())); }