Package org.exolab.castor.persist

Examples of org.exolab.castor.persist.ClassMolder


            boolean isCreating = _tracker.isCreating(toPrepare);
            boolean isDeleted = _tracker.isDeleted(toPrepare);
            boolean needsPersist = _tracker.isUpdatePersistNeeded(toPrepare);
            boolean needsCache = _tracker.isUpdateCacheNeeded(toPrepare);

            ClassMolder molder = _tracker.getMolderForObject(toPrepare);
            LockEngine engine = molder.getLockEngine();
            OID oid = _tracker.getOIDForObject(toPrepare);

            if (!isDeleted && !isCreating) {
                if (needsPersist) {
                    engine.store(this, oid, toPrepare);
                }
                if (needsCache) {
                    engine.softLock(this, oid, _lockTimeout);
                }
            }

            // do the callback
            if (!isDeleted && _callback != null) {
                try {
                    _callback.storing(toPrepare, needsCache);
                } catch (Exception except) {
                    throw new TransactionAbortedException(Messages.format(
                            "persist.nested", except), except);
                }
            } else if (!isDeleted && molder.getCallback() != null) {
                try {
                    molder.getCallback().storing(toPrepare, needsCache);
                    // updatePersistNeeded implies updateCacheNeeded
                } catch (Exception except) {
                    throw new TransactionAbortedException(Messages.format(
                            "persist.nested", except), except);
                }
View Full Code Here


        Collection readWriteObjects = _tracker.getReadWriteObjects();
        Iterator it = readWriteObjects.iterator();
        while (it.hasNext()) {
            Object toCommit = it.next();

            ClassMolder molder = _tracker.getMolderForObject(toCommit);
            LockEngine engine = molder.getLockEngine();
            OID oid = _tracker.getOIDForObject(toCommit);

            if (_tracker.isDeleted(toCommit)) {
                // Object has been deleted inside transaction,
                // engine must forget about it.
                engine.forgetObject(this, oid);
            } else {
                // Object has been created/accessed inside the
                // transaction, release its lock.
                if (_tracker.isUpdateCacheNeeded(toCommit)) {
                    engine.updateCache(this, oid, toCommit);
                }

                engine.releaseLock(this, oid);
            }

            // Call our release callback on all processed objects.
            if (_callback != null) {
                _callback.releasing(toCommit, true);
            } else if (molder.getCallback() != null) {
                molder.getCallback().releasing(toCommit, true);
            }
        }

        // Call txcommited() before objects are removed to allow
        // TxSynchronizable to iterate through the objects.
View Full Code Here

            // then forget object or release lock on them
            it = readWriteObjects.iterator();
            while (it.hasNext()) {
                Object object = it.next();
                ClassMolder molder = _tracker.getMolderForObject(object);
                LockEngine engine = molder.getLockEngine();
                oid = _tracker.getOIDForObject(object);

                if (!_tracker.isCreating(object)) {
                    if (_tracker.isCreated(object)) {
                        // Object has been created in this transaction,
                        // it no longer exists, forget about it in the engine.
                        engine.forgetObject(this, oid);
                    } else {
                        // Object has been queried (possibly) deleted in this
                        // transaction and release the lock.
                        engine.releaseLock(this, oid);
                    }
                }

                if (_callback != null) {
                    _callback.releasing(object, false);
                } else if (molder.getCallback() != null) {
                    molder.getCallback().releasing(object, false);
                }
            }
        } catch (Exception except) {
            // Don't thow exceptions during a rollback. Just report them.
            LOG.error("Caught exception at rollback of object with OID " + oid, except);
View Full Code Here

            LazyCGLIB cgObject = (LazyCGLIB) object;
           
            // TODO [WG] We still might have an option for some serious optimization
            // here if the instance has not been materialized yet.
            Identity identity = cgObject.interceptedIdentity();
            ClassMolder molder = cgObject.interceptedClassMolder();
            LockEngine engine = molder.getLockEngine();
           
            // Get the OID we're looking for.
            OID oid = new OID(molder, identity);
           
            // Retrieve the object for this OID; returns null if there ain't such object
View Full Code Here

            Map.Entry entry2 = (Map.Entry) object2;
           
            long oper1 = ((Long) entry1.getValue()).longValue();
            long oper2 = ((Long) entry2.getValue()).longValue();
           
            ClassMolder molder1 = _tracker.getMolderForObject(entry1.getKey());
            ClassMolder molder2 = _tracker.getMolderForObject(entry2.getKey());
           
            if (molder1 == null || molder2 == null) {
                if (oper1 > oper2) {
                    return 1;
                } else if (oper1 < oper2) {
                    return -1;
                } else {
                    return 0;
                }
            }
           
            int pri1 = molder1.getPriority();
            int pri2 = molder2.getPriority();
           
            if (pri1 == pri2) {
                if (oper1 > oper2) {
                    return 1;
                }
View Full Code Here

            if ( value != null ) {
                Class valueClass = value.getClass();

                if ( paramClass.isAssignableFrom( valueClass ) ) {
                    ClassMolder molder = _dbImpl.getLockEngine().getClassMolder( valueClass );

                    if ( molder != null ) {
                        value = molder.getActualIdentity( _dbImpl.getClassLoader(), value );
                    }
                } else if ( info.isUserDefined() ) {
                        //If the user specified a type they must pass that exact type.

                        throw new IllegalArgumentException( "Query paramter " +
View Full Code Here

     * @param type The type to expire.
     * @param identity An array of object identifiers to expire.
     */
    public void expireCache(Class type, Object[] identity) throws PersistenceException {
        testForOpenDatabase();
        ClassMolder molder = lockEngine.getClassMolder(type);
        db.begin();
        for (int i = 0; i < identity.length; i++) {
            transactionContext.expireCache(lockEngine, molder, identity[i]);
        }
        db.commit();
View Full Code Here

            if ( value != null ) {
                Class valueClass = value.getClass();

                if ( paramClass.isAssignableFrom( valueClass ) ) {
                    ClassMolder molder = _dbImpl.getLockEngine().getClassMolder( valueClass );

                    if ( molder != null ) {
                        value = molder.getActualIdentity( _dbImpl.getClassLoader(), value );
                    }
                } else if ( info.isUserDefined() ) {
                        //If the user specified a type they must pass that exact type.

                        throw new IllegalArgumentException( "Query paramter " +
View Full Code Here

TOP

Related Classes of org.exolab.castor.persist.ClassMolder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.