Search in sources :

Example 6 with DependentElement

use of org.jpox.samples.dependentfield.DependentElement in project tests by datanucleus.

the class DependentFieldTest method testRemoveDependentFieldOnDetached.

/**
 * Test of the nulling of a 1-1 relation whilst detached and then re-attaching the relation.
 * Should result in the deletion of the dependent element.
 */
public void testRemoveDependentFieldOnDetached() {
    try {
        // Create the objects
        DependentHolder holder = new DependentHolder(0, "field0");
        DependentElement dependent = new DependentElement(0, "el" + 0);
        holder.setElement(dependent);
        Object holderId = null;
        Object elementId = null;
        PersistenceManager pm = pmf.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        try {
            // Persist the objects
            tx.begin();
            pm.makePersistent(holder);
            tx.commit();
            holderId = pm.getObjectId(holder);
            elementId = pm.getObjectId(dependent);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.error(e);
            fail("Exception thrown while persisting dependent field data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
        pm = pmf.getPersistenceManager();
        tx = pm.currentTransaction();
        try {
            // Detach the field object
            tx.begin();
            DependentHolder loaded = (DependentHolder) pm.getObjectById(holderId, true);
            DependentHolder detached = (DependentHolder) pm.detachCopy(loaded);
            tx.commit();
            // Nullify the relation
            detached.setElement(null);
            // Attach the changes. This operation should remove the dependent element
            tx.begin();
            pm.makePersistent(detached);
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            LOG.error(e);
            fail("Exception thrown while persisting dependent field data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
        // Check the results
        pm = pmf.getPersistenceManager();
        tx = pm.currentTransaction();
        try {
            tx.begin();
            DependentHolder loaded = (DependentHolder) pm.getObjectById(holderId, true);
            // Check that the dependent field is null
            assertNull(loaded.getElement());
            // Check that the dependent element has been removed.
            try {
                DependentElement retrievedElement = (DependentElement) pm.getObjectById(elementId);
                if (retrievedElement != null) {
                    fail("Dependent field hasnt been deleted yet should have been since it is dependent and was removed from the 1-1 Relation");
                }
            } catch (JDOObjectNotFoundException e) {
            // Expected result
            }
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            LOG.error(e);
            fail("Exception thrown while persisting dependent field data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
    } finally {
        clearDependentData(pmf);
    }
}
Also used : DependentElement(org.jpox.samples.dependentfield.DependentElement) Transaction(javax.jdo.Transaction) JDOObjectNotFoundException(javax.jdo.JDOObjectNotFoundException) PersistenceManager(javax.jdo.PersistenceManager) DependentHolder(org.jpox.samples.dependentfield.DependentHolder) JDOObjectNotFoundException(javax.jdo.JDOObjectNotFoundException)

Example 7 with DependentElement

use of org.jpox.samples.dependentfield.DependentElement in project tests by datanucleus.

the class DependentFieldTest method testNullifyNonPersistent1to1Relation.

/**
 * Test the nullification of a 1-1 relation marked as dependent, when the value is a transient PC.
 */
public void testNullifyNonPersistent1to1Relation() {
    try {
        Object holderId = null;
        // Persist the objects
        PersistenceManager pm = pmf.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        try {
            DependentHolder field = new DependentHolder(0, "field0");
            // Persist the objects
            tx.begin();
            pm.makePersistent(field);
            tx.commit();
            holderId = pm.getObjectId(field);
        } catch (Exception e) {
            e.printStackTrace();
            LOG.error(e);
            fail("Exception thrown while persisting dependent field data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
        // Retrieve the object, set a transient PC and nullify the element
        pm = pmf.getPersistenceManager();
        tx = pm.currentTransaction();
        try {
            // This operation should remove the dependent element
            tx.begin();
            DependentHolder loaded = (DependentHolder) pm.getObjectById(holderId, true);
            DependentElement dependent = new DependentElement(0, "el" + 0);
            loaded.setElement(dependent);
            loaded.setElement(null);
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            LOG.error(e);
            fail("Exception thrown while persisting dependent field data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
        // Check the results
        pm = pmf.getPersistenceManager();
        tx = pm.currentTransaction();
        try {
            tx.begin();
            // Check that the dependent field is empty
            DependentHolder loaded = (DependentHolder) pm.getObjectById(holderId, true);
            assertNull(loaded.getElement());
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            LOG.error(e);
            fail("Exception thrown while persisting dependent field data : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            pm.close();
        }
    } finally {
        // Clean out our data
        clearDependentData(pmf);
    }
}
Also used : Transaction(javax.jdo.Transaction) DependentElement(org.jpox.samples.dependentfield.DependentElement) PersistenceManager(javax.jdo.PersistenceManager) DependentHolder(org.jpox.samples.dependentfield.DependentHolder) JDOObjectNotFoundException(javax.jdo.JDOObjectNotFoundException)

Example 8 with DependentElement

use of org.jpox.samples.dependentfield.DependentElement in project tests by datanucleus.

the class DependentFieldTest method clearDependentData.

/**
 * Convenience method to clean out dependent data
 * @param pmf The pmf to use
 */
private void clearDependentData(PersistenceManagerFactory pmf) {
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    try {
        // disassociate all dependent fields
        tx.begin();
        Extent ext = pm.getExtent(DependentHolder.class, false);
        Iterator it = ext.iterator();
        while (it.hasNext()) {
            DependentHolder holder = (DependentHolder) it.next();
            DependentElement element = holder.getElement();
            if (element != null) {
                element.setOwner(null);
                element.setKey(null);
                pm.flush();
            }
            holder.setElement(null);
            holder.setListDependent1(null);
            holder.setListNonDependent1(null);
            holder.setSetDependent1(null);
            holder.setSetNonDependent1(null);
            holder.setMapDependent1(null);
            holder.setMapNonDependent1(null);
            holder.setMapDependentKeys1(null);
            holder.setMapDependentValues1(null);
            holder.setMapNonDependentKeys1(null);
            holder.setMapNonDependentValues1(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentHolder.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentHolder holder = (DependentHolder) it.next();
            DependentElement element = holder.getElement();
            if (element != null) {
                element.setOwner(null);
                element.setKey(null);
                pm.flush();
            }
            holder.setElement(null);
            holder.setListDependent2(null);
            holder.setListNonDependent2(null);
            holder.setSetDependent2(null);
            holder.setSetNonDependent2(null);
            holder.setMapDependent2(null);
            holder.setMapNonDependent2(null);
            holder.setMapDependentKeys2(null);
            holder.setMapDependentValues2(null);
            holder.setMapNonDependentKeys2(null);
            holder.setMapNonDependentValues2(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement1.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement1 field = (DependentElement1) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement2.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement2 field = (DependentElement2) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement3.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement3 field = (DependentElement3) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement4.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement4 field = (DependentElement4) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement5.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement5 field = (DependentElement5) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement6.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement6 field = (DependentElement6) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement7.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement7 field = (DependentElement7) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement8.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement8 field = (DependentElement8) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement9.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement9 field = (DependentElement9) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        ext = pm.getExtent(DependentElement10.class, false);
        it = ext.iterator();
        while (it.hasNext()) {
            DependentElement10 field = (DependentElement10) it.next();
            field.setKey(null);
            field.setOwner(null);
            pm.flush();
        }
        tx.commit();
        clean(pmf, DependentHolder.class);
        clean(pmf, DependentElement1.class);
        clean(pmf, DependentElement2.class);
        clean(pmf, DependentElement3.class);
        clean(pmf, DependentElement4.class);
        clean(pmf, DependentElement5.class);
        clean(pmf, DependentElement6.class);
        clean(pmf, DependentElement7.class);
        clean(pmf, DependentElement8.class);
        clean(pmf, DependentElement9.class);
        clean(pmf, DependentElement10.class);
        clean(pmf, DependentHolder.class);
        clean(pmf, DepInterfaceImpl1.class);
        clean(pmf, DepInterfaceImpl2.class);
    } finally {
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
    }
}
Also used : DependentElement(org.jpox.samples.dependentfield.DependentElement) PersistenceManager(javax.jdo.PersistenceManager) Extent(javax.jdo.Extent) DependentHolder(org.jpox.samples.dependentfield.DependentHolder) DependentElement10(org.jpox.samples.dependentfield.DependentElement10) Transaction(javax.jdo.Transaction) DependentElement3(org.jpox.samples.dependentfield.DependentElement3) DependentElement4(org.jpox.samples.dependentfield.DependentElement4) DependentElement1(org.jpox.samples.dependentfield.DependentElement1) DependentElement2(org.jpox.samples.dependentfield.DependentElement2) Iterator(java.util.Iterator) DependentElement7(org.jpox.samples.dependentfield.DependentElement7) DependentElement8(org.jpox.samples.dependentfield.DependentElement8) DependentElement5(org.jpox.samples.dependentfield.DependentElement5) DependentElement6(org.jpox.samples.dependentfield.DependentElement6) DependentElement9(org.jpox.samples.dependentfield.DependentElement9)

Aggregations

DependentElement (org.jpox.samples.dependentfield.DependentElement)8 PersistenceManager (javax.jdo.PersistenceManager)7 DependentHolder (org.jpox.samples.dependentfield.DependentHolder)7 JDOObjectNotFoundException (javax.jdo.JDOObjectNotFoundException)6 Transaction (javax.jdo.Transaction)6 DependentElement1 (org.jpox.samples.dependentfield.DependentElement1)2 DependentElement10 (org.jpox.samples.dependentfield.DependentElement10)2 DependentElement2 (org.jpox.samples.dependentfield.DependentElement2)2 DependentElement3 (org.jpox.samples.dependentfield.DependentElement3)2 DependentElement4 (org.jpox.samples.dependentfield.DependentElement4)2 DependentElement5 (org.jpox.samples.dependentfield.DependentElement5)2 DependentElement6 (org.jpox.samples.dependentfield.DependentElement6)2 DependentElement7 (org.jpox.samples.dependentfield.DependentElement7)2 DependentElement8 (org.jpox.samples.dependentfield.DependentElement8)2 DependentElement9 (org.jpox.samples.dependentfield.DependentElement9)2 Iterator (java.util.Iterator)1 Extent (javax.jdo.Extent)1