private void setPropertyValue(ProjectId projectId, String propertyName, String propertyValue) { try { WRITE_LOCK.lock(); ProjectInstance pi = getProjectInstance(projectId); MetaProject mp = getMetaProject(); PropertyValue pv = mp.createPropertyValue(propertyName, propertyValue); Set<PropertyValue> propertyValues = new HashSet<PropertyValue>(pi.getPropertyValues()); for (Iterator<PropertyValue> it = propertyValues.iterator(); it.hasNext(); ) { PropertyValue curPv = it.next(); if (curPv.getPropertyName().equals(propertyName)) { it.remove(); } } propertyValues.add(pv); pi.setPropertyValues(propertyValues); // Should be threaded off save(); } finally { WRITE_LOCK.unlock(); } }