entities im current und release Stand können prinzipiell wir folgt gelöscht werden (Modulcode). Wichtig sind die Rollback Aufrufe, um nicht mit dem Datenbestand im Cache aneinander zu geraten.
public boolean deleteEntity(Entity e, Content2 c) {
boolean result = false;
Schema s = c.getTemplate().getSchema();
if(s.getIncomingReferences(e).length == 0 || admin) {
try {
c.lock(e);
Dataset eDS = c.getDataset(e);
eDS.delete();
eDS.save();
} catch (LockException le) {
Logging.logError("Lockexception: ",le,LOGGER);
le.printStackTrace();
} finally {
try {
c.unlock(e);
c.setLock(true);
c.save();
c.setLock(false);
e.getSession().commit();
} catch (LockException le) {
le.printStackTrace();
} catch (ElementDeletedException e1) {
e1.printStackTrace();
}
}
e.getSession().rollback(); //VOODOO
Session releaseSession = c.getTemplate().getSchema().getSession(true); //delete page entity (release state)
releaseSession.rollback(); //no VOODOO // reset timestamp to now - read actual data
Entity eRelease = releaseSession.find(e.getKeyValue());
try {
c.lock(eRelease);
Dataset eDS = c.getDataset(eRelease);
eDS.delete();
eDS.save();
} catch (LockException le) {
Logging.logError("Lockexception: ",le,LOGGER);
le.printStackTrace();
} finally {
try {
c.unlock(eRelease);
releaseSession.commit();
} catch (LockException le) {
le.printStackTrace();
}
releaseSession.rollback(); //VOODOO
}
result = true;
} else {
Logging.logError("Incoming references found", LOGGER);
}
if(!result) {
Logging.logError("Could not delete entity", LOGGER);
} else {
Logging.logInfo("Deletion of entity successful", LOGGER);
}
return result;
}