diff --git a/src/main/java/org/olat/properties/PropertyManager.java b/src/main/java/org/olat/properties/PropertyManager.java index af372b0f8f403c930d02d3d29b714925c096642a..995012bcbbcd07b2c5c2b2e1f56c4bff71d16059 100644 --- a/src/main/java/org/olat/properties/PropertyManager.java +++ b/src/main/java/org/olat/properties/PropertyManager.java @@ -32,13 +32,13 @@ import java.util.List; import javax.persistence.Query; import javax.persistence.TypedQuery; +import org.apache.logging.log4j.Logger; import org.olat.basesecurity.IdentityRef; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.persistence.QueryBuilder; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.logging.AssertException; -import org.apache.logging.log4j.Logger; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; @@ -607,6 +607,17 @@ public class PropertyManager implements UserDataDeletable { public void appendTextProperty(Identity identity, BusinessGroup grp, OLATResourceable resourceable, String category, String name, String textValue) { + if(DBFactory.getInstance().isMySQL()) { + synchronized(this) {// without produce dead lock in MySQL + executeAppendTextProperty(identity, grp, resourceable, category, name, textValue); + } + } else { + executeAppendTextProperty(identity, grp, resourceable, category, name, textValue); + } + } + + private void executeAppendTextProperty(Identity identity, BusinessGroup grp, + OLATResourceable resourceable, String category, String name, String textValue) { QueryBuilder sb = new QueryBuilder(); sb.append("update ").append(Property.class.getName()).append(" v ") .append(" set v.textValue=concat(v.textValue,:text), lastModified=:now"); @@ -637,12 +648,14 @@ public class PropertyManager implements UserDataDeletable { query.setParameter("groupKey", grp.getKey()); } - int row = query.executeUpdate(); + int row = query + .executeUpdate(); + DBFactory.getInstance().commit(); if(row == 0) { Property prop = createPropertyInstance(identity, grp, resourceable, category, name, null, null, null, textValue); saveProperty(prop); + DBFactory.getInstance().commit(); } - DBFactory.getInstance().commit(); } /**