diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
index a035832..29abf99 100644
--- a/.settings/org.eclipse.core.resources.prefs
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -1,4 +1,3 @@
-#Mon Dec 03 17:40:30 CET 2012
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/main/resources=UTF-8
diff --git a/distro/changelog.xml b/distro/changelog.xml
index ef814d4..62e8a6d 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -19,4 +19,7 @@
Deprecated localAvailableStorage() methods and added replacements localAvailableSpace()
+
+ Added lock on resource unmashalling
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 31331ea..ef11732 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.resources
common-gcore-resources
- 1.3.0-SNAPSHOT
+ 1.3.1-SNAPSHOT
scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/Common/${project.artifactId}
diff --git a/src/main/java/org/gcube/common/resources/gcore/Resource.java b/src/main/java/org/gcube/common/resources/gcore/Resource.java
index 5ecb1cd..8f0e807 100644
--- a/src/main/java/org/gcube/common/resources/gcore/Resource.java
+++ b/src/main/java/org/gcube/common/resources/gcore/Resource.java
@@ -5,6 +5,8 @@ import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAttribute;
@@ -22,6 +24,9 @@ public abstract class Resource {
//default resource type version
private static String CURRENT_VERSION = "0.4.x";
+
+ protected transient Lock lock = new ReentrantLock();
+
/**
* The type of the resource
*/
diff --git a/src/main/java/org/gcube/common/resources/gcore/Resources.java b/src/main/java/org/gcube/common/resources/gcore/Resources.java
index 695263b..c5dc13b 100644
--- a/src/main/java/org/gcube/common/resources/gcore/Resources.java
+++ b/src/main/java/org/gcube/common/resources/gcore/Resources.java
@@ -147,6 +147,8 @@ public class Resources {
*/
public static T marshal(Object resource,T result) {
+ if (resource instanceof Resource)
+ ((Resource) resource).lock.lock();
try {
JAXBContext context = context(resource.getClass());
Marshaller m = context.createMarshaller();
@@ -158,6 +160,9 @@ public class Resources {
}
catch(Exception e) {
throw new RuntimeException("serialisation error",e);
+ } finally{
+ if (resource instanceof Resource)
+ ((Resource) resource).lock.unlock();
}
}