diff --git a/library/src/morpheus-master/js/src/sakai.morpheus.bullhorns.js b/library/src/morpheus-master/js/src/sakai.morpheus.bullhorns.js index 4f5d53c4bde5..59161b3b8bd6 100755 --- a/library/src/morpheus-master/js/src/sakai.morpheus.bullhorns.js +++ b/library/src/morpheus-master/js/src/sakai.morpheus.bullhorns.js @@ -188,7 +188,7 @@ var message = ''; - if (alert.event === 'annc.new') { + if (alert.event === 'annc.new' || alert.event === 'annc.revise.availability') { message = data.i18n.announcement.replace('{0}', title).replace('{1}', siteTitle); } else if (alert.event === 'asn.new.assignment') { diff --git a/portal/portal-api/api/pom.xml b/portal/portal-api/api/pom.xml index 3b342c882277..cab2057f2d63 100644 --- a/portal/portal-api/api/pom.xml +++ b/portal/portal-api/api/pom.xml @@ -67,6 +67,10 @@ org.springframework spring-context + + org.springframework + spring-tx + diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/api/BullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/api/BullhornHandler.java index 46ffee36f6f1..6793f5980f2d 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/api/BullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/api/BullhornHandler.java @@ -36,6 +36,6 @@ */ public interface BullhornHandler { - public String getHandledEvent(); + public List getHandledEvents(); public Optional> handleEvent(Event e, Cache countCache); } diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AddAssignmentBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AddAssignmentBullhornHandler.java index 269c508c1ec6..b534c1cd7a42 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AddAssignmentBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AddAssignmentBullhornHandler.java @@ -16,6 +16,7 @@ package org.sakaiproject.portal.beans.bullhornhandlers; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; @@ -56,8 +57,8 @@ public class AddAssignmentBullhornHandler extends AbstractBullhornHandler { private SiteService siteService; @Override - public String getHandledEvent() { - return AssignmentConstants.EVENT_ADD_ASSIGNMENT; + public List getHandledEvents() { + return Arrays.asList(AssignmentConstants.EVENT_ADD_ASSIGNMENT); } @Override diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AnnouncementsBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AnnouncementsBullhornHandler.java index 0bebb70349db..706f199cf5d7 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AnnouncementsBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/AnnouncementsBullhornHandler.java @@ -16,10 +16,12 @@ package org.sakaiproject.portal.beans.bullhornhandlers; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; +import javax.annotation.Resource; import javax.inject.Inject; import org.sakaiproject.announcement.api.AnnouncementMessage; @@ -31,10 +33,18 @@ import org.sakaiproject.event.api.Event; import org.sakaiproject.memory.api.Cache; import org.sakaiproject.portal.api.BullhornData; +import org.sakaiproject.portal.beans.BullhornAlert; import org.sakaiproject.site.api.Site; import org.sakaiproject.site.api.SiteService; import org.springframework.stereotype.Component; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallbackWithoutResult; +import org.springframework.transaction.support.TransactionTemplate; + +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Restrictions; import lombok.extern.slf4j.Slf4j; @@ -51,12 +61,18 @@ public class AnnouncementsBullhornHandler extends AbstractBullhornHandler { @Inject private ServerConfigurationService serverConfigurationService; + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory") + private SessionFactory sessionFactory; + @Inject private SiteService siteService; + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager") + private PlatformTransactionManager transactionManager; + @Override - public String getHandledEvent() { - return AnnouncementService.SECURE_ANNC_ADD; + public List getHandledEvents() { + return Arrays.asList(AnnouncementService.SECURE_ANNC_ADD, AnnouncementService.EVENT_ANNC_UPDATE_AVAILABILITY); } @Override @@ -69,13 +85,41 @@ public Optional> handleEvent(Event e, Cache coun String siteId = pathParts[3]; - SecurityAdvisor sa = unlock(new String[] {AnnouncementService.SECURE_ANNC_READ}); + SecurityAdvisor sa = unlock(new String[] {AnnouncementService.SECURE_ANNC_READ, AnnouncementService.SECURE_ANNC_READ_DRAFT}); try { AnnouncementMessage message = (AnnouncementMessage) announcementService.getMessage( entityManager.newReference(ref)); - if (announcementService.isMessageViewable(message)) { + // If the announcement has just been hidden, remove any existing alerts for it + if (e.getEvent().equals(AnnouncementService.EVENT_ANNC_UPDATE_AVAILABILITY) && message.getHeader().getDraft()) { + try { + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + + transactionTemplate.execute(new TransactionCallbackWithoutResult() { + + protected void doInTransactionWithoutResult(TransactionStatus status) { + + // Grab the alerts we'll be deleting. We'll need to clear the count caches + // for the recipients + final List alerts + = sessionFactory.getCurrentSession().createCriteria(BullhornAlert.class) + .add(Restrictions.eq("event", AnnouncementService.SECURE_ANNC_ADD)) + .add(Restrictions.eq("ref", ref)).list(); + + alerts.forEach(a -> countCache.remove(a.getToUser())); + + sessionFactory.getCurrentSession().createQuery("delete BullhornAlert where event = :event and ref = :ref") + .setString("event", AnnouncementService.SECURE_ANNC_ADD) + .setString("ref", ref).executeUpdate(); + } + }); + } catch (Exception e1) { + log.error("Failed to delete bullhorn add announcement event", e1); + } + } + + if (!message.getHeader().getDraft() && announcementService.isMessageViewable(message)) { Site site = siteService.getSite(siteId); String toolId = site.getToolForCommonId("sakai.announcements").getId(); String url = serverConfigurationService.getPortalUrl() + "/directtool/" + toolId diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/CommonsCommentBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/CommonsCommentBullhornHandler.java index a74f7b6890f6..20a52840e6fd 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/CommonsCommentBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/CommonsCommentBullhornHandler.java @@ -16,6 +16,7 @@ package org.sakaiproject.portal.beans.bullhornhandlers; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; @@ -52,8 +53,8 @@ public class CommonsCommentBullhornHandler extends AbstractBullhornHandler { private SiteService siteService; @Override - public String getHandledEvent() { - return CommonsEvents.COMMENT_CREATED; + public List getHandledEvents() { + return Arrays.asList(CommonsEvents.COMMENT_CREATED); } @Override diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendConfirmBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendConfirmBullhornHandler.java index aafa0cfceec6..9b68a5d3f0be 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendConfirmBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendConfirmBullhornHandler.java @@ -15,13 +15,14 @@ */ package org.sakaiproject.portal.beans.bullhornhandlers; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; +import javax.annotation.Resource; import javax.inject.Inject; -import javax.inject.Named; import org.sakaiproject.event.api.Event; import org.sakaiproject.memory.api.Cache; @@ -29,11 +30,13 @@ import org.sakaiproject.profile2.logic.ProfileLinkLogic; import org.sakaiproject.profile2.util.ProfileConstants; -import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.Transaction; import org.springframework.stereotype.Component; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallbackWithoutResult; +import org.springframework.transaction.support.TransactionTemplate; import lombok.extern.slf4j.Slf4j; @@ -44,12 +47,15 @@ public class FriendConfirmBullhornHandler extends AbstractBullhornHandler { @Inject private ProfileLinkLogic profileLinkLogic; - @Inject @Named("org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory") + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory") private SessionFactory sessionFactory; + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager") + private PlatformTransactionManager transactionManager; + @Override - public String getHandledEvent() { - return ProfileConstants.EVENT_FRIEND_CONFIRM; + public List getHandledEvents() { + return Arrays.asList(ProfileConstants.EVENT_FRIEND_CONFIRM); } public boolean isAcademic() { @@ -65,18 +71,20 @@ public Optional> handleEvent(Event e, Cache coun String[] pathParts = ref.split("/"); String to = pathParts[2]; - Session session = sessionFactory.openSession(); - Transaction tx = session.beginTransaction(); try { - session.createQuery("delete BullhornAlert where event = :event and fromUser = :fromUser") - .setString("event", ProfileConstants.EVENT_FRIEND_REQUEST) - .setString("fromUser", to).executeUpdate(); - tx.commit(); + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + + transactionTemplate.execute(new TransactionCallbackWithoutResult() { + + protected void doInTransactionWithoutResult(TransactionStatus status) { + + sessionFactory.getCurrentSession().createQuery("delete BullhornAlert where event = :event and fromUser = :fromUser") + .setString("event", ProfileConstants.EVENT_FRIEND_REQUEST) + .setString("fromUser", to).executeUpdate(); + } + }); } catch (Exception e1) { log.error("Failed to delete bullhorn request event", e1); - tx.rollback(); - } finally { - session.close(); } String url = profileLinkLogic.getInternalDirectUrlToUserConnections(to); countCache.remove(to); diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendIgnoreBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendIgnoreBullhornHandler.java index 60a7fbb3598f..faae5a45ce80 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendIgnoreBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendIgnoreBullhornHandler.java @@ -15,23 +15,25 @@ */ package org.sakaiproject.portal.beans.bullhornhandlers; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; -import javax.inject.Inject; -import javax.inject.Named; +import javax.annotation.Resource; import org.sakaiproject.event.api.Event; import org.sakaiproject.memory.api.Cache; import org.sakaiproject.portal.api.BullhornData; import org.sakaiproject.profile2.util.ProfileConstants; -import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.Transaction; import org.springframework.stereotype.Component; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallbackWithoutResult; +import org.springframework.transaction.support.TransactionTemplate; import lombok.extern.slf4j.Slf4j; @@ -39,12 +41,15 @@ @Component public class FriendIgnoreBullhornHandler extends AbstractBullhornHandler { - @Inject @Named("org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory") + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory") private SessionFactory sessionFactory; + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager") + private PlatformTransactionManager transactionManager; + @Override - public String getHandledEvent() { - return ProfileConstants.EVENT_FRIEND_IGNORE; + public List getHandledEvents() { + return Arrays.asList(ProfileConstants.EVENT_FRIEND_IGNORE); } @Override @@ -56,18 +61,20 @@ public Optional> handleEvent(Event e, Cache coun String[] pathParts = ref.split("/"); String to = pathParts[2]; - Session session = sessionFactory.openSession(); - Transaction tx = session.beginTransaction(); try { - session.createQuery("delete BullhornAlert where event = :event and fromUser = :fromUser") - .setString("event", ProfileConstants.EVENT_FRIEND_REQUEST) - .setString("fromUser", to).executeUpdate(); - tx.commit(); + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + + transactionTemplate.execute(new TransactionCallbackWithoutResult() { + + protected void doInTransactionWithoutResult(TransactionStatus status) { + + sessionFactory.getCurrentSession().createQuery("delete BullhornAlert where event = :event and fromUser = :fromUser") + .setString("event", ProfileConstants.EVENT_FRIEND_REQUEST) + .setString("fromUser", to).executeUpdate(); + } + }); } catch (Exception e1) { log.error("Failed to delete bullhorn request event", e1); - tx.rollback(); - } finally { - session.close(); } countCache.remove(from); return Optional.empty(); diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendMessageBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendMessageBullhornHandler.java index fc6c955571b3..7a5638e50018 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendMessageBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendMessageBullhornHandler.java @@ -15,6 +15,7 @@ */ package org.sakaiproject.portal.beans.bullhornhandlers; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -46,8 +47,8 @@ public class FriendMessageBullhornHandler extends AbstractBullhornHandler { private SiteService siteService; @Override - public String getHandledEvent() { - return ProfileConstants.EVENT_MESSAGE_SENT; + public List getHandledEvents() { + return Arrays.asList(ProfileConstants.EVENT_MESSAGE_SENT); } @Override diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendRequestBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendRequestBullhornHandler.java index a49e735e0e9d..2dab826b2051 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendRequestBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendRequestBullhornHandler.java @@ -15,6 +15,7 @@ */ package org.sakaiproject.portal.beans.bullhornhandlers; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -46,8 +47,8 @@ public class FriendRequestBullhornHandler extends AbstractBullhornHandler { private SiteService siteService; @Override - public String getHandledEvent() { - return ProfileConstants.EVENT_FRIEND_REQUEST; + public List getHandledEvents() { + return Arrays.asList(ProfileConstants.EVENT_FRIEND_REQUEST); } public boolean isAcademic() { diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendStatusBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendStatusBullhornHandler.java index 4f9d0ef72e8d..e2c7c9744569 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendStatusBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/FriendStatusBullhornHandler.java @@ -16,6 +16,7 @@ package org.sakaiproject.portal.beans.bullhornhandlers; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; @@ -45,8 +46,8 @@ public class FriendStatusBullhornHandler extends AbstractBullhornHandler { private ProfileLinkLogic profileLinkLogic; @Override - public String getHandledEvent() { - return ProfileConstants.EVENT_STATUS_UPDATE; + public List getHandledEvents() { + return Arrays.asList(ProfileConstants.EVENT_STATUS_UPDATE); } @Override diff --git a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/GradeAssignmentBullhornHandler.java b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/GradeAssignmentBullhornHandler.java index 5c67ecf6556c..0f5feb237992 100644 --- a/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/GradeAssignmentBullhornHandler.java +++ b/portal/portal-api/api/src/java/org/sakaiproject/portal/beans/bullhornhandlers/GradeAssignmentBullhornHandler.java @@ -16,6 +16,7 @@ package org.sakaiproject.portal.beans.bullhornhandlers; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; @@ -44,8 +45,8 @@ public class GradeAssignmentBullhornHandler extends AbstractBullhornHandler { private AssignmentService assignmentService; @Override - public String getHandledEvent() { - return AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION; + public List getHandledEvents() { + return Arrays.asList(AssignmentConstants.EVENT_GRADE_ASSIGNMENT_SUBMISSION); } @Override diff --git a/portal/portal-service-impl/impl/pom.xml b/portal/portal-service-impl/impl/pom.xml index e3808fa77649..5cb0a5f07914 100644 --- a/portal/portal-service-impl/impl/pom.xml +++ b/portal/portal-service-impl/impl/pom.xml @@ -84,6 +84,10 @@ org.springframework spring-tx + + + org.springframework + spring-context diff --git a/portal/portal-service-impl/impl/src/java/org/sakaiproject/portal/service/BullhornServiceImpl.java b/portal/portal-service-impl/impl/src/java/org/sakaiproject/portal/service/BullhornServiceImpl.java index 33914ce09326..c2a6d5e45e9c 100644 --- a/portal/portal-service-impl/impl/src/java/org/sakaiproject/portal/service/BullhornServiceImpl.java +++ b/portal/portal-service-impl/impl/src/java/org/sakaiproject/portal/service/BullhornServiceImpl.java @@ -27,8 +27,8 @@ import java.util.Optional; import java.util.stream.Collectors; +import javax.annotation.Resource; import javax.inject.Inject; -import javax.inject.Named; import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; @@ -55,12 +55,12 @@ import org.sakaiproject.user.api.UserNotDefinedException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; - import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -73,27 +73,27 @@ public class BullhornServiceImpl implements BullhornService, Observer { private EventTrackingService eventTrackingService; @Inject private MemoryService memoryService; + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalTransactionManager") + private PlatformTransactionManager transactionManager; @Inject private UserDirectoryService userDirectoryService; @Inject private SecurityService securityService; @Inject private ServerConfigurationService serverConfigurationService; - @Inject @Named("org.sakaiproject.lessonbuildertool.model.SimplePageToolDao") + @Resource(name = "org.sakaiproject.lessonbuildertool.model.SimplePageToolDao") private SimplePageToolDao simplePageToolDao; @Inject private SiteService siteService; - @Inject @Named("org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory") + @Resource(name = "org.sakaiproject.springframework.orm.hibernate.GlobalSessionFactory") private SessionFactory sessionFactory; - @Setter - private TransactionTemplate transactionTemplate; private Cache countCache = null; @Autowired private List handlers; - private Map handlerMap; + private Map handlerMap = new HashMap<>(); public void init() { @@ -101,8 +101,12 @@ public void init() { HANDLED_EVENTS.add(LessonBuilderEvents.COMMENT_CREATE); HANDLED_EVENTS.add(SiteService.EVENT_SITE_PUBLISH); - HANDLED_EVENTS.addAll(handlers.stream().map(h -> h.getHandledEvent()).collect(Collectors.toList())); - handlerMap = handlers.stream().collect(Collectors.toMap(BullhornHandler::getHandledEvent, Function.identity())); + handlers.forEach(h -> { + h.getHandledEvents().forEach(he -> { + HANDLED_EVENTS.add(he); + handlerMap.put(he, h); + }); + }); eventTrackingService.addLocalObserver(this); } @@ -129,7 +133,6 @@ public void update(Observable o, final Object arg) { if (handler != null ) { Optional> result = handler.handleEvent(e, countCache); if (result.isPresent()) { - result.get().forEach(bd -> System.out.println(bd.getTo() + " : " + bd.getTitle())); result.get().forEach(bd -> { if (bd.isSocial()) { @@ -186,6 +189,8 @@ public void update(Observable o, final Object arg) { } else if (SiteService.EVENT_SITE_PUBLISH.equals(event)) { final String siteId = pathParts[2]; + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(TransactionStatus status) { @@ -213,6 +218,8 @@ protected void doInTransactionWithoutResult(TransactionStatus status) { private void doAcademicInsert(String from, String to, String event, String ref , String title, String siteId, Date eventDate, String url) { + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(TransactionStatus status) { @@ -240,6 +247,8 @@ protected void doInTransactionWithoutResult(TransactionStatus status) { private void doSocialInsert(String from, String to, String event, String ref, Date eventDate, String url) { + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(TransactionStatus status) { diff --git a/portal/portal-service-impl/impl/src/webapp/WEB-INF/components.xml b/portal/portal-service-impl/impl/src/webapp/WEB-INF/components.xml index 181852b7300d..727de8ecd157 100644 --- a/portal/portal-service-impl/impl/src/webapp/WEB-INF/components.xml +++ b/portal/portal-service-impl/impl/src/webapp/WEB-INF/components.xml @@ -63,11 +63,6 @@ - - - - -