From 7b1691f46a68ed4f2fae8fc7729e829cca257ea7 Mon Sep 17 00:00:00 2001 From: Alain Defrance Date: Wed, 13 Jun 2012 14:29:49 +0200 Subject: [PATCH] SOC-2671 | [Social Injector] Exception when injecting spaces --- .../lifecycle/SocialChromatticLifeCycle.java | 2 +- .../core/space/impl/SpaceServiceImpl.java | 7 ++-- .../core/storage/impl/AbstractStorage.java | 29 +++++++++----- .../core/storage/impl/SpaceStorageImpl.java | 12 +++--- .../injection/AbstractSocialInjector.java | 39 ++++++++++++++----- .../extras/injection/SpaceInjector.java | 15 +++---- 6 files changed, 66 insertions(+), 38 deletions(-) diff --git a/component/common/src/main/java/org/exoplatform/social/common/lifecycle/SocialChromatticLifeCycle.java b/component/common/src/main/java/org/exoplatform/social/common/lifecycle/SocialChromatticLifeCycle.java index 926dd0db6b..f4254a6c67 100644 --- a/component/common/src/main/java/org/exoplatform/social/common/lifecycle/SocialChromatticLifeCycle.java +++ b/component/common/src/main/java/org/exoplatform/social/common/lifecycle/SocialChromatticLifeCycle.java @@ -36,7 +36,7 @@ public class SocialChromatticLifeCycle extends ChromatticLifeCycle { public static final String SOCIAL_LIFECYCLE_NAME = "soc"; public ChromatticSession getSession() { - if (session.get() != null) { + if (session.get() != null && session.get().getJCRSession().isLive() && !session.get().isClosed()) { return session.get(); } else { diff --git a/component/core/src/main/java/org/exoplatform/social/core/space/impl/SpaceServiceImpl.java b/component/core/src/main/java/org/exoplatform/social/core/space/impl/SpaceServiceImpl.java index 5348b6f158..e5d70b1199 100644 --- a/component/core/src/main/java/org/exoplatform/social/core/space/impl/SpaceServiceImpl.java +++ b/component/core/src/main/java/org/exoplatform/social/core/space/impl/SpaceServiceImpl.java @@ -409,8 +409,6 @@ public Space createSpace(Space space, String creator, String invitedGroupId) { space.setMembers(members); space.setGroupId(groupId); space.setUrl(space.getPrettyName()); - saveSpace(space, true); - spaceLifeCycle.spaceCreated(space, creator); try { SpaceApplicationHandler spaceApplicationHandler = getSpaceApplicationHandler(space); @@ -422,7 +420,8 @@ public Space createSpace(Space space, String creator, String invitedGroupId) { } catch (Exception e) { LOG.warn("Failed to init apps", e); } - + saveSpace(space, true); + spaceLifeCycle.spaceCreated(space, creator); return space; } @@ -1087,7 +1086,7 @@ public void setApp(Space space, String appId, String appName, boolean isRemovabl apps += "," + applicationStatus; } space.setApp(apps); - saveSpace(space, false); + //saveSpace(space, false); } /** diff --git a/component/core/src/main/java/org/exoplatform/social/core/storage/impl/AbstractStorage.java b/component/core/src/main/java/org/exoplatform/social/core/storage/impl/AbstractStorage.java index 53a080a8e1..55a63efbbe 100644 --- a/component/core/src/main/java/org/exoplatform/social/core/storage/impl/AbstractStorage.java +++ b/component/core/src/main/java/org/exoplatform/social/core/storage/impl/AbstractStorage.java @@ -35,8 +35,6 @@ public abstract class AbstractStorage { // - protected final PortalContainer container; - protected final ChromatticManager manager; protected final SocialChromatticLifeCycle lifeCycle; // @@ -54,9 +52,7 @@ public abstract class AbstractStorage { protected AbstractStorage() { - this.container = PortalContainer.getInstance(); - this.manager = (ChromatticManager) container.getComponentInstanceOfType(ChromatticManager.class); - this.lifeCycle = (SocialChromatticLifeCycle) manager.getLifeCycle(SocialChromatticLifeCycle.SOCIAL_LIFECYCLE_NAME); + this.lifeCycle = lifecycleLookup(); } @@ -142,18 +138,31 @@ protected void _skip(Iterator it, long offset) { } } - protected boolean startSynchronization() { - if (lifeCycle.getManager().getSynchronization() == null) { - lifeCycle.getManager().beginRequest(); + public static boolean startSynchronization() { + + SocialChromatticLifeCycle lc = lifecycleLookup(); + + if (lc.getManager().getSynchronization() == null) { + lc.getManager().beginRequest(); return true; } return false; } - protected void stopSynchronization(boolean requestClose) { + public static void stopSynchronization(boolean requestClose) { + + SocialChromatticLifeCycle lc = lifecycleLookup(); if (requestClose) { - lifeCycle.getManager().endRequest(true); + lc.getManager().endRequest(true); } } + private static SocialChromatticLifeCycle lifecycleLookup() { + + PortalContainer container = PortalContainer.getInstance(); + ChromatticManager manager = (ChromatticManager) container.getComponentInstanceOfType(ChromatticManager.class); + return (SocialChromatticLifeCycle) manager.getLifeCycle(SocialChromatticLifeCycle.SOCIAL_LIFECYCLE_NAME); + + } + } diff --git a/component/core/src/main/java/org/exoplatform/social/core/storage/impl/SpaceStorageImpl.java b/component/core/src/main/java/org/exoplatform/social/core/storage/impl/SpaceStorageImpl.java index 148dd30652..b8916b7978 100644 --- a/component/core/src/main/java/org/exoplatform/social/core/storage/impl/SpaceStorageImpl.java +++ b/component/core/src/main/java/org/exoplatform/social/core/storage/impl/SpaceStorageImpl.java @@ -29,6 +29,7 @@ import org.chromattic.api.query.Query; import org.chromattic.api.query.QueryBuilder; import org.chromattic.api.query.QueryResult; +import org.exoplatform.container.PortalContainer; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.social.core.chromattic.entity.IdentityEntity; @@ -113,13 +114,14 @@ private void fillSpaceFromEntity(SpaceEntity entity, Space space) { if (entity.getAvatarLastUpdated() != null) { try { + PortalContainer container = PortalContainer.getInstance(); ChromatticSession chromatticSession = getSession(); String url = String.format("/%s/jcr/%s/%s/production/soc:providers/soc:space/soc:%s/soc:profile/soc:avatar/?upd=%d", - container.getRestContextName(), - lifeCycle.getRepositoryName(), - chromatticSession.getJCRSession().getWorkspace().getName(), - entity.getPrettyName(), - entity.getAvatarLastUpdated()); + container.getRestContextName(), + lifeCycle.getRepositoryName(), + chromatticSession.getJCRSession().getWorkspace().getName(), + entity.getPrettyName(), + entity.getAvatarLastUpdated()); space.setAvatarUrl(LinkProvider.escapeJCRSpecialCharacters(url)); } catch (Exception e) { LOG.warn("Failed to build avatar url: " + e.getMessage()); diff --git a/extras/injection/src/main/java/org/exoplatform/social/extras/injection/AbstractSocialInjector.java b/extras/injection/src/main/java/org/exoplatform/social/extras/injection/AbstractSocialInjector.java index 963ddaaba1..b3344d1c6e 100644 --- a/extras/injection/src/main/java/org/exoplatform/social/extras/injection/AbstractSocialInjector.java +++ b/extras/injection/src/main/java/org/exoplatform/social/extras/injection/AbstractSocialInjector.java @@ -10,11 +10,13 @@ import org.exoplatform.services.organization.UserHandler; import org.exoplatform.social.common.lifecycle.SocialChromatticLifeCycle; import org.exoplatform.social.core.chromattic.entity.IdentityEntity; +import org.exoplatform.social.core.chromattic.entity.SpaceEntity; import org.exoplatform.social.core.manager.ActivityManager; import org.exoplatform.social.core.manager.IdentityManager; import org.exoplatform.social.core.manager.RelationshipManager; import org.exoplatform.social.core.space.spi.SpaceService; import org.exoplatform.social.core.storage.api.IdentityStorage; +import org.exoplatform.social.core.storage.impl.AbstractStorage; import org.exoplatform.social.core.storage.query.WhereExpression; import org.exoplatform.social.extras.injection.utils.LoremIpsum4J; import org.exoplatform.social.extras.injection.utils.NameGenerator; @@ -83,15 +85,18 @@ public abstract class AbstractSocialInjector extends DataInjector { /** . */ protected LoremIpsum4J lorem; + /** . */ + protected PortalContainer container; + public AbstractSocialInjector() { - PortalContainer c = PortalContainer.getInstance(); - this.identityManager = (IdentityManager) c.getComponentInstanceOfType(IdentityManager.class); - this.identityStorage = (IdentityStorage) c.getComponentInstanceOfType(IdentityStorage.class); - this.relationshipManager = (RelationshipManager) c.getComponentInstanceOfType(RelationshipManager.class); - this.activityManager = (ActivityManager) c.getComponentInstanceOfType(ActivityManager.class); - this.spaceService = (SpaceService) c.getComponentInstanceOfType(SpaceService.class); - this.organizationService = (OrganizationService) c.getComponentInstanceOfType(OrganizationService.class); + this.container = PortalContainer.getInstance(); + this.identityManager = (IdentityManager) container.getComponentInstanceOfType(IdentityManager.class); + this.identityStorage = (IdentityStorage) container.getComponentInstanceOfType(IdentityStorage.class); + this.relationshipManager = (RelationshipManager) container.getComponentInstanceOfType(RelationshipManager.class); + this.activityManager = (ActivityManager) container.getComponentInstanceOfType(ActivityManager.class); + this.spaceService = (SpaceService) container.getComponentInstanceOfType(SpaceService.class); + this.organizationService = (OrganizationService) container.getComponentInstanceOfType(OrganizationService.class); // this.userHandler = organizationService.getUserHandler(); @@ -107,14 +112,18 @@ public void init() { userNumber = 0; spaceNumber = 0; + boolean started = AbstractStorage.startSynchronization(); + try { userNumber = userNumber(USER_BASE); - spaceNumber = userNumber(SPACE_BASE_PRETTY_NAME); + spaceNumber = spaceNumber(SPACE_BASE); } catch (UndeclaredThrowableException e) { // If no user is existing, set keep 0 as value. } + AbstractStorage.stopSynchronization(started); + // LOG.info("Initial user number : " + userNumber); @@ -138,7 +147,6 @@ public void reject(HashMap stringStringHashMap) throws Exception private int userNumber(String base) { - PortalContainer container = PortalContainer.getInstance(); ChromatticManager manager = (ChromatticManager) container.getComponentInstanceOfType(ChromatticManager.class); SocialChromatticLifeCycle lifeCycle = (SocialChromatticLifeCycle) manager.getLifeCycle(SocialChromatticLifeCycle.SOCIAL_LIFECYCLE_NAME); @@ -150,6 +158,19 @@ private int userNumber(String base) { } + private int spaceNumber(String base) { + + PortalContainer container = PortalContainer.getInstance(); + ChromatticManager manager = (ChromatticManager) container.getComponentInstanceOfType(ChromatticManager.class); + SocialChromatticLifeCycle lifeCycle = (SocialChromatticLifeCycle) manager.getLifeCycle(SocialChromatticLifeCycle.SOCIAL_LIFECYCLE_NAME); + + QueryBuilder builder = lifeCycle.getSession().createQueryBuilder(SpaceEntity.class); + WhereExpression where = new WhereExpression(); + where.like(SpaceEntity.displayName, base + "%"); + return builder.where(where.toString()).get().objects().size(); + + } + protected String userName() { return USER_BASE + userNumber; } diff --git a/extras/injection/src/main/java/org/exoplatform/social/extras/injection/SpaceInjector.java b/extras/injection/src/main/java/org/exoplatform/social/extras/injection/SpaceInjector.java index 7bd652d51e..2e74d067f2 100644 --- a/extras/injection/src/main/java/org/exoplatform/social/extras/injection/SpaceInjector.java +++ b/extras/injection/src/main/java/org/exoplatform/social/extras/injection/SpaceInjector.java @@ -1,15 +1,8 @@ package org.exoplatform.social.extras.injection; -import org.exoplatform.services.organization.OrganizationService; -import org.exoplatform.social.core.identity.provider.OrganizationIdentityProvider; -import org.exoplatform.social.core.manager.ActivityManager; -import org.exoplatform.social.core.manager.IdentityManager; -import org.exoplatform.social.core.manager.RelationshipManager; -import org.exoplatform.social.core.space.SpaceException; +import org.exoplatform.social.core.space.SpaceUtils; import org.exoplatform.social.core.space.impl.DefaultSpaceApplicationHandler; import org.exoplatform.social.core.space.model.Space; -import org.exoplatform.social.core.space.spi.SpaceService; -import org.exoplatform.social.core.storage.api.SpaceStorage; import java.util.HashMap; @@ -52,13 +45,17 @@ public void inject(HashMap params) throws Exception { space.setRegistration(Space.OPEN); space.setDescription(lorem.getWords(10)); space.setType(DefaultSpaceApplicationHandler.NAME); - space.setVisibility(Space.PUBLIC); + space.setVisibility(Space.PRIVATE); + space.setRegistration(Space.OPEN); space.setPriority(Space.INTERMEDIATE_PRIORITY); // spaceService.createSpace(space, owner); ++spaceNumber; + // + SpaceUtils.endRequest(); + // getLog().info("Space " + spaceName + " created by " + owner);