public void open() { ensureNotYetOpen(); openSession(); ensureThatState(persistenceManager, is(notNullValue())); addPersistenceQueryProcessors(persistenceManager); state = State.OPEN; }
/** Walking the graph. */ public void resolveField(final ObjectAdapter object, final ObjectAssociation association) { ensureOpened(); ensureInTransaction(); final ObjectAdapter referencedCollectionAdapter = association.get(object); // this code originally brought in from the JPA impl, but seems reasonable. if (association.isOneToManyAssociation()) { ensureThatState(referencedCollectionAdapter, is(notNullValue())); final Object referencedCollection = referencedCollectionAdapter.getObject(); ensureThatState(referencedCollection, is(notNullValue())); // if a proxy collection, then force it to initialize. just 'touching' the object is // sufficient. // REVIEW: I wonder if this is actually needed; does JDO use proxy collections? referencedCollection.hashCode(); } // the JPA impl used to also call its lifecycle listener on the referenced collection object, eg // List, // itself. I don't think this makes sense to do for JDO (the collection is not a // PersistenceCapable). }
/** * {@inheritDoc} * * <p>Automatically {@link IsisTransactionManager#endTransaction() ends (commits)} the current * (Isis) {@link Transaction}. This in turn {@link DataNucleusObjectStore#commitJdoTransaction() * commits the underlying JPA transaction}. * * <p>The corresponding DataNucleus {@link Entity} is then {@link EntityManager#close() close}d. */ public void close() { ensureOpened(); ensureThatState(persistenceManager, is(notNullValue())); try { final IsisTransaction currentTransaction = getTransactionManager().getTransaction(); if (currentTransaction != null && !currentTransaction.getState().isComplete()) { if (currentTransaction.getState().canCommit()) { getTransactionManager().endTransaction(); } else if (currentTransaction.getState().canAbort()) { getTransactionManager().abortTransaction(); } } } finally { // make sure release everything ok. persistenceManager.close(); state = State.CLOSED; } }
private void ensureInHibernateTransaction() { javax.jdo.Transaction currentTransaction = getPersistenceManager().currentTransaction(); ensureThatState(currentTransaction, is(notNullValue())); ensureThatState(currentTransaction.isActive(), is(true)); }