use of org.olat.core.logging.DBRuntimeException in project OpenOLAT by OpenOLAT.
the class BusinessGroupServiceImpl method deleteBusinessGroup.
@Override
public void deleteBusinessGroup(BusinessGroup group) {
try {
OLATResourceableJustBeforeDeletedEvent delEv = new OLATResourceableJustBeforeDeletedEvent(group);
// notify all (currently running) BusinessGroupXXXcontrollers
// about the deletion which will occur.
CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(delEv, group);
// refresh object to avoid stale object exceptions
group = loadBusinessGroup(group);
// 0) Loop over all deletableGroupData
Map<String, DeletableGroupData> deleteListeners = CoreSpringFactory.getBeansOfType(DeletableGroupData.class);
for (DeletableGroupData deleteListener : deleteListeners.values()) {
if (log.isDebug()) {
log.debug("deleteBusinessGroup: call deleteListener=" + deleteListener);
}
deleteListener.deleteGroupDataFor(group);
}
// 1) Delete all group properties
CollaborationTools ct = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(group);
// deletes everything concerning properties&collabTools
ct.deleteTools(group);
// 1.c)delete user in security groups
// removeFromRepositoryEntrySecurityGroup(group);
// 2) Delete the group areas
areaManager.deleteBGtoAreaRelations(group);
// 3) Delete the relations
businessGroupRelationDAO.deleteRelationsToRepositoryEntry(group);
assessmentModeDao.deleteAssessmentModesToGroup(group);
// 4) delete properties
propertyManager.deleteProperties(null, group, null, null, null);
propertyManager.deleteProperties(null, null, group, null, null);
// 5) delete the publisher attached to this group (e.g. the forum and folder
// publisher)
notificationsManager.deletePublishersOf(group);
// 6) delete info messages and subscription context associated with this group
infoMessageManager.removeInfoMessagesAndSubscriptionContext(group);
// 7) the group
businessGroupDAO.delete(group);
// 8) delete the associated security groups
// TODO group
dbInstance.commit();
log.audit("Deleted Business Group", group.toString());
} catch (DBRuntimeException dbre) {
Throwable th = dbre.getCause();
if ((th instanceof ObjectNotFoundException) && th.getMessage().contains("org.olat.group.BusinessGroupImpl")) {
// group already deleted
return;
}
if ((th instanceof StaleObjectStateException) && (th.getMessage().startsWith("Row was updated or deleted by another transaction"))) {
// known issue OLAT-3654
log.info("Group was deleted by another user in the meantime. Known issue OLAT-3654");
throw new KnownIssueException("Group was deleted by another user in the meantime", 3654);
} else {
throw dbre;
}
}
}
use of org.olat.core.logging.DBRuntimeException in project openolat by klemens.
the class LockTest method testSaveEvent.
@Test
public void testSaveEvent() {
Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("lock-save-event-");
dbInstance.closeSession();
log.info("Created identity=" + identity);
// The group has no creation date -> commit will fail
GroupImpl entry = new GroupImpl();
entry.setName("bar");
try {
dbInstance.saveObject(entry);
dbInstance.commit();
fail("Should generate an error");
} catch (DBRuntimeException dre) {
log.info("DB connection is in error-state");
}
// DB transaction must be in error state for this test
try {
Locker locker = clusterCoordinator.getLocker();
assertTrue(locker instanceof ClusterLocker);
log.info("ClusterLocker created");
Event event = new SignOnOffEvent(identity, false);
log.info("START locker.event(event)");
((ClusterLocker) locker).event(event);
log.info("DONE locker.event(event)");
} catch (Exception ex) {
log.error("", ex);
fail("BLOCKER : ClusterLocker.event is not error-safe, db exception could happen and de-register event-listener");
}
}
use of org.olat.core.logging.DBRuntimeException in project openolat by klemens.
the class DBTest method testErrorHandling.
/**
* testErrorHandling
*/
@Test
public void testErrorHandling() {
GroupImpl entry = new GroupImpl();
entry.setName("foo");
try {
dbInstance.saveObject(entry);
fail("Should generate an error");
} catch (DBRuntimeException dre) {
assertTrue(dbInstance.isError());
Assert.assertNotNull(dbInstance.getError());
}
// the close must clear the transaction
dbInstance.closeSession();
// a second try must work
GroupImpl entryTwo = new GroupImpl();
entryTwo.setName("bar");
entryTwo.setCreationDate(new Date());
dbInstance.saveObject(entryTwo);
dbInstance.commitAndCloseSession();
}
use of org.olat.core.logging.DBRuntimeException in project openolat by klemens.
the class BusinessGroupServiceImpl method deleteBusinessGroup.
@Override
public void deleteBusinessGroup(BusinessGroup group) {
try {
OLATResourceableJustBeforeDeletedEvent delEv = new OLATResourceableJustBeforeDeletedEvent(group);
// notify all (currently running) BusinessGroupXXXcontrollers
// about the deletion which will occur.
CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(delEv, group);
// refresh object to avoid stale object exceptions
group = loadBusinessGroup(group);
// 0) Loop over all deletableGroupData
Map<String, DeletableGroupData> deleteListeners = CoreSpringFactory.getBeansOfType(DeletableGroupData.class);
for (DeletableGroupData deleteListener : deleteListeners.values()) {
if (log.isDebug()) {
log.debug("deleteBusinessGroup: call deleteListener=" + deleteListener);
}
deleteListener.deleteGroupDataFor(group);
}
// 1) Delete all group properties
CollaborationTools ct = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(group);
// deletes everything concerning properties&collabTools
ct.deleteTools(group);
// 1.c)delete user in security groups
// removeFromRepositoryEntrySecurityGroup(group);
// 2) Delete the group areas
areaManager.deleteBGtoAreaRelations(group);
// 3) Delete the relations
businessGroupRelationDAO.deleteRelationsToRepositoryEntry(group);
assessmentModeDao.deleteAssessmentModesToGroup(group);
// 4) delete properties
propertyManager.deleteProperties(null, group, null, null, null);
propertyManager.deleteProperties(null, null, group, null, null);
// 5) delete the publisher attached to this group (e.g. the forum and folder
// publisher)
notificationsManager.deletePublishersOf(group);
// 6) delete info messages and subscription context associated with this group
infoMessageManager.removeInfoMessagesAndSubscriptionContext(group);
// 7) the group
businessGroupDAO.delete(group);
// 8) delete the associated security groups
// TODO group
dbInstance.commit();
log.audit("Deleted Business Group", group.toString());
} catch (DBRuntimeException dbre) {
Throwable th = dbre.getCause();
if ((th instanceof ObjectNotFoundException) && th.getMessage().contains("org.olat.group.BusinessGroupImpl")) {
// group already deleted
return;
}
if ((th instanceof StaleObjectStateException) && (th.getMessage().startsWith("Row was updated or deleted by another transaction"))) {
// known issue OLAT-3654
log.info("Group was deleted by another user in the meantime. Known issue OLAT-3654");
throw new KnownIssueException("Group was deleted by another user in the meantime", 3654);
} else {
throw dbre;
}
}
}
use of org.olat.core.logging.DBRuntimeException in project openolat by klemens.
the class DBImpl method saveObject.
/**
* Save an object.
*
* @param object
*/
@Override
public void saveObject(Object object) {
EntityManager em = getCurrentEntityManager();
EntityTransaction trx = em.getTransaction();
if (unusableTrx(trx)) {
// some program bug
throw new DBRuntimeException("cannot save in a transaction that is rolledback or committed: " + object);
}
try {
em.persist(object);
} catch (Exception e) {
// we have some error
log.error("", e);
trx.setRollbackOnly();
getData().setError(e);
throw new DBRuntimeException("Save failed in transaction. object: " + object, e);
}
}
Aggregations