From 662bd3c9f643b1bfcb0532d77ac082b58362d092 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 15 Jan 2018 09:14:07 +0100 Subject: [PATCH] OO-3234: remove some deprecated interfaces from DBImpl --- .../bps/olat/modules/cl/ChecklistManager.java | 2 +- .../de/bps/onyx/plugin/OnyxResultManager.java | 56 +++--- .../basesecurity/BaseSecurityManager.java | 35 ++-- .../org/olat/core/commons/persistence/DB.java | 69 ------- .../olat/core/commons/persistence/DBImpl.java | 185 +----------------- .../tagging/manager/TaggingManagerImpl.java | 35 ++-- .../coordinate/DBPersistentLockManager.java | 12 +- .../service/ProjectBrokerManagerImpl.java | 29 +-- .../portfolio/manager/EPStructureManager.java | 3 +- .../java/org/olat/user/UserManagerImpl.java | 3 +- .../onyx/plugin/OnyxResultManagerTest.java | 106 ++++++++++ .../basesecurity/BaseSecurityManagerTest.java | 23 +++ .../olat/core/commons/persistence/DBTest.java | 4 +- .../DBPersistentLockManagerTest.java | 103 ++++++++++ .../ProjectBrokerManagerTest.java | 120 ++++++------ .../accesscontrol/ACOfferManagerTest.java | 4 +- .../accesscontrol/ACOrderManagerTest.java | 2 +- .../java/org/olat/test/AllTestsJunit4.java | 2 + 18 files changed, 402 insertions(+), 391 deletions(-) create mode 100644 src/test/java/de/bps/onyx/plugin/OnyxResultManagerTest.java create mode 100644 src/test/java/org/olat/core/util/coordinate/DBPersistentLockManagerTest.java diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistManager.java b/src/main/java/de/bps/olat/modules/cl/ChecklistManager.java index 38a90e62c57..4ebd879c3f1 100644 --- a/src/main/java/de/bps/olat/modules/cl/ChecklistManager.java +++ b/src/main/java/de/bps/olat/modules/cl/ChecklistManager.java @@ -80,7 +80,7 @@ public class ChecklistManager { Checklist checklist; try { // load from db - checklist = DBFactory.getInstance().loadObject(Checklist.class, key); + checklist = DBFactory.getInstance().getCurrentEntityManager().find(Checklist.class, key); } catch (Exception e) { DBFactory.getInstance().closeSession(); // in case of error create new object as fallback diff --git a/src/main/java/de/bps/onyx/plugin/OnyxResultManager.java b/src/main/java/de/bps/onyx/plugin/OnyxResultManager.java index d025cd096e1..177fbcedf01 100644 --- a/src/main/java/de/bps/onyx/plugin/OnyxResultManager.java +++ b/src/main/java/de/bps/onyx/plugin/OnyxResultManager.java @@ -26,8 +26,6 @@ import java.util.Date; import java.util.List; import java.util.Map; -import org.hibernate.type.StandardBasicTypes; -import org.hibernate.type.Type; import org.olat.commons.lifecycle.LifeCycleManager; import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl; import org.olat.core.commons.persistence.DB; @@ -242,11 +240,11 @@ public class OnyxResultManager { } public static QTIResultSet getResultSet(final long uniqueId) { - final List<Long> liste = getResultSetByAssassmentId(uniqueId); + final List<Long> liste = getResultSetByAssessmentId(uniqueId); QTIResultSet qtiResultSet = null; if (liste != null && liste.size() > 0) { Long key = liste.get(0); - qtiResultSet = DBFactory.getInstance().loadObject(QTIResultSet.class, key); + qtiResultSet = DBFactory.getInstance().getCurrentEntityManager().find(QTIResultSet.class, key); DBFactory.getInstance().intermediateCommit(); } return qtiResultSet; @@ -255,11 +253,13 @@ public class OnyxResultManager { public static Boolean isLastTestTry(QTIResultSet testTry) { Boolean isLast = true; - String query = "select rset.key from org.olat.ims.qti.QTIResultSet rset where rset.identity=? and rset.olatResourceDetail=? and rset.creationDate >= ?"; - @SuppressWarnings("unchecked") - List<Long> results = DBFactory.getInstance().find(query, - new Object[] { testTry.getIdentity().getKey(), testTry.getOlatResourceDetail(), testTry.getCreationDate() }, - new Type[] { StandardBasicTypes.LONG, StandardBasicTypes.STRING, StandardBasicTypes.DATE }); + String query = "select rset.key from org.olat.ims.qti.QTIResultSet rset where rset.identity.key=:identityKey and rset.olatResourceDetail=:subIdent and rset.creationDate>=:date"; + List<Long> results = DBFactory.getInstance().getCurrentEntityManager() + .createQuery(query, Long.class) + .setParameter("identityKey", testTry.getIdentity().getKey()) + .setParameter("subIdent", testTry.getOlatResourceDetail()) + .setParameter("date", testTry.getCreationDate()) + .getResultList(); for (Long result : results) { if (!(testTry.getKey().equals(result)) && testTry.getKey() < result) { isLast = false; @@ -275,7 +275,7 @@ public class OnyxResultManager { QTIResultSet lastResultSet = null; for (Long resultSet : suspendedResults) { - QTIResultSet res = (DBFactory.getInstance().loadObject(QTIResultSet.class, resultSet)); + QTIResultSet res = DBFactory.getInstance().getCurrentEntityManager().find(QTIResultSet.class, resultSet); if (lastResultSet != null) { if (lastResultSet.getCreationDate().before(res.getCreationDate())) { lastResultSet = res; @@ -288,23 +288,27 @@ public class OnyxResultManager { return lastResultSet; } - private static List<Long> getSuspendedQTIResultSet(Identity identity, CourseNode node) { - String query = "select rset.key from org.olat.ims.qti.QTIResultSet rset where rset.suspended = ? and rset.identity=? and rset.olatResourceDetail=?"; - List<Long> results = DBFactory.getInstance().find(query, new Object[] { Boolean.TRUE, identity.getKey(), node.getIdent() }, - new Type[] { StandardBasicTypes.BOOLEAN, StandardBasicTypes.LONG, StandardBasicTypes.STRING }); + protected static List<Long> getSuspendedQTIResultSet(Identity identity, CourseNode node) { + DB db = DBFactory.getInstance(); + String q = "select rset.key from org.olat.ims.qti.QTIResultSet rset where rset.suspended=:suspended and rset.identity.key=:identityKey and rset.olatResourceDetail=:subIdent"; + List<Long> results = db.getCurrentEntityManager() + .createQuery(q, Long.class) + .setParameter("suspended", Boolean.TRUE) + .setParameter("identityKey", identity.getKey()) + .setParameter("subIdent", node.getIdent()) + .getResultList(); DBFactory.getInstance().intermediateCommit(); return results; } - private static List<Long> getResultSetByAssassmentId(Long assessmentID) { + protected static List<Long> getResultSetByAssessmentId(Long assessmentID) { DB db = DBFactory.getInstance(); db.commitAndCloseSession(); - StringBuilder slct = new StringBuilder(); - slct.append("select rset.key from "); - slct.append("org.olat.ims.qti.QTIResultSet rset "); - slct.append("where "); - slct.append("rset.assessmentID=? "); - List<Long> results = db.find(slct.toString(), new Object[] { assessmentID }, new Type[] { StandardBasicTypes.LONG }); + String q = "select rset.key from org.olat.ims.qti.QTIResultSet rset where rset.assessmentID=:assessmentId"; + List<Long> results = db.getCurrentEntityManager() + .createQuery(q, Long.class) + .setParameter("assessmentId", assessmentID) + .getResultList(); db.intermediateCommit(); return results; } @@ -432,12 +436,10 @@ public class OnyxResultManager { public static List<QTIResultSet> findResultSets() { final DB db = DBFactory.getInstance(); - - final StringBuilder slct = new StringBuilder(); - slct.append("select rset from "); - slct.append("org.olat.ims.qti.QTIResultSet rset "); - - return db.find(slct.toString()); + String slct = "select rset from org.olat.ims.qti.QTIResultSet rset"; + return db.getCurrentEntityManager() + .createQuery(slct, QTIResultSet.class) + .getResultList(); } public static final String getResultsFilenamePrefix(final String path, final CourseNode courseNode, final long assessmentId) { diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java index 1802c4acb63..ebda4c7df1f 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java @@ -42,8 +42,6 @@ import javax.persistence.LockModeType; import javax.persistence.TemporalType; import javax.persistence.TypedQuery; -import org.hibernate.type.StandardBasicTypes; -import org.hibernate.type.Type; import org.olat.admin.quota.GenericQuotaEditController; import org.olat.admin.sysinfo.SysinfoController; import org.olat.admin.user.UserAdminController; @@ -540,32 +538,29 @@ public class BaseSecurityManager implements BaseSecurity { /** * @see org.olat.basesecurity.Manager#deleteSecurityGroup(org.olat.basesecurity.SecurityGroup) */ + @Override public void deleteSecurityGroup(SecurityGroup secGroup) { // we do not use hibernate cascade="delete", but implement our own (to be // sure to understand our code) - DB db = DBFactory.getInstance(); - //FIXME: fj: Please review: Create rep entry, restart olat, delete the rep - // entry. previous implementation resulted in orange screen - // secGroup = (SecurityGroup)db.loadObject(secGroup); // so we can later - // delete it (hibernate needs an associated session) - secGroup = (SecurityGroup) db.loadObject(secGroup); - //o_clusterREVIEW - //db.reputInHibernateSessionCache(secGroup); - - /* - * if (!db.contains(secGroup)) { secGroup = (SecurityGroupImpl) - * db.loadObject(SecurityGroupImpl.class, secGroup.getKey()); } - */ + secGroup = dbInstance.getCurrentEntityManager() + .getReference(SecurityGroupImpl.class, secGroup.getKey()); + // 1) delete associated users (need to do it manually, hibernate knows // nothing about // the membership, modeled manually via many-to-one and not via set) - db.delete("from org.olat.basesecurity.SecurityGroupMembershipImpl as msi where msi.securityGroup.key = ?", new Object[] { secGroup - .getKey() }, new Type[] { StandardBasicTypes.LONG }); + dbInstance.getCurrentEntityManager() + .createQuery("delete from org.olat.basesecurity.SecurityGroupMembershipImpl where securityGroup=:securityGroup") + .setParameter("securityGroup", secGroup) + .executeUpdate(); // 2) delete all policies - db.delete("from org.olat.basesecurity.PolicyImpl as poi where poi.securityGroup = ?", new Object[] { secGroup.getKey() }, - new Type[] { StandardBasicTypes.LONG }); + + dbInstance.getCurrentEntityManager() + .createQuery("delete from org.olat.basesecurity.PolicyImpl where securityGroup=:securityGroup") + .setParameter("securityGroup", secGroup) + .executeUpdate(); // 3) delete security group - db.deleteObject(secGroup); + dbInstance.getCurrentEntityManager() + .remove(secGroup); } /** diff --git a/src/main/java/org/olat/core/commons/persistence/DB.java b/src/main/java/org/olat/core/commons/persistence/DB.java index 393508fc63d..ee957945d54 100644 --- a/src/main/java/org/olat/core/commons/persistence/DB.java +++ b/src/main/java/org/olat/core/commons/persistence/DB.java @@ -26,12 +26,9 @@ package org.olat.core.commons.persistence; -import java.util.List; - import javax.persistence.EntityManager; import org.hibernate.stat.Statistics; -import org.hibernate.type.Type; import org.infinispan.manager.EmbeddedCacheManager; import org.olat.core.id.Persistable; @@ -63,52 +60,6 @@ public interface DB { */ public void deleteObject(Object object); - /** - * Find objects based on query - * - * @param query - * @param value - * @param type - * @return List of results. - */ - public List find(String query, Object value, Type type); - - /** - * Find objects based on query - * - * @param query - * @param values - * @param types - * @return List of results. - */ - public List find(String query, Object[] values, Type[] types); - - /** - * Find an object. - * - * @param theClass - * @param key - * @return Object, if any found. or null otherwise - */ - public <U> U findObject(Class<U> theClass, Long key); - - /** - * Find objects based on query - * - * @param query - * @return List of results. - */ - public List find(String query); - - /** - * Load an object. - * - * @param theClass - * @param key - * @return Object. - */ - public <U> U loadObject(Class<U> theClass, Long key); - /** * Save an object. * @@ -123,26 +74,6 @@ public interface DB { */ public void updateObject(Object object); - /** - * Deletion query. - * - * @param query - * @param value - * @param type - * @return nr of values deleted - */ - public abstract int delete(String query, Object value, Type type); - - /** - * Deletion query. - * - * @param query - * @param values - * @param types - * @return nr of deleted rows - */ - public int delete(String query, Object[] values, Type[] types); - /** * see DB.loadObject(Persistable persistable, boolean forceReloadFromDB) * diff --git a/src/main/java/org/olat/core/commons/persistence/DBImpl.java b/src/main/java/org/olat/core/commons/persistence/DBImpl.java index ca2cb053f2f..22aa8b5bad8 100644 --- a/src/main/java/org/olat/core/commons/persistence/DBImpl.java +++ b/src/main/java/org/olat/core/commons/persistence/DBImpl.java @@ -30,7 +30,6 @@ import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Enumeration; -import java.util.List; import java.util.Properties; import javax.persistence.Cache; @@ -43,10 +42,8 @@ import javax.persistence.RollbackException; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; -import org.hibernate.jpa.HibernateEntityManager; -import org.hibernate.jpa.HibernateEntityManagerFactory; +import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.stat.Statistics; -import org.hibernate.type.Type; import org.infinispan.manager.EmbeddedCacheManager; import org.olat.core.configuration.Destroyable; import org.olat.core.id.Persistable; @@ -72,7 +69,7 @@ public class DBImpl implements DB, Destroyable { private String dbVendor; private static EntityManagerFactory emf; - private final ThreadLocal<ThreadLocalData> data = new ThreadLocal<ThreadLocalData>(); + private final ThreadLocal<ThreadLocalData> data = new ThreadLocal<>(); // Max value for commit-counter, values over this limit will be logged. private static int maxCommitCounter = 10; @@ -276,7 +273,7 @@ public class DBImpl implements DB, Destroyable { } private Session getSession(EntityManager em) { - return em.unwrap(HibernateEntityManager.class).getSession(); + return em.unwrap(Session.class); } private boolean unusableTrx(EntityTransaction trx) { @@ -289,7 +286,7 @@ public class DBImpl implements DB, Destroyable { getData().resetAccessCounter(); } else { getData().incrementAccessCounter(); - } + } } /** @@ -304,10 +301,6 @@ public class DBImpl implements DB, Destroyable { // that was closed underneath by hibernate (not noticed by DBImpl). // in order to be robust for any similar situation, we check if the // connection is open, otherwise we shouldn't worry about doing any commit/rollback anyway - - - //commit - //getCurrentEntityManager(); EntityManager s = getData().getEntityManager(false); if(s != null) { EntityTransaction trx = s.getTransaction(); @@ -375,164 +368,6 @@ public class DBImpl implements DB, Destroyable { } } - /** - * Deletion query. - * - * @param query - * @param value - * @param type - * @return nr of deleted rows - */ - @Override - public int delete(String query, Object value, Type type) { - int deleted = 0; - EntityManager em = getCurrentEntityManager(); - EntityTransaction trx = em.getTransaction(); - if (unusableTrx(trx)) { // some program bug - throw new DBRuntimeException("cannot delete in a transaction that is rolledback or committed " + value); - } - try { - //old: deleted = getSession().delete(query, value, type); - Session si = getSession(em); - Query qu = si.createQuery(query); - qu.setParameter(0, value, type); - List foundToDel = qu.list(); - int deletionCount = foundToDel.size(); - for (int i = 0; i < deletionCount; i++ ) { - si.delete( foundToDel.get(i) ); - } - } catch (HibernateException e) { // we have some error - trx.setRollbackOnly(); - throw new DBRuntimeException ("Could not delete object: " + value, e); - } - return deleted; - } - - /** - * Deletion query. - * - * @param query - * @param values - * @param types - * @return nr of deleted rows - */ - @Override - public int delete(String query, Object[] values, Type[] types) { - EntityManager em = getCurrentEntityManager(); - EntityTransaction trx = em.getTransaction(); - if (unusableTrx(trx)) { // some program bug - throw new DBRuntimeException("cannot delete in a transaction that is rolledback or committed " + values); - } - try { - //old: deleted = getSession().delete(query, values, types); - Session si = getSession(em); - Query qu = si.createQuery(query); - qu.setParameters(values, types); - List foundToDel = qu.list(); - int deleted = foundToDel.size(); - for (int i = 0; i < deleted; i++ ) { - si.delete( foundToDel.get(i) ); - } - return deleted; - } catch (HibernateException e) { // we have some error - trx.setRollbackOnly(); - throw new DBRuntimeException ("Could not delete object: " + values, e); - } - } - - /** - * Find objects based on query - * - * @param query - * @param value - * @param type - * @return List of results. - */ - @Override - public List find(String query, Object value, Type type) { - EntityManager em = getCurrentEntityManager(); - EntityTransaction trx = em.getTransaction(); - try { - Query qu = getSession(em).createQuery(query); - qu.setParameter(0, value, type); - return qu.list(); - } catch (HibernateException e) { - trx.setRollbackOnly(); - String msg = "Find failed in transaction. Query: " + query + " " + e; - getData().setError(e); - throw new DBRuntimeException(msg, e); - } - } - - /** - * Find objects based on query - * - * @param query - * @param values - * @param types - * @return List of results. - */ - @Override - public List find(String query, Object[] values, Type[] types) { - EntityManager em = getCurrentEntityManager(); - try { - // old: li = getSession().find(query, values, types); - Query qu = getSession(em).createQuery(query); - qu.setParameters(values, types); - return qu.list(); - } catch (HibernateException e) { - em.getTransaction().setRollbackOnly(); - getData().setError(e); - throw new DBRuntimeException("Find failed in transaction. Query: " + query + " " + e, e); - } - } - - /** - * Find objects based on query - * - * @param query - * @return List of results. - */ - @Override - public List find(String query) { - EntityManager em = getCurrentEntityManager(); - try { - return em.createQuery(query).getResultList(); - } catch (HibernateException e) { - em.getTransaction().setRollbackOnly(); - getData().setError(e); - throw new DBRuntimeException("Find in transaction failed: " + query + " " + e, e); - } - } - - /** - * Find an object. - * - * @param theClass - * @param key - * @return Object, if any found. Null, if non exist. - */ - @Override - public <U> U findObject(Class<U> theClass, Long key) { - return getCurrentEntityManager().find(theClass, key); - } - - /** - * Load an object. - * - * @param theClass - * @param key - * @return Object. - */ - @Override - public <U> U loadObject(Class<U> theClass, Long key) { - try { - return getCurrentEntityManager().find(theClass, key); - } catch (Exception e) { - throw new DBRuntimeException("loadObject error: " + theClass + " " + key + " ", e); - } - } - /** * Save an object. * @@ -635,21 +470,21 @@ public class DBImpl implements DB, Destroyable { if (contains(persistable)) { // case b - then we can use evict and load evict(em, persistable, getData()); - return loadObject(theClass, persistable.getKey()); + return em.find(theClass, persistable.getKey()); } else { // case a or c - unfortunatelly we can't distinguish these two cases // and session.refresh(Object) doesn't work. // the only scenario that works is load/evict/load - Persistable attachedObj = loadObject(theClass, persistable.getKey()); + Persistable attachedObj = em.find(theClass, persistable.getKey()); evict(em, attachedObj, getData()); - return loadObject(theClass, persistable.getKey()); + return em.find(theClass, persistable.getKey()); } } else if (!contains(persistable)) { // forceReloadFromDB is false - hence it is OK to take it from the cache if it would be there // now this object directly is not in the cache, but it's possible that the object is detached // and there is an object with the same id in the hibernate cache. // therefore the following loadObject can either return it from the cache or load it from the DB - return loadObject(theClass, persistable.getKey()); + return em.find(theClass, persistable.getKey()); } else { // nothing to do, return the same object return persistable; @@ -791,8 +626,8 @@ public class DBImpl implements DB, Destroyable { */ @Override public Statistics getStatistics() { - if(emf instanceof HibernateEntityManagerFactory) { - return ((HibernateEntityManagerFactory)emf).getSessionFactory().getStatistics(); + if(emf instanceof SessionFactoryImplementor) { + return ((SessionFactoryImplementor)emf).getStatistics(); } return null; } diff --git a/src/main/java/org/olat/core/commons/services/tagging/manager/TaggingManagerImpl.java b/src/main/java/org/olat/core/commons/services/tagging/manager/TaggingManagerImpl.java index e2e4d5dbffb..2dba56a1901 100644 --- a/src/main/java/org/olat/core/commons/services/tagging/manager/TaggingManagerImpl.java +++ b/src/main/java/org/olat/core/commons/services/tagging/manager/TaggingManagerImpl.java @@ -19,15 +19,14 @@ */ package org.olat.core.commons.services.tagging.manager; -import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import org.hibernate.type.StandardBasicTypes; -import org.hibernate.type.Type; +import javax.persistence.Query; + import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DBQuery; import org.olat.core.commons.services.tagging.model.Tag; @@ -246,27 +245,27 @@ public class TaggingManagerImpl extends BasicManager implements TaggingManager { @Override public void deleteTags(OLATResourceable ores, String subPath, String businessPath) { - List<Object> values = new ArrayList<Object>(); - List<Type> types = new ArrayList<Type>(); StringBuilder sb = new StringBuilder(); - sb.append("from ").append(TagImpl.class.getName()).append(" where resId=? and resName=?"); - values.add(ores.getResourceableId()); - types.add(StandardBasicTypes.LONG); - values.add(ores.getResourceableTypeName()); - types.add(StandardBasicTypes.STRING); + sb.append("delete from ").append(TagImpl.class.getName()).append(" where resId=:resId and resName=:resName"); + if(subPath != null) { + sb.append(" and resSubPath=:subPath"); + } + if(businessPath != null) { + sb.append(" and businessPath=:businessPath"); + } + + Query query = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString()) + .setParameter("resId", ores.getResourceableId()) + .setParameter("resName", ores.getResourceableTypeName()); if(subPath != null) { - sb.append(" and resSubPath=?"); - values.add(subPath); - types.add(StandardBasicTypes.STRING); + query.setParameter("subPath", subPath); } if(businessPath != null) { - sb.append(" and businessPath=?"); - values.add(businessPath); - types.add(StandardBasicTypes.STRING); + query.setParameter("businessPath", businessPath); } - int tagsDeleted = dbInstance.delete(sb.toString(), values.toArray(new Object[values.size()]), - types.toArray(new Type[types.size()])); + int tagsDeleted = query.executeUpdate(); logAudit("Deleted " + tagsDeleted + " tags of resource: " + ores.getResourceableTypeName() + " :: " + ores.getResourceableId()); } diff --git a/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java b/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java index fff5639dc5a..5859dd88968 100644 --- a/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java +++ b/src/main/java/org/olat/core/util/coordinate/DBPersistentLockManager.java @@ -26,8 +26,6 @@ package org.olat.core.util.coordinate; import java.io.File; -import org.hibernate.type.StandardBasicTypes; -import org.hibernate.type.Type; import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.id.Identity; @@ -125,9 +123,13 @@ public class DBPersistentLockManager implements PersistentLockManager, UserDataD */ @Override public void deleteUserData(Identity identity, String newDeletedUserName, File archivePath) { - String query = "from v in class org.olat.properties.Property where v.category = ? and v.longValue = ?"; - DBFactory.getInstance().delete(query, new Object[] { CATEGORY_PERSISTENTLOCK, identity.getKey() }, - new Type[] { StandardBasicTypes.STRING, StandardBasicTypes.LONG }); + String query = "delete from org.olat.properties.Property where category=:category and longValue=:val"; + + DBFactory.getInstance().getCurrentEntityManager() + .createQuery(query) + .setParameter("category", CATEGORY_PERSISTENTLOCK) + .setParameter("val", identity.getKey()) + .executeUpdate(); log.debug("All db-persisting-locks deleted for identity=" + identity); } diff --git a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java index 7b2274f201e..37f275e82d2 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/service/ProjectBrokerManagerImpl.java @@ -34,7 +34,6 @@ import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; -import org.hibernate.type.StandardBasicTypes; import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.GroupRoles; import org.olat.basesecurity.SecurityGroup; @@ -162,7 +161,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro @Override public boolean existsProject(Long projectKey) { - return dbInstance.findObject(ProjectImpl.class, projectKey) != null; + return dbInstance. getCurrentEntityManager().find(ProjectImpl.class, projectKey) != null; } @Override @@ -536,8 +535,9 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro return projectBroker; } + @Override public ProjectBroker getProjectBroker(Long projectBrokerId) { - return dbInstance.loadObject(ProjectBrokerImpl.class, projectBrokerId); + return dbInstance.getCurrentEntityManager().find(ProjectBrokerImpl.class, projectBrokerId); } private boolean isEnrollmentDateOk(Project project, ProjectBrokerModuleConfiguration moduleConfig) { @@ -568,6 +568,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro * @param projectList * @return */ + @Override public boolean isParticipantInAnyProject(Identity identity, List<Project> projectList) { for (Iterator<Project> iterator = projectList.iterator(); iterator.hasNext();) { Project project = iterator.next(); @@ -578,12 +579,15 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro return false; } - @SuppressWarnings("unchecked") + @Override public List<Project> getProjectsWith(BusinessGroup group) { - List<Project> projectList = dbInstance.find( - "select project from org.olat.course.nodes.projectbroker.datamodel.ProjectImpl as project" + - " where project.projectGroup.key = ?", group.getKey(), StandardBasicTypes.LONG); - return projectList; + StringBuilder sb = new StringBuilder(); + sb.append("select project from ").append(ProjectImpl.class.getName()).append(" as project") + .append(" where project.projectGroup.key=:groupKey"); + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Project.class) + .setParameter("groupKey", group.getKey()) + .getResultList(); } @Override @@ -591,6 +595,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro final Long projectBrokerId = project.getProjectBroker().getKey(); OLATResourceable projectBrokerOres = OresHelper.createOLATResourceableInstance(this.getClass(),projectBrokerId); CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync( projectBrokerOres, new SyncerExecutor() { + @Override public void execute() { // For cluster-safe : reload project object here another node might have changed this in the meantime Project reloadedProject = (Project) dbInstance.loadObject(project, true); @@ -599,13 +604,13 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro } }); } - + + @Override public Long getProjectBrokerId(CoursePropertyManager cpm, CourseNode courseNode) { Property projectBrokerKeyProperty = cpm.findCourseNodeProperty(courseNode, null, null, ProjectBrokerCourseNode.CONF_PROJECTBROKER_KEY); // Check if forum-property exist if (projectBrokerKeyProperty != null) { - Long projectBrokerId = projectBrokerKeyProperty.getLongValue(); - return projectBrokerId; + return projectBrokerKeyProperty.getLongValue(); } return null; } @@ -642,7 +647,7 @@ public class ProjectBrokerManagerImpl extends BasicManager implements ProjectBro @Override public Project getProject(Long resourceableId) { - return dbInstance.findObject(ProjectImpl.class, resourceableId); + return dbInstance.getCurrentEntityManager().find(ProjectImpl.class, resourceableId); } @Override diff --git a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java index 6c8067aed97..378cefc4063 100755 --- a/src/main/java/org/olat/portfolio/manager/EPStructureManager.java +++ b/src/main/java/org/olat/portfolio/manager/EPStructureManager.java @@ -1605,7 +1605,8 @@ public class EPStructureManager { public PortfolioStructure reloadPortfolioStructure(PortfolioStructure structure) { if (structure == null) throw new NullPointerException(); try { - return dbInstance.loadObject(EPStructureElement.class, structure.getKey()); + return dbInstance.getCurrentEntityManager() + .find(EPStructureElement.class, structure.getKey()); } catch (ObjectNotFoundException e) { return null; } diff --git a/src/main/java/org/olat/user/UserManagerImpl.java b/src/main/java/org/olat/user/UserManagerImpl.java index 0b0b00a1e13..9c7c002e7f1 100644 --- a/src/main/java/org/olat/user/UserManagerImpl.java +++ b/src/main/java/org/olat/user/UserManagerImpl.java @@ -40,7 +40,6 @@ import org.olat.basesecurity.IdentityNames; import org.olat.basesecurity.IdentityRef; import org.olat.basesecurity.IdentityShort; import org.olat.core.commons.persistence.DB; -import org.olat.core.commons.persistence.DBFactory; import org.olat.core.gui.translator.Translator; import org.olat.core.helpers.Settings; import org.olat.core.id.Identity; @@ -262,7 +261,7 @@ public class UserManagerImpl extends UserManager { @Override public User loadUserByKey(Long key) { - return DBFactory.getInstance().loadObject(UserImpl.class, key); + return dbInstance.getCurrentEntityManager().find(UserImpl.class, key); // User not loaded yet (lazy initialization). Need to access // a field first to really load user from database. } diff --git a/src/test/java/de/bps/onyx/plugin/OnyxResultManagerTest.java b/src/test/java/de/bps/onyx/plugin/OnyxResultManagerTest.java new file mode 100644 index 00000000000..23e107dd3ea --- /dev/null +++ b/src/test/java/de/bps/onyx/plugin/OnyxResultManagerTest.java @@ -0,0 +1,106 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package de.bps.onyx.plugin; + +import static org.olat.modules.iq.IQTestHelper.createRepository; +import static org.olat.modules.iq.IQTestHelper.createSet; +import static org.olat.modules.iq.IQTestHelper.modDate; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.olat.core.commons.persistence.DB; +import org.olat.core.id.Identity; +import org.olat.core.util.CodeHelper; +import org.olat.course.nodes.IQTESTCourseNode; +import org.olat.course.nodes.QTICourseNode; +import org.olat.ims.qti.QTIResultSet; +import org.olat.repository.RepositoryEntry; +import org.olat.test.JunitTestHelper; +import org.olat.test.OlatTestCase; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Initial date: 11 janv. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class OnyxResultManagerTest extends OlatTestCase { + + @Autowired + private DB dbInstance; + + @Test + public void findResultSets() { + List<QTIResultSet> resultSets = OnyxResultManager.findResultSets(); + Assert.assertNotNull(resultSets); + } + + @Test + public void isLastTestTry() { + RepositoryEntry re = createRepository(); + Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("qti-result-mgr-1"); + long assessmentId = CodeHelper.getForeverUniqueID(); + String resSubPath = "qtiResult35"; + QTIResultSet set = createSet(1.0f, assessmentId, id, re, resSubPath, modDate(3, 8, 5), modDate(3, 8, 20)); + dbInstance.commit(); + Assert.assertNotNull(set); + + //check + Boolean last = OnyxResultManager.isLastTestTry(set); + Assert.assertTrue(last.booleanValue()); + } + + @Test + public void getSuspendedQTIResultSet() { + RepositoryEntry re = createRepository(); + Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("qti-result-mgr-2"); + long assessmentId = CodeHelper.getForeverUniqueID(); + String resSubPath = "qtiResult36"; + QTIResultSet set = createSet(1.0f, assessmentId, id, re, resSubPath, modDate(3, 8, 5), modDate(3, 8, 20)); + dbInstance.commit(); + Assert.assertNotNull(set); + + // fake the course node + QTICourseNode courseNode = new IQTESTCourseNode(); + courseNode.setIdent(resSubPath); + //check + List<Long> suspendedResults = OnyxResultManager.getSuspendedQTIResultSet(id, courseNode); + Assert.assertNotNull(suspendedResults); + } + + @Test + public void getResultSetByAssessmentId() { + RepositoryEntry re = createRepository(); + Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("qti-result-mgr-3"); + long assessmentId = CodeHelper.getForeverUniqueID(); + String resSubPath = "qtiResult37"; + QTIResultSet set = createSet(1.0f, assessmentId, id, re, resSubPath, modDate(3, 8, 5), modDate(3, 8, 20)); + dbInstance.commit(); + Assert.assertNotNull(set); + + //check + List<Long> results = OnyxResultManager.getResultSetByAssessmentId(assessmentId); + Assert.assertNotNull(results); + Assert.assertTrue(results.contains(set.getKey())); + } +} diff --git a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java index fce34a0899c..238ad62da40 100644 --- a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java +++ b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java @@ -1016,4 +1016,27 @@ public class BaseSecurityManagerTest extends OlatTestCase { Assert.assertNotNull(securityManager.findAuthenticationByAuthusername(email, "del-mail")); } + @Test + public void deleteSecurityGroup() { + Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("test-del-2"); + SecurityGroup secGroup = securityManager.createAndPersistSecurityGroup(); + securityManager.addIdentityToSecurityGroup(id, secGroup); + OLATResource resource = JunitTestHelper.createRandomResource(); + Policy policy = securityManager.createAndPersistPolicy(secGroup, "test.right11", resource); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(policy); + + //delete the security group (and membership, and policies) + securityManager.deleteSecurityGroup(secGroup); + dbInstance.commit(); + + //checks + List<Policy> deletedPolicies = securityManager.getPoliciesOfResource(resource, secGroup); + Assert.assertNotNull(deletedPolicies); + Assert.assertTrue(deletedPolicies.isEmpty()); + + boolean membership = securityManager.isIdentityInSecurityGroup(id, secGroup); + Assert.assertFalse(membership); + } + } diff --git a/src/test/java/org/olat/core/commons/persistence/DBTest.java b/src/test/java/org/olat/core/commons/persistence/DBTest.java index 19ab9c1649c..03195235a0d 100644 --- a/src/test/java/org/olat/core/commons/persistence/DBTest.java +++ b/src/test/java/org/olat/core/commons/persistence/DBTest.java @@ -303,13 +303,13 @@ public class DBTest extends OlatTestCase { // forget session cache etc. dbInstance.closeSession(); // 2. try to find object - Object testObject = dbInstance.findObject(Property.class, propertyKey); + Object testObject = dbInstance.getCurrentEntityManager().find(Property.class, propertyKey); assertNotNull(testObject); // 3. Delete object PropertyManager.getInstance().deleteProperty( (Property)testObject ); dbInstance.closeSession(); // 4. try again to find object, now no-one should be found, must return null - testObject = DBFactory.getInstance().findObject(Property.class, propertyKey); + testObject = DBFactory.getInstance().getCurrentEntityManager().find(Property.class, propertyKey); assertNull(testObject); } diff --git a/src/test/java/org/olat/core/util/coordinate/DBPersistentLockManagerTest.java b/src/test/java/org/olat/core/util/coordinate/DBPersistentLockManagerTest.java new file mode 100644 index 00000000000..ed8f4a7b792 --- /dev/null +++ b/src/test/java/org/olat/core/util/coordinate/DBPersistentLockManagerTest.java @@ -0,0 +1,103 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.util.coordinate; + +import java.util.UUID; + +import org.junit.Assert; +import org.junit.Test; +import org.olat.core.commons.persistence.DB; +import org.olat.core.id.Identity; +import org.olat.core.id.OLATResourceable; +import org.olat.core.util.resource.OresHelper; +import org.olat.test.JunitTestHelper; +import org.olat.test.OlatTestCase; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Initial date: 12 janv. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class DBPersistentLockManagerTest extends OlatTestCase { + + @Autowired + private DB dbInstance; + @Autowired + private DBPersistentLockManager lockManager; + + @Test + public void aquirePersistentLock() { + String type = UUID.randomUUID().toString(); + OLATResourceable ores = OresHelper.createOLATResourceableInstance(type, 25l); + Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("lock-1"); + String locksubkey = UUID.randomUUID().toString(); + + // acquire lock + LockResult lock = lockManager.aquirePersistentLock(ores, owner, locksubkey); + dbInstance.commit(); + //check + Assert.assertNotNull(lock); + Assert.assertEquals(owner, lock.getOwner()); + Assert.assertTrue(lock.isSuccess()); + } + + @Test + public void releasePersistentLock() { + String type = UUID.randomUUID().toString(); + OLATResourceable ores = OresHelper.createOLATResourceableInstance(type, 25l); + Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("lock-1"); + String locksubkey = UUID.randomUUID().toString(); + + // acquire lock + LockResult lock = lockManager.aquirePersistentLock(ores, owner, locksubkey); + dbInstance.commit(); + Assert.assertTrue(lock.isSuccess()); + + //release + lockManager.releasePersistentLock(lock); + dbInstance.commit(); + } + + @Test + public void deleteUserData() { + String type = UUID.randomUUID().toString(); + OLATResourceable ores = OresHelper.createOLATResourceableInstance(type, 25l); + Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("lock-1"); + Identity nextIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("lock-2"); + String locksubkey = UUID.randomUUID().toString(); + + // acquire lock + LockResult lock = lockManager.aquirePersistentLock(ores, owner, locksubkey); + dbInstance.commit(); + Assert.assertTrue(lock.isSuccess()); + + //delete the owner + lockManager.deleteUserData(owner, "", null); + dbInstance.commit(); + + //next can acquire the lock + LockResult nextLock = lockManager.aquirePersistentLock(ores, nextIdentity, locksubkey); + dbInstance.commit(); + Assert.assertTrue(nextLock.isSuccess()); + } + +} diff --git a/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java b/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java index 3406431d681..a81ade32838 100644 --- a/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java +++ b/src/test/java/org/olat/course/nodes/projectbroker/ProjectBrokerManagerTest.java @@ -46,9 +46,12 @@ import org.junit.Before; import org.junit.Test; import org.olat.basesecurity.SecurityGroupImpl; import org.olat.core.CoreSpringFactory; +import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.gui.translator.Translator; import org.olat.core.id.Identity; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.core.util.Util; import org.olat.course.nodes.projectbroker.datamodel.Project; import org.olat.course.nodes.projectbroker.datamodel.ProjectBroker; @@ -71,49 +74,40 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class ProjectBrokerManagerTest extends OlatTestCase { + private static final OLog log = Tracing.createLoggerFor(ProjectBrokerManagerTest.class); - private static Identity id1 = null; - private static Identity id2 = null; - private static Long resourceableId = null; + private static Identity id1; + private static Identity id2; + private static Long resourceableId; + @Autowired + private DB dbInstance; @Autowired private ProjectGroupManager projectGroupManager; @Autowired private ProjectBrokerManager projectBrokerManager; - - /** - * @see junit.framework.TestCase#setUp() - */ @Before public void setup() throws Exception { - System.out.println("ProjectBrokerManagerTest.setUp start..."); try { - id1 = JunitTestHelper.createAndPersistIdentityAsUser("project-id1-" + UUID.randomUUID().toString()); - id2 = JunitTestHelper.createAndPersistIdentityAsUser("project-id2-" + UUID.randomUUID().toString()); + id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("project-id1"); + id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("project-id2"); if (resourceableId == null) { - Identity author = JunitTestHelper.createAndPersistIdentityAsUser("project-auth-" + UUID.randomUUID().toString()); + Identity author = JunitTestHelper.createAndPersistIdentityAsUser("project-auth-" + UUID.randomUUID()); RepositoryEntry repositoryEntry = JunitTestHelper.deployDemoCourse(author); resourceableId = repositoryEntry.getOlatResource().getResourceableId(); - System.out.println("Demo course imported - resourceableId: " + resourceableId); + log.info("Demo course imported - resourceableId: " + resourceableId); } DBFactory.getInstance().closeSession(); - - System.out.println("ProjectBrokerManagerTest.setUp finished"); } catch (Exception e) { - System.out.println("ProjectBrokerManagerTest.setUp Exception=" + e.getMessage()); - e.printStackTrace(); + log.error("", e); fail(e.getMessage()); } } - - /** - * - */ - @Test public void testCreateListDeleteProjects() throws Exception { - System.out.println("testCreateListDeleteProjects: start..."); + @Test + public void testCreateListDeleteProjects() throws Exception { // create ProjectBroker A + B ProjectBroker projectBrokerA = projectBrokerManager.createAndSaveProjectBroker(); Long idProjectBrokerA = projectBrokerA.getKey(); @@ -125,8 +119,8 @@ public class ProjectBrokerManagerTest extends OlatTestCase { // add project to ProjectBroker B createProject("thema B1", id1, idProjectBrokerB, resourceableId ); createProject("thema B2", id1, idProjectBrokerB, resourceableId ); + dbInstance.commitAndCloseSession(); - DBFactory.getInstance().closeSession(); // get project list and check content List<Project> projectListA = projectBrokerManager.getProjectListBy(idProjectBrokerA); assertEquals("Wrong projectList.size for project-broker A",2, projectListA.size()); @@ -152,11 +146,11 @@ public class ProjectBrokerManagerTest extends OlatTestCase { // delete project long candiadteGroupKey = projectListA.get(0).getCandidateGroup().getKey(); long projectGroupKey = projectListA.get(0).getProjectGroup().getKey(); - assertNotNull("CandidateGroup does not exist before delete project", DBFactory.getInstance().findObject(SecurityGroupImpl.class, candiadteGroupKey)); - assertNotNull("ProjectGroup does not exist before delete project", DBFactory.getInstance().findObject(BusinessGroupImpl.class, projectGroupKey)); + assertNotNull("CandidateGroup does not exist before delete project", dbInstance.getCurrentEntityManager().find(SecurityGroupImpl.class, candiadteGroupKey)); + assertNotNull("ProjectGroup does not exist before delete project", dbInstance.getCurrentEntityManager().find(BusinessGroupImpl.class, projectGroupKey)); projectBrokerManager.deleteProject(projectListA.get(0), true, null, null); - assertNull("CandidateGroup still exists after delete project", DBFactory.getInstance().findObject(SecurityGroupImpl.class, candiadteGroupKey)); - assertNull("ProjectGroup still exists after delete project", DBFactory.getInstance().findObject(BusinessGroupImpl.class, projectGroupKey)); + assertNull("CandidateGroup still exists after delete project", dbInstance.getCurrentEntityManager().find(SecurityGroupImpl.class, candiadteGroupKey)); + assertNull("ProjectGroup still exists after delete project", dbInstance.getCurrentEntityManager().find(BusinessGroupImpl.class, projectGroupKey)); // get project list and check content projectListA = projectBrokerManager.getProjectListBy(idProjectBrokerA); @@ -175,58 +169,57 @@ public class ProjectBrokerManagerTest extends OlatTestCase { projectBrokerManager.deleteProject(projectListA.get(0), true, null, null); projectListA = projectBrokerManager.getProjectListBy(idProjectBrokerA); projectListB = projectBrokerManager.getProjectListBy(idProjectBrokerB); - System.out.println("testCreateListDeleteProjects: projectListA=" + projectListA); + log.info("testCreateListDeleteProjects: projectListA=" + projectListA); assertEquals("Wrong projectList.size for project-broker A after delete all thema",0, projectListA.size()); assertEquals("Wrong projectList.size for project-broker B after delete all thema",1, projectListB.size()); - // cleanup - System.out.println("testCreateListDeleteProjects: done"); } - @Test public void testPerformanceGetProjectList() throws Exception { - System.out.println("testPerformanceGetProjectList: start..."); + @Test + public void testPerformanceGetProjectList() throws Exception { int FIRST_ITERATION = 10; int SECOND_ITERATION = 90; int THIRD_ITERATION = 400; // create ProjectBroker C ProjectBroker projectBrokerC = projectBrokerManager.createAndSaveProjectBroker(); Long idProjectBrokerC = projectBrokerC.getKey(); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); for (int i = 0; i < FIRST_ITERATION; i++) { createProject("thema C1_" + i, id1, idProjectBrokerC, resourceableId ); } - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); + long startTime = System.currentTimeMillis(); List<Project> projectListC = projectBrokerManager.getProjectListBy(idProjectBrokerC); long endTime = System.currentTimeMillis(); assertEquals("Wrong projectList.size for project-broker C after first iteration",FIRST_ITERATION, projectListC.size()); long duration = endTime - startTime; - System.out.println("getProjectListBy takes " + duration + "ms with " + FIRST_ITERATION + " projects"); + log.info("getProjectListBy takes " + duration + "ms with " + FIRST_ITERATION + " projects"); for (int i = 0; i < SECOND_ITERATION; i++) { createProject("thema C1_" + i, id1, idProjectBrokerC, resourceableId ); } - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); + startTime = System.currentTimeMillis(); projectListC = projectBrokerManager.getProjectListBy(idProjectBrokerC); endTime = System.currentTimeMillis(); int numberOfProjects = FIRST_ITERATION + SECOND_ITERATION; assertEquals("Wrong projectList.size for project-broker C", numberOfProjects, projectListC.size()); duration = endTime - startTime; - System.out.println("getProjectListBy takes " + duration + "ms with " + numberOfProjects + " projects"); + log.info("getProjectListBy takes " + duration + "ms with " + numberOfProjects + " projects"); for (int i = 0; i < THIRD_ITERATION; i++) { createProject("thema C1_" + i, id1, idProjectBrokerC, resourceableId ); } - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); + startTime = System.currentTimeMillis(); projectListC = projectBrokerManager.getProjectListBy(idProjectBrokerC); endTime = System.currentTimeMillis(); numberOfProjects = FIRST_ITERATION + SECOND_ITERATION + THIRD_ITERATION; assertEquals("Wrong projectList.size for project-broker C", numberOfProjects, projectListC.size()); duration = endTime - startTime; - System.out.println("getProjectListBy takes " + duration + "ms with " + numberOfProjects + " projects"); - // cleanup - System.out.println("testPerformance: done"); + log.info("getProjectListBy takes " + duration + "ms with " + numberOfProjects + " projects"); } @Test @@ -256,11 +249,11 @@ public class ProjectBrokerManagerTest extends OlatTestCase { } long endTime = System.currentTimeMillis(); long duration = endTime - startTime; - System.out.println("tableModel.getValueAt(row, col) for " + PAGE_SIZE + "elements (of " + ITERATION + ") takes " + duration + "ms with " + ITERATION + " projects"); - // cleanup + log.info("tableModel.getValueAt(row, col) for " + PAGE_SIZE + "elements (of " + ITERATION + ") takes " + duration + "ms with " + ITERATION + " projects"); } - @Test public void testIsProjectManager() throws Exception { + @Test + public void testIsProjectManager() throws Exception { ProjectBroker projectBrokerD = projectBrokerManager.createAndSaveProjectBroker(); Long idProjectBrokerD = projectBrokerD.getKey(); @@ -277,21 +270,37 @@ public class ProjectBrokerManagerTest extends OlatTestCase { // check no project leader anymore assertFalse("Can not be project leader of project A",projectGroupManager.isProjectManager(id1, testProjectA)); assertFalse("Can not be project leader of project B",projectGroupManager.isProjectManager(id1, testProjectB)); - // cleanup } - @Test public void testExistsProject() throws Exception { + @Test + public void testExistsProject() throws Exception { // 1. test project does not exists assertFalse("Wrong return value true, project does not exist", projectBrokerManager.existsProject(39927492743L)); // 2. test project exists ProjectBroker projectBrokerD = projectBrokerManager.createAndSaveProjectBroker(); Long idProjectBrokerD = projectBrokerD.getKey(); Project testProjectA = createProject("thema existsProject-Test", id1, idProjectBrokerD, resourceableId ); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); assertTrue("Wrong return value false, project exists", projectBrokerManager.existsProject(testProjectA.getKey())); } + + @Test + public void getProjectsWith() { + ProjectBroker projectBroker = projectBrokerManager.createAndSaveProjectBroker(); + BusinessGroup projectGroup = projectGroupManager + .createProjectGroupFor(projectBroker.getKey(), id1, "getProjectsWith", "getProjectsWithGroupDescription", resourceableId); + Project project = projectBrokerManager + .createAndSaveProjectFor("getProjectsWith", "getProjectsWith", projectBroker.getKey(), projectGroup); + dbInstance.commitAndCloseSession(); + + List<Project> projects = projectBrokerManager.getProjectsWith(projectGroup); + Assert.assertNotNull(projects); + Assert.assertEquals(1, projects.size()); + Assert.assertEquals(project, projects.get(0)); + } - @Test public void testUpdateProject() throws Exception { + @Test + public void testUpdateProject() throws Exception { ProjectBroker projectBroker = projectBrokerManager.createAndSaveProjectBroker(); Long idProjectBroker = projectBroker.getKey(); Project testProjectA = createProject("updateTest", id1, idProjectBroker, resourceableId ); @@ -305,9 +314,9 @@ public class ProjectBrokerManagerTest extends OlatTestCase { String updateState = "state update1"; testProjectA.setState(updateState); projectBrokerManager.updateProject(testProjectA); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); // testProjectA is now a detached-object again - Project reloadedProject = (Project) DBFactory.getInstance().loadObject(testProjectA, true); + Project reloadedProject = (Project) dbInstance.loadObject(testProjectA, true); assertEquals("Wrong updated title 1",updateTitle,reloadedProject.getTitle()); // Update 2 String updateTitle2 = "thema updateProject-Test update2"; @@ -323,7 +332,8 @@ public class ProjectBrokerManagerTest extends OlatTestCase { String updateCustomField1 = "CustomField1"; testProjectA.setCustomFieldValue(1, updateCustomField1); projectBrokerManager.updateProject(testProjectA); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); + // Update 3 Calendar cal = Calendar.getInstance(); cal.clear(); @@ -336,7 +346,8 @@ public class ProjectBrokerManagerTest extends OlatTestCase { testProjectA.setProjectEvent(projectEventEnroll); ProjectEvent projectEventHandout = new ProjectEvent(Project.EventType.HANDOUT_EVENT, startDate, endDate); testProjectA.setProjectEvent(projectEventHandout); - DBFactory.getInstance().closeSession(); + dbInstance.closeSession(); + reloadedProject = (Project) DBFactory.getInstance().loadObject(testProjectA, true); assertEquals("Wrong updated title 2",updateTitle2,reloadedProject.getTitle()); assertEquals("Wrong description",updateDescription,reloadedProject.getDescription()); @@ -353,14 +364,11 @@ public class ProjectBrokerManagerTest extends OlatTestCase { assertEquals("Wrong event Type (Enroll)",Project.EventType.ENROLLMENT_EVENT,reloadedProject.getProjectEvent(Project.EventType.ENROLLMENT_EVENT).getEventType()); assertEquals("Wrong event start-date (Enroll)",startDate.getTime(),reloadedProject.getProjectEvent(Project.EventType.ENROLLMENT_EVENT).getStartDate().getTime()); assertEquals("Wrong event end-date (Enroll)",endDate.getTime(),reloadedProject.getProjectEvent(Project.EventType.ENROLLMENT_EVENT).getEndDate().getTime()); - } private Project createProject(String projectName, Identity creator, Long projectBrokerId, Long courseId) { BusinessGroup projectGroup = projectGroupManager.createProjectGroupFor(projectBrokerId, creator, projectName + "_Group", projectName + "GroupDescription", courseId); - Project project = projectBrokerManager.createAndSaveProjectFor(projectName + "title", projectName + "description1", projectBrokerId, projectGroup); - return project; + return projectBrokerManager.createAndSaveProjectFor(projectName + "title", projectName + "description1", projectBrokerId, projectGroup); } - } diff --git a/src/test/java/org/olat/resource/accesscontrol/ACOfferManagerTest.java b/src/test/java/org/olat/resource/accesscontrol/ACOfferManagerTest.java index 9587a02360d..8e681aae63f 100644 --- a/src/test/java/org/olat/resource/accesscontrol/ACOfferManagerTest.java +++ b/src/test/java/org/olat/resource/accesscontrol/ACOfferManagerTest.java @@ -195,7 +195,7 @@ public class ACOfferManagerTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //delete the resource - testOres = dbInstance.loadObject(OLATResourceImpl.class, testOres.getKey()); + testOres = dbInstance.getCurrentEntityManager().find(OLATResourceImpl.class, testOres.getKey()); dbInstance.deleteObject(testOres); dbInstance.commitAndCloseSession(); @@ -276,7 +276,7 @@ public class ACOfferManagerTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //delete resource of offer 2 - testOres2 = dbInstance.loadObject(OLATResourceImpl.class, testOres2.getKey()); + testOres2 = dbInstance.getCurrentEntityManager().find(OLATResourceImpl.class, testOres2.getKey()); dbInstance.deleteObject(testOres2); //filter by resources diff --git a/src/test/java/org/olat/resource/accesscontrol/ACOrderManagerTest.java b/src/test/java/org/olat/resource/accesscontrol/ACOrderManagerTest.java index c18bddb2c5a..87f09f8bcc6 100644 --- a/src/test/java/org/olat/resource/accesscontrol/ACOrderManagerTest.java +++ b/src/test/java/org/olat/resource/accesscontrol/ACOrderManagerTest.java @@ -500,7 +500,7 @@ public class ACOrderManagerTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //delete the resource - randomOres1 = dbInstance.loadObject(OLATResourceImpl.class, randomOres1.getKey()); + randomOres1 = dbInstance.getCurrentEntityManager().find(OLATResourceImpl.class, randomOres1.getKey()); dbInstance.deleteObject(randomOres1); dbInstance.commitAndCloseSession(); diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java index 02610020883..f7f42e3e24b 100644 --- a/src/test/java/org/olat/test/AllTestsJunit4.java +++ b/src/test/java/org/olat/test/AllTestsJunit4.java @@ -60,6 +60,7 @@ import org.junit.runners.Suite; org.olat.core.util.filter.impl.XMLValidEntityFilterTest.class, org.olat.core.helpers.SettingsTest.class, org.olat.core.util.coordinate.LockEntryTest.class, + org.olat.core.util.coordinate.DBPersistentLockManagerTest.class, org.olat.core.util.StringHelperTest.class, org.olat.core.util.FileUtilsTest.class, org.olat.core.util.FileNameSuffixFilterTest.class, @@ -320,6 +321,7 @@ import org.junit.runners.Suite; org.olat.restapi.DocumentPoolModuleWebServiceTest.class, org.olat.restapi.TaxonomyWebServiceTest.class, de.bps.onyx.plugin.OnyxModuleTest.class, + de.bps.onyx.plugin.OnyxResultManagerTest.class, de.bps.olat.portal.institution.InstitutionPortletTest.class, org.olat.group.manager.BusinessGroupImportExportXStreamTest.class, org.olat.group.test.BusinessGroupImportExportTest.class, -- GitLab