use of org.jpox.samples.dependentfield.DependentHolder 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();
}
}
use of org.jpox.samples.dependentfield.DependentHolder in project tests by datanucleus.
the class DependentFieldTest method testBidirectionalDependentFields.
/**
* Test of an Inverse 1-N with dependent specified at both ends.
*/
public void testBidirectionalDependentFields() {
try {
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
Object containerId = null;
Object element1Id = null;
Object element2Id = null;
try {
tx.begin();
DependentHolder holder = new DependentHolder(1, "Basic Container");
DependentElement1 element1 = new DependentElement1(1, "Element 1");
DependentElement1 element2 = new DependentElement1(2, "Element 2");
holder.getSetDependent2().add(element1);
holder.getSetDependent2().add(element2);
pm.makePersistent(holder);
tx.commit();
containerId = pm.getObjectId(holder);
element1Id = pm.getObjectId(element1);
element2Id = pm.getObjectId(element2);
} catch (Exception e) {
e.printStackTrace();
LOG.error(e);
fail("Exception thrown while persisting bidirectional dependent objects : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
// Delete the container
pm = pmf.getPersistenceManager();
tx = pm.currentTransaction();
try {
tx.begin();
DependentHolder holder = (DependentHolder) pm.getObjectById(containerId);
pm.getObjectById(element1Id);
pm.getObjectById(element2Id);
assertEquals("Dependent container has incorrect number of dependent elements", 2, holder.getSetDependent2().size());
// Delete the container
pm.deletePersistent(holder);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
LOG.error(e);
fail("Exception thrown while deleting bidirectional dependent objects : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
// Check that none of the objects is still present
pm = pmf.getPersistenceManager();
tx = pm.currentTransaction();
try {
tx.begin();
try {
DependentHolder holder = (DependentHolder) pm.getObjectById(containerId);
if (holder != null) {
fail("Bidirectional dependent container still exists after deletion!");
}
} catch (Exception e) {
}
try {
DependentElement1 element1 = (DependentElement1) pm.getObjectById(element1Id);
if (element1 != null) {
fail("Bidirectional dependent element 1 still exists after deletion!");
}
} catch (Exception e) {
}
try {
DependentElement1 element2 = (DependentElement1) pm.getObjectById(element2Id);
if (element2 != null) {
fail("Bidirectional dependent element 2 still exists after deletion!");
}
} catch (Exception e) {
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
LOG.error(e);
fail("Exception thrown while checking for deleted bidirectional dependent objects : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
// Recreate the container and elements
pm = pmf.getPersistenceManager();
tx = pm.currentTransaction();
try {
tx.begin();
DependentHolder holder = new DependentHolder(11, "Basic Container 11");
DependentElement1 element1 = new DependentElement1(11, "Element 11");
DependentElement1 element2 = new DependentElement1(12, "Element 12");
holder.getSetDependent2().add(element1);
holder.getSetDependent2().add(element2);
pm.makePersistent(holder);
tx.commit();
containerId = pm.getObjectId(holder);
element1Id = pm.getObjectId(element1);
element2Id = pm.getObjectId(element2);
} catch (Exception e) {
e.printStackTrace();
LOG.error(e);
fail("Exception thrown while persisting bidirectional dependent objects : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
// Remove an element
pm = pmf.getPersistenceManager();
tx = pm.currentTransaction();
try {
tx.begin();
DependentHolder holder = (DependentHolder) pm.getObjectById(containerId);
DependentElement1 element2 = (DependentElement1) pm.getObjectById(element2Id);
assertEquals("Dependent container has incorrect number of dependent elements", 2, holder.getSetDependent2().size());
// Remove the second element from the container. This will empty the collection, and then
// will delete it since it is dependent on the owner, and delete the container since that
// is dependent on the elements.
holder.getSetDependent2().remove(element2);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
LOG.error(e);
fail("Exception thrown while removing element from container : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
// Check that none of the objects is still present
pm = pmf.getPersistenceManager();
tx = pm.currentTransaction();
try {
tx.begin();
try {
DependentHolder holder = (DependentHolder) pm.getObjectById(containerId);
if (holder == null) {
fail("Bidirectional dependent container doesn't exist after removal of element!");
}
} catch (Exception e) {
}
try {
DependentElement1 element1 = (DependentElement1) pm.getObjectById(element1Id);
if (element1 == null) {
fail("Bidirectional dependent element 1 doesn't exist after removal of element!");
}
} catch (Exception e) {
}
try {
DependentElement1 element2 = (DependentElement1) pm.getObjectById(element2Id);
if (element2 != null) {
fail("Bidirectional dependent element 2 still exists after its removal from container. Should have been deleted when removed from the container!");
}
} catch (Exception e) {
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
LOG.error(e);
fail("Exception thrown while checking for bidirectional dependent objects : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
} finally {
clearDependentData(pmf);
}
}
Aggregations