diff --git a/etc/profile.xml b/etc/profile.xml
index d5ccb84..1ea081a 100644
--- a/etc/profile.xml
+++ b/etc/profile.xml
@@ -93,7 +93,7 @@
application
- org.gcube.informationsystem.collector.testsuite.jar
+ lib/org.gcube.informationsystem.collector.testsuite.jar
diff --git a/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/QueryManager.java b/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/QueryManager.java
index e5fcd90..ac08de6 100644
--- a/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/QueryManager.java
+++ b/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/QueryManager.java
@@ -35,44 +35,48 @@ public class QueryManager extends XMLStorageManager {
int attempts = 0;
ResourceSet result = null;
Collection currentCollection = null;
- currentCollection = this.loadAllCollections();
- this.lock();
- while ((retry) && (attempts < MAXQUERYATTEMPTS)) {
- try {
- // execute query and get results in ResourceSet
- if (currentCollection == null)
- result = query.execute(this.rootCollection);
- else
- result = query.execute(currentCollection);
- retry = false;
- } catch (XMLDBException edb) {
- logger.error("Failed to execute XQuery " + query.toString());
- logger.error("Error details: " + edb.errorCode + " " + edb.getMessage(), edb);
- // if the cause is a NullPointer, this can be due to a temporary
- // lock on the database instance
- if (edb.getCause() instanceof java.lang.NullPointerException) {
- retry = true;
- attempts++;
- logger.warn("Trying a new attempt for query execution");
- } else
- retry = false;
-
- } catch (Exception e) {
- logger.error("", e);
- // if the cause is a NullPointer, this can be due to a temporary
- // lock on the database instance
- if (e instanceof java.lang.NullPointerException) {
- retry = true;
- attempts++;
- logger.warn("Trying a new attempt for query execution");
- } else
- retry = false;
-
- }
- }
+
+ State.getDataManager().lock();
+ try {
+ currentCollection = this.loadAllCollections();
+ while ((retry) && (attempts < MAXQUERYATTEMPTS)) {
+ try {
+ // execute query and get results in ResourceSet
+ if (currentCollection == null)
+ result = query.execute(this.rootCollection);
+ else
+ result = query.execute(currentCollection);
+ retry = false;
+ } catch (XMLDBException edb) {
+ logger.error("Failed to execute XQuery " + query.toString());
+ logger.error("Error details: " + edb.errorCode + " " + edb.getMessage(), edb);
+ // if the cause is a NullPointer, this can be due to a temporary
+ // lock on the database instance
+ if (edb.getCause() instanceof java.lang.NullPointerException) {
+ retry = true;
+ attempts++;
+ logger.warn("Trying a new attempt for query execution");
+ } else
+ retry = false;
+
+ } catch (Exception e) {
+ logger.error("", e);
+ // if the cause is a NullPointer, this can be due to a temporary
+ // lock on the database instance
+ if (e instanceof java.lang.NullPointerException) {
+ retry = true;
+ attempts++;
+ logger.warn("Trying a new attempt for query execution");
+ } else
+ retry = false;
+
+ }
+ }
+ this.resetCollection(currentCollection);
+ } catch (Exception e) {
+ logger.error("Failed to execute the XQuery", e);
+ } finally {State.getDataManager().unlock(); }
//operationsCounter++;
- this.resetCollection(currentCollection);
- this.unlock();
//this.checkConnection();
return result;
}
diff --git a/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/XMLStorageManager.java b/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/XMLStorageManager.java
index acccd60..f5d1b0e 100755
--- a/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/XMLStorageManager.java
+++ b/src/org/gcube/informationsystem/collector/impl/xmlstorage/exist/XMLStorageManager.java
@@ -314,8 +314,12 @@ public class XMLStorageManager {
*/
public void storeResource(PersistentResource resource) throws XMLStorageNotAvailableException, MalformedResourceException {
- if (status != STATUS.INITIALISED)
- throw new XMLStorageNotAvailableException("XMLStorage not initialized");
+ this.lock();
+ if (status != STATUS.INITIALISED) {
+ this.unlock();
+ throw new XMLStorageNotAvailableException("XMLStorage not initialized");
+ }
+
Collection currentCollection = null;
if (resource.getType() == RESOURCETYPE.Profile) {
// the entry contains a gCube resource profile
@@ -327,9 +331,10 @@ public class XMLStorageManager {
if (currentCollection == null) {
logger.error("Unable to open the Collection");
+ this.unlock();
throw new XMLStorageNotAvailableException("Unable to open the Collection");
}
- this.lock();
+
try {
XMLResource document = (XMLResource) currentCollection.createResource(resource.getID(), "XMLResource");
document.setContent(resource.toString());