From e308f23b72fc2b232bfee37e66138fe9a9d9712c Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 22 Jan 2014 15:00:02 +0100 Subject: [PATCH] OO-948: load directly the resource in logging (seem caching to be better) --- .../olat/repository/RepositoryManager.java | 27 +++++++++++++++---- .../logging/activity/LoggingResourceable.java | 16 +++++------ .../repository/RepositoryManagerTest.java | 9 +++++++ 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index b9a1a43141f..eca8ba317e4 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -477,11 +477,11 @@ public class RepositoryManager extends BasicManager { } StringBuilder query = new StringBuilder(); query.append("select v from ").append(RepositoryEntry.class.getName()).append(" as v ") - .append(" inner join fetch v.olatResource as ores") - .append(" left join fetch v.lifecycle as lifecycle") - .append(" left join fetch v.ownerGroup as ownerGroup") - .append(" left join fetch v.participantGroup as participantGroup") - .append(" left join fetch v.tutorGroup as tutorGroup") + .append(" inner join fetch v.olatResource as ores") + .append(" left join fetch v.lifecycle as lifecycle") + .append(" left join fetch v.ownerGroup as ownerGroup") + .append(" left join fetch v.participantGroup as participantGroup") + .append(" left join fetch v.tutorGroup as tutorGroup") .append(" where v.key = :repoKey"); List<RepositoryEntry> entries = dbInstance.getCurrentEntityManager() @@ -494,6 +494,23 @@ public class RepositoryManager extends BasicManager { } return entries.get(0); } + + public OLATResource lookupRepositoryEntryResource(Long key) { + if (key == null) return null; + StringBuilder query = new StringBuilder(); + query.append("select v.olatResource from ").append(RepositoryEntry.class.getName()).append(" as v ") + .append(" where v.key = :repoKey"); + + List<OLATResource> entries = dbInstance.getCurrentEntityManager() + .createQuery(query.toString(), OLATResource.class) + .setParameter("repoKey", key) + .setHint("org.hibernate.cacheable", Boolean.TRUE) + .getResultList(); + if(entries.isEmpty()) { + return null; + } + return entries.get(0); + } public List<RepositoryEntry> lookupRepositoryEntries(Collection<Long> keys) { if (keys == null || keys.isEmpty()) { diff --git a/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java b/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java index ccc0f0abe5b..5bc7add13ce 100644 --- a/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java +++ b/src/main/java/org/olat/util/logging/activity/LoggingResourceable.java @@ -197,6 +197,9 @@ public class LoggingResourceable implements ILoggingResourceable { id_ = restrictStringLength(id, MAX_ID_LEN, "id", true); name_ = restrictStringLength(name, MAX_NAME_LEN, "name", true); resourceable_ = resourceable; + if(resourceableType != null && resourceableType.equals("RepositoryEntry")) { + System.out.println(); + } resourceableType_ = resourceableType; this.ignorable = ignorable; } @@ -639,14 +642,11 @@ public class LoggingResourceable implements ILoggingResourceable { // in which case all we have is the key of the repositoryentry and we must make a DB lookup to // map the repo key to the corresponding olatresource - RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(ceResourceable.getResourceableId()); - if (re!=null) { - OLATResource ores = re.getOlatResource(); - if (ores!=null && - ores.getResourceableTypeName().equals(resourceable_.getResourceableTypeName()) && - ores.getResourceableId().equals(resourceable_.getResourceableId())) { - return true; - } + OLATResource ores = RepositoryManager.getInstance().lookupRepositoryEntryResource(ceResourceable.getResourceableId()); + if (ores!=null && + ores.getResourceableTypeName().equals(resourceable_.getResourceableTypeName()) && + ores.getResourceableId().equals(resourceable_.getResourceableId())) { + return true; } } diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java index 0f3cc78c852..369e33d2b22 100644 --- a/src/test/java/org/olat/repository/RepositoryManagerTest.java +++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java @@ -196,6 +196,15 @@ public class RepositoryManagerTest extends OlatTestCase { Assert.assertNotNull(displayName); Assert.assertEquals(re.getDisplayname(), displayName); } + @Test + public void lookupResource() { + RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry(); + dbInstance.commitAndCloseSession(); + + OLATResource resource = repositoryManager.lookupRepositoryEntryResource(re.getKey()); + Assert.assertNotNull(resource); + Assert.assertEquals(re.getOlatResource(), resource); + } @Test public void queryByOwnerLimitAccess() { -- GitLab