You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by en...@apache.org on 2014/02/08 00:38:59 UTC

git commit: CLEREZZA-872 CLEREZZA-874 Fixed string preparation. Implemented a different strategy (plan B) for inserting very long literals.

Updated Branches:
  refs/heads/master 0c54ded27 -> 83c1997c2


CLEREZZA-872 CLEREZZA-874 Fixed string preparation. Implemented a different strategy (plan B) for inserting very long literals.


Project: http://git-wip-us.apache.org/repos/asf/clerezza/repo
Commit: http://git-wip-us.apache.org/repos/asf/clerezza/commit/83c1997c
Tree: http://git-wip-us.apache.org/repos/asf/clerezza/tree/83c1997c
Diff: http://git-wip-us.apache.org/repos/asf/clerezza/diff/83c1997c

Branch: refs/heads/master
Commit: 83c1997c24fb31fb66b9b0c234bb67898f25fa1d
Parents: 0c54ded
Author: enridaga <en...@apache.org>
Authored: Fri Feb 7 23:38:56 2014 +0000
Committer: enridaga <en...@apache.org>
Committed: Fri Feb 7 23:38:56 2014 +0000

----------------------------------------------------------------------
 .../rdf/virtuoso/storage/VirtuosoMGraph.java    | 324 +++++++++++++++----
 .../access/VirtuosoWeightedProvider.java        |  11 +-
 .../java/rdf/virtuoso/storage/RdfIOTest.java    |   1 -
 .../virtuoso/storage/VirtuosoMGraphTest.java    |  24 +-
 .../access/VirtuosoWeightedProviderTest.java    |   8 +-
 5 files changed, 286 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/clerezza/blob/83c1997c/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/VirtuosoMGraph.java
----------------------------------------------------------------------
diff --git a/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/VirtuosoMGraph.java b/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/VirtuosoMGraph.java
index 63353f7..e173043 100644
--- a/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/VirtuosoMGraph.java
+++ b/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/VirtuosoMGraph.java
@@ -18,6 +18,7 @@
  */
 package rdf.virtuoso.storage;
 
+import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
@@ -30,6 +31,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.apache.clerezza.rdf.core.BNode;
 import org.apache.clerezza.rdf.core.Graph;
 import org.apache.clerezza.rdf.core.Language;
+import org.apache.clerezza.rdf.core.Literal;
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.clerezza.rdf.core.PlainLiteral;
@@ -62,6 +64,12 @@ import virtuoso.jdbc4.VirtuosoResultSet;
  */
 public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 		LockableMGraph {
+	
+	// XXX This may be a configuration of the weighted provider
+	private static final int PLAN_B_LITERAL_SIZE = 50000;
+
+	private static final int CHECKPOINT = 1000;
+	
 	private final ReadWriteLock lock = new ReentrantReadWriteLock();
 	private final Lock readLock = lock.readLock();
 	private final Lock writeLock = lock.writeLock();
@@ -70,8 +78,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 	 * Bidirectional map for managing the conversion from virtuoso blank nodes
 	 * (strings) to clerezza blank nodes and vice versa.
 	 */
-	private final BidiMap<String, BNode> bnodesMap;
-//	private int maxVirtBnodeIndex = 0;
+	private final BidiMap<VirtuosoBNode, BNode> bnodesMap;
 
 	/**
 	 * Logger
@@ -98,7 +105,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 				name, provider);
 		this.name = name;
 		this.provider = provider;
-		this.bnodesMap = new BidiMapImpl<String, BNode>();
+		this.bnodesMap = new BidiMapImpl<VirtuosoBNode, BNode>();
 	}
 
 	/**
@@ -148,7 +155,6 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 		String virtSubject = toVirtSubject(subject);
 		String virtPredicate = toVirtPredicate(predicate);
 		String virtObject = toVirtObject(object);
-
 		sb.append("SPARQL SELECT ");
 		if (virtSubject != null) {
 			sb.append(" ").append(virtSubject).append(" as ?subject");
@@ -185,7 +191,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 		sb.append(" } } ");
 
 		String sql = sb.toString();
-		logger.debug("Executing SQL: {}", sql);
+//		logger.trace("Executing SQL: {}", sql);
 		Statement st = null;
 		List<Triple> list = null;
 		Exception e = null;
@@ -356,19 +362,132 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 		this.size = size;
 	}
 
+	private int checkpoint = 0;
+	private void checkpoint(boolean force){
+		if(checkpoint <= CHECKPOINT && force == false){
+			checkpoint++;
+			return;
+		}else{
+			checkpoint = 0;
+		}
+		VirtuosoConnection connection = null;
+		Exception e = null;
+		Statement st = null;
+		try {
+			connection = provider.getConnection();
+			st = connection.createStatement();
+			st.execute("Checkpoint");
+			logger.info("Checkpoint.");
+		} catch (VirtuosoException ve) {
+			logger.error("ERROR while executing statement", ve);
+			e = ve;
+		} catch (SQLException se) {
+			logger.error("ERROR while executing statement", se);
+			e = se;
+		} catch (ClassNotFoundException e1) {
+			e = e1;
+		} finally {
+			try {
+				if (st != null)
+					st.close();
+			} catch (Exception ex) {
+			}
+			;
+			if (connection != null) {
+				try {
+					connection.close();
+				} catch (VirtuosoException e1) {
+					logger.error("Cannot close connection", e1);
+				}
+			}
+		}
+		if (e != null) {
+			throw new RuntimeException(e);
+		}
+	}
+	
+	private boolean performAddPlanB(Triple triple){
+		StringBuilder b = new StringBuilder();
+		b.append(toVirtSubject(triple.getSubject()))
+		.append(" ")
+		.append(toVirtPredicate(triple.getPredicate()))
+		.append(" ")
+		.append(toVirtObject(triple.getObject()))
+		.append(" . ");
+		String sql = "db.dba.ttlp(?, '', '" + this.getName() + "2', 0)";
+		logger.debug("Exec Plan B: {}", sql);
+		writeLock.lock();
+		VirtuosoConnection connection = null;
+		Exception e = null;
+		PreparedStatement st = null;
+		try {
+			connection = provider.getConnection();
+			st = connection.prepareStatement(sql);
+			st.setNString(1, b.toString());
+			st.execute();
+		} catch (VirtuosoException ve) {
+			logger.error("ERROR while executing statement", ve);
+			e = ve;
+		} catch (SQLException se) {
+			logger.error("ERROR while executing statement", se);
+			e = se;
+		} catch (ClassNotFoundException e1) {
+			e = e1;
+		} finally {
+			writeLock.unlock();
+			try {
+				if (st != null)
+					st.close();
+			} catch (Exception ex) {
+			}
+			;
+			if (connection != null) {
+				try {
+					connection.close();
+				} catch (VirtuosoException e1) {
+					logger.error("Cannot close connection", e1);
+				}
+			}
+			checkpoint(true);
+		}
+		if (e != null) {
+			logger.error("S {}", triple.getSubject());
+			logger.error("P {}", triple.getPredicate());
+			logger.error("O {}", triple.getObject());
+			logger.error(" O size: {}", triple.getObject().toString().length());
+			logger.error("Sql: {}", sql);
+			throw new RuntimeException(e);
+		}
+		return true;
+	}
 	protected boolean performAdd(Triple triple) {
 		logger.debug("performAdd(Triple {})", triple);
-		String sql = getAddSQLStatement(triple);
-//		logger.info("Executing SQL: {}", sql);
+		
+		// XXX If the object is a very long literal we use plan B
+		if (triple.getObject() instanceof Literal) {
+			if (((Literal) triple.getObject()).getLexicalForm().length() > PLAN_B_LITERAL_SIZE) {
+				return performAddPlanB(triple);
+			}
+		}
+
+		// String sql = getAddSQLStatement(triple);
+		String sql = INSERT;
+		// logger.info("Executing SQL: {}", sql);
 		// logger.info("--- {} ", sql);
 		writeLock.lock();
 		VirtuosoConnection connection = null;
 		Exception e = null;
-		Statement st = null;
+		PreparedStatement st = null;
 		try {
 			connection = getConnection();
-			st = connection.createStatement();
-			st.execute(sql);
+			// st = connection.createStatement();
+			st = connection.prepareStatement(sql);
+			bindGraph(st, 1, new UriRef(getName()));
+			bindSubject(st, 2, triple.getSubject());
+			bindPredicate(st, 3, triple.getPredicate());
+			bindValue(st, 4, triple.getObject());
+			
+			st.execute();
 		} catch (VirtuosoException ve) {
 			logger.error("ERROR while executing statement", ve);
 			e = ve;
@@ -392,16 +511,77 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 					logger.error("Cannot close connection", e1);
 				}
 			}
+			checkpoint(false);
 		}
 		if (e != null) {
 			logger.error("S {}", triple.getSubject());
 			logger.error("P {}", triple.getPredicate());
 			logger.error("O {}", triple.getObject());
+			logger.error(" O size: {}", triple.getObject().toString().length());
+			logger.error("Sql: {}", sql);
 			throw new RuntimeException(e);
 		}
 		return true;
 	}
 
+	private void bindValue(PreparedStatement st, int i, Resource object) throws SQLException {
+		if (object instanceof UriRef) {
+			st.setInt(i, 1);
+			st.setString(i + 1,((UriRef)object).getUnicodeString());
+			st.setNull(i + 2, java.sql.Types.VARCHAR);
+		} else if (object instanceof BNode) {
+			st.setInt(i, 1);
+			st.setString(i + 1, toVirtBnode((BNode) object).getSkolemId());
+			st.setNull(i + 2, java.sql.Types.VARCHAR);
+		} else if (object instanceof TypedLiteral) {
+			TypedLiteral tl = ((TypedLiteral)object);
+			st.setInt(i, 4);
+			// if datatype is XMLLiteral
+			String lf = tl.getLexicalForm();
+			if(tl.getDataType().getUnicodeString().equals("http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")){
+				//lf = prepareString(lf, true).toString();
+			}
+
+			// XXX
+			if(object.toString().length() == 416){
+				logger.warn("416 Chars length");
+				lf += " XXXXXXXXXX  ";
+			}
+			st.setString(i+1, lf);
+			st.setString(i+2, tl.getDataType().getUnicodeString());
+		} else if (object instanceof PlainLiteral) {
+			PlainLiteral pl = (PlainLiteral) object;
+			if(pl.getLanguage() != null){
+				st.setInt(i, 5);
+				st.setString(i + 1, pl.getLexicalForm());
+				st.setString(i + 2, pl.getLanguage().toString());
+			}else{
+				st.setInt(i, 3);
+				st.setString(i + 1, pl.getLexicalForm());
+				st.setNull(i + 2, java.sql.Types.VARCHAR);
+			}
+		}else throw new IllegalArgumentException(object.toString());
+	}
+
+	private void bindPredicate(PreparedStatement st, int i, UriRef predicate)
+			throws SQLException {
+		st.setString(i, predicate.getUnicodeString());
+	}
+
+	private void bindSubject(PreparedStatement st, int i, NonLiteral subject)
+			throws SQLException {
+		if (subject instanceof UriRef) {
+			st.setString(i, ((UriRef) subject).getUnicodeString());
+		} else {
+			st.setString(i, toVirtBnode((BNode) subject).getSkolemId());
+		}
+	}
+
+	private void bindGraph(PreparedStatement st, int i, UriRef uriRef)
+			throws SQLException {
+		st.setString(i, uriRef.getUnicodeString());
+	}
+
 	protected boolean performRemove(Triple triple) {
 		logger.debug("performRemove(Triple triple)", triple);
 		String sql = getRemoveSQLStatement(triple);
@@ -434,6 +614,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 					logger.error("Cannot close connection", e1);
 				}
 			}
+			checkpoint(false);
 		}
 		if (e != null) {
 			throw new RuntimeException(e);
@@ -469,10 +650,10 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 	 * 
 	 * @return
 	 */
-	private String nextVirtBnode(BNode bn) {
+	private VirtuosoBNode nextVirtBnode(BNode bn) {
 		logger.debug("nextVirtBnode(BNode)");
-//		maxVirtBnodeIndex++;
-		
+		// maxVirtBnodeIndex++;
+
 		String temp_graph = "<urn:x-virtuoso:bnode-tmp>";
 		String bno = new StringBuilder().append('<').append(bn).append('>')
 				.toString();
@@ -491,8 +672,8 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 				.append(temp_graph).append(" { ?S ").append(_bnodeObject)
 				.append(' ').append(bno).append(" } ").toString();
 		logger.trace(" delete tmp triple: {}", sql_delete);
-		
-//		logger.info("SQL {}", sql);
+
+		// logger.info("SQL {}", sql);
 		writeLock.lock();
 		VirtuosoConnection connection = null;
 		Exception e = null;
@@ -537,11 +718,12 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 					logger.error("Cannot close connection", e1);
 				}
 			}
+			checkpoint(false);
 		}
-		if(e!=null){
+		if (e != null) {
 			throw new RuntimeException(e);
 		}
-		return new StringBuilder().append('<').append(bnodeId).append('>').toString();
+		return new VirtuosoBNode(bnodeId);
 	}
 
 	/**
@@ -549,12 +731,12 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 	 * @param bnode
 	 * @return
 	 */
-	private String toVirtBnode(BNode bnode) {
+	private VirtuosoBNode toVirtBnode(BNode bnode) {
 		logger.debug("toVirtBnode(BNode {})", bnode);
 		if (bnode instanceof VirtuosoBNode) {
-			return ((VirtuosoBNode) bnode).asSkolemIri();
+			return ((VirtuosoBNode) bnode);
 		} else {
-			String virtBnode = bnodesMap.getKey(bnode);
+			VirtuosoBNode virtBnode = bnodesMap.getKey(bnode);
 			if (virtBnode == null) {
 				// We create a local bnode mapped to the BNode given
 				virtBnode = nextVirtBnode(bnode);
@@ -564,17 +746,20 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 		}
 	}
 
-	private String getAddSQLStatement(Triple triple) {
-		logger.debug("getAddSQLStatement(Triple {})", triple);
-		StringBuilder sb = new StringBuilder();
-		String subject = toVirtSubject(triple.getSubject());
-		String predicate = toVirtPredicate(triple.getPredicate());
-		String object = toVirtObject(triple.getObject());
-		String sql = sb.append("SPARQL INSERT INTO <").append(this.getName())
-				.append("> { ").append(subject).append(" ").append(predicate)
-				.append(" ").append(object).append(" }").toString();
-		return sql;
-	}
+	private static String INSERT = "SPARQL INSERT INTO iri(??) {`iri(??)` `iri(??)` "
+			+ "`bif:__rdf_long_from_batch_params(??,??,??)`}";
+
+//	private String getAddSQLStatement(Triple triple) {
+//		logger.debug("getAddSQLStatement(Triple {})", triple);
+//		StringBuilder sb = new StringBuilder();
+//		String subject = toVirtSubject(triple.getSubject());
+//		String predicate = toVirtPredicate(triple.getPredicate());
+//		String object = toVirtObject(triple.getObject());
+//		String sql = sb.append("SPARQL INSERT INTO <").append(this.getName())
+//				.append("> { ").append(subject).append(" ").append(predicate)
+//				.append(" ").append(object).append(" }").toString();
+//		return sql;
+//	}
 
 	private String getRemoveSQLStatement(Triple triple) {
 		logger.debug("getRemoveSQLStatement(Triple {})", triple);
@@ -592,7 +777,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 	}
 
 	/**
-	 * Returns a string to be used in SQL statements as Object of a triple.
+	 * Returns a string to be used inline in SQL statements as Object of a triple.
 	 * 
 	 * @param object
 	 * @return
@@ -604,7 +789,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 		if (object instanceof UriRef) {
 			return toVirtIri((UriRef) object);
 		} else if (object instanceof BNode) {
-			return toVirtBnode((BNode) object);
+			return toVirtBnode((BNode) object).asSkolemIri();
 		} else if (object instanceof PlainLiteral) {
 			return toVirtPlainLiteral((PlainLiteral) object);
 		} else if (object instanceof TypedLiteral) {
@@ -623,38 +808,42 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 	private String toVirtTypedLiteral(TypedLiteral object) {
 		logger.debug("toVirtTypedLiteral(TypedLiteral {})", object);
 		UriRef dt = object.getDataType();
-		String literal = object.getLexicalForm();//.replaceAll("\"", "\\\\\"");
+		String literal = object.getLexicalForm();// .replaceAll("\"", "\\\\\"");
 		StringBuilder prepared;
 		// If XMLLiteral, prepare XML entities
-		prepared = prepareString(literal, dt.getUnicodeString().equals("http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"));
-		return new StringBuilder().append('"').append('"').append('"').append(prepared).append('"').append('"').append('"')
+		prepared = prepareString(
+				literal,
+				dt.getUnicodeString()
+						.equals("http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"));
+		return new StringBuilder().append('"').append('"').append('"')
+				.append(prepared).append('"').append('"').append('"')
 				.append("^^").append(toVirtIri(dt)).toString();
 	}
-	
+
 	private StringBuilder prepareString(String str, boolean xml) {
-		  StringBuilder retStr = new StringBuilder();
-		  for(int i=0; i<str.length(); i++) {
-		    int cp = Character.codePointAt(str, i);
-		    int charCount = Character.charCount(cp);
-		    if (charCount > 1) {
-		      i += charCount - 1; // 2.
-		      if (i >= str.length()) {
-		        throw new IllegalArgumentException("truncated unexpectedly");
-		      }
-		    }
-
-		    if (cp < 128) {
-		      retStr.appendCodePoint(cp);
-		    } else {
-		    	if(xml){
-		    		 retStr.append(String.format("&#x%04x;", cp));
-		    	}else{
-		    		retStr.append(String.format("\\u%04x", cp));
-		    	}
-		    }
-		  }
-		  return retStr;
+		StringBuilder retStr = new StringBuilder();
+		for (int i = 0; i < str.length(); i++) {
+			int cp = Character.codePointAt(str, i);
+			int charCount = Character.charCount(cp);
+			if (charCount > 1) {
+				i += charCount - 1; // 2.
+				if (i >= str.length()) {
+					throw new IllegalArgumentException("truncated unexpectedly");
+				}
+			}
+
+			if (cp < 128) {
+				retStr.appendCodePoint(cp);
+			} else {
+				if (xml) {
+					retStr.append(String.format("&#x%04x;", cp));
+				} else {
+					retStr.append(String.format("\\u%04x", cp));
+				}
+			}
 		}
+		return retStr;
+	}
 
 	/**
 	 * Returns a string to be used in SQL statements.
@@ -665,9 +854,10 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 	private String toVirtPlainLiteral(PlainLiteral object) {
 		logger.debug("toVirtPlainLiteral(PlainLiteral {})", object);
 		Language lang = object.getLanguage();
-		String literal = object.getLexicalForm();//.replaceAll("\"", "\\\\\"");
-		StringBuilder sb = new StringBuilder().append('"').append('"').append('"').append(prepareString(literal, false))
-				.append('"').append('"').append('"');
+		String literal = object.getLexicalForm();// .replaceAll("\"", "\\\\\"");
+		StringBuilder sb = new StringBuilder().append('"').append('"')
+				.append('"').append(prepareString(literal, false)).append('"')
+				.append('"').append('"');
 		if (lang == null) {
 			return sb.toString();
 		} else {
@@ -707,7 +897,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 		if (subject instanceof UriRef) {
 			return toVirtIri((UriRef) subject);
 		} else if (subject instanceof BNode) {
-			return toVirtBnode((BNode) subject);
+			return toVirtBnode((BNode) subject).asSkolemIri();
 		} else {
 			// These should be the only 2 implementations
 			throw new IllegalArgumentException(
@@ -777,6 +967,7 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 
 		Resource buildObject() {
 			logger.debug("TripleBuilder.getObject() : {}", o);
+			
 			if (o instanceof VirtuosoExtendedString) {
 				// In case is IRI
 				VirtuosoExtendedString vs = (VirtuosoExtendedString) o;
@@ -794,10 +985,9 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 			} else if (o instanceof VirtuosoRdfBox) {
 				// In case is typed literal
 				VirtuosoRdfBox rb = (VirtuosoRdfBox) o;
-
+				
 				String value;
 				if (rb.rb_box.getClass().isAssignableFrom(String.class)) {
-					// logger.info("assignable from string: {}", rb.rb_box);
 					value = (String) rb.rb_box;
 					String lang = rb.getLang();
 					String type = rb.getType();
@@ -821,6 +1011,10 @@ public class VirtuosoMGraph extends AbstractMGraph implements MGraph,
 					} else {
 						String type = rb.getType();
 						if (type == null) {
+							String lang = rb.getLang();
+							if(lang != null){
+								return new PlainLiteralImpl(vs.str, new Language(lang));
+							}
 							// Is a plain literal
 							return new PlainLiteralImpl(vs.str);
 						} else {

http://git-wip-us.apache.org/repos/asf/clerezza/blob/83c1997c/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/access/VirtuosoWeightedProvider.java
----------------------------------------------------------------------
diff --git a/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/access/VirtuosoWeightedProvider.java b/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/access/VirtuosoWeightedProvider.java
index 626c561..db073b1 100644
--- a/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/access/VirtuosoWeightedProvider.java
+++ b/clerezza-virtuoso/rdf.virtuoso.storage/src/main/java/rdf/virtuoso/storage/access/VirtuosoWeightedProvider.java
@@ -97,7 +97,7 @@ public class VirtuosoWeightedProvider implements WeightedTcProvider {
 	/**
 	 * MAP OF LOADED GRAPHS
 	 */
-	private Map<UriRef, VirtuosoMGraph> graphs = null;
+	private Map<UriRef, VirtuosoMGraph> graphs = new HashMap<UriRef, VirtuosoMGraph>();
 
 	/**
 	 * Weight
@@ -269,8 +269,10 @@ public class VirtuosoWeightedProvider implements WeightedTcProvider {
 			// FIXME! How to redirect logging to our logger???
 			DriverManager.setLogWriter(new PrintWriter(System.err));
 		}
-		return (VirtuosoConnection) DriverManager.getConnection(connStr, user,
+		VirtuosoConnection c = (VirtuosoConnection) DriverManager.getConnection(connStr, user,
 				pwd);
+		c.setAutoCommit(true);
+		return c;
 	}
 
 	/**
@@ -317,7 +319,6 @@ public class VirtuosoWeightedProvider implements WeightedTcProvider {
 	 * 
 	 * If no triples exists, the graph does not exists or it is not readable.
 	 * 
-	 * WARNING! THIS SHOULD BE THE ONLY METHOD TO ACCESS THE MAP graphs
 	 * 
 	 * @param name
 	 * @return
@@ -325,10 +326,6 @@ public class VirtuosoWeightedProvider implements WeightedTcProvider {
 	private VirtuosoMGraph loadGraphOnce(UriRef name) {
 		logger.debug("loadGraphOnce({})", name);
 		
-		// Is it the first itme we invoke a graph here?
-		if (graphs == null) {
-			graphs = new HashMap<UriRef, VirtuosoMGraph>();
-		}
 		// Check whether the graph have been already loaded once
 		if (graphs.containsKey(name)) {
 			logger.debug("{} is already loaded", name);

http://git-wip-us.apache.org/repos/asf/clerezza/blob/83c1997c/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/RdfIOTest.java
----------------------------------------------------------------------
diff --git a/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/RdfIOTest.java b/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/RdfIOTest.java
index 6f5826b..2e6dc72 100644
--- a/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/RdfIOTest.java
+++ b/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/RdfIOTest.java
@@ -149,7 +149,6 @@ public class RdfIOTest {
 		Triple t = new TripleImpl(subject, predicate, object);
 		graph.add(t);
 		Triple read = graph.getGraph().iterator().next();
-
 		return read;
 	}
 

http://git-wip-us.apache.org/repos/asf/clerezza/blob/83c1997c/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/VirtuosoMGraphTest.java
----------------------------------------------------------------------
diff --git a/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/VirtuosoMGraphTest.java b/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/VirtuosoMGraphTest.java
index 3718a6f..32fa59f 100644
--- a/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/VirtuosoMGraphTest.java
+++ b/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/VirtuosoMGraphTest.java
@@ -29,6 +29,7 @@ import java.util.Iterator;
 
 import org.apache.clerezza.rdf.core.BNode;
 import org.apache.clerezza.rdf.core.Graph;
+import org.apache.clerezza.rdf.core.Language;
 import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.clerezza.rdf.core.PlainLiteral;
 import org.apache.clerezza.rdf.core.Resource;
@@ -70,7 +71,7 @@ public class VirtuosoMGraphTest {
 	final UriRef alexdma = new UriRef("alexdma");
 	final UriRef anuzzolese = new UriRef("anuzzolese");
 	final UriRef predicate = new UriRef("http://property/name");
-	final PlainLiteral object = new PlainLiteralImpl("Enrico Daga");
+	final PlainLiteral object = new PlainLiteralImpl("Enrico Daga", new Language("it"));
 	final UriRef knows = new UriRef(TestUtils.FOAF_NS + "knows");
 
 	@Test
@@ -97,7 +98,6 @@ public class VirtuosoMGraphTest {
 				return object;
 			}
 		};
-
 		boolean success = mgraph.add(triple);
 		assertTrue(success);
 		assertTrue(mgraph.size() == 1);
@@ -113,6 +113,20 @@ public class VirtuosoMGraphTest {
 		}
 		// We use testAdd to prepare this
 		testAddSingle();
+
+		
+		Iterator<Triple> its = mgraph.filter(null, null, null);
+		while (its.hasNext()) {
+			Triple t = its.next();
+			log.info("Found --- triple: {}", t);
+			log.info("Found --- s: {} {}", t.getSubject(), t.getSubject().getClass());
+			log.info("Found --- p: {} {}", t.getPredicate(), t.getPredicate().getClass());
+			log.info("Found --- o: {} {}", t.getObject(), t.getObject().getClass());
+			assertEquals(t.getSubject(), enridaga);
+			assertEquals(t.getPredicate(), predicate);
+			assertEquals(t.getObject(), object);
+		}
+
 		Iterator<Triple> it = mgraph.filter(enridaga, predicate, object);
 		boolean found = false;
 		while (it.hasNext()) {
@@ -434,10 +448,10 @@ public class VirtuosoMGraphTest {
 			log.warn("SKIPPED");
 			return;
 		}
-		log.debug("Clearing graph <{}> of size {}", TEST_GRAPH_NAME,
+		log.info("not Clearing graph <{}> of size {}", TEST_GRAPH_NAME,
 				mgraph.size());
 		log.debug("Removing graph <{}>", TEST_GRAPH_NAME);
-		Statement st = TestUtils.getConnection().createStatement();
-		st.execute("SPARQL CLEAR GRAPH <" + TEST_GRAPH_NAME + ">");
+//		Statement st = TestUtils.getConnection().createStatement();
+//		st.execute("SPARQL CLEAR GRAPH <" + TEST_GRAPH_NAME + ">");
 	}
 }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/83c1997c/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/access/VirtuosoWeightedProviderTest.java
----------------------------------------------------------------------
diff --git a/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/access/VirtuosoWeightedProviderTest.java b/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/access/VirtuosoWeightedProviderTest.java
index e5dfc8e..8c823df 100644
--- a/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/access/VirtuosoWeightedProviderTest.java
+++ b/clerezza-virtuoso/rdf.virtuoso.storage/src/test/java/rdf/virtuoso/storage/access/VirtuosoWeightedProviderTest.java
@@ -267,7 +267,7 @@ public class VirtuosoWeightedProviderTest {
 			log.warn("SKIPPED");
 			return;
 		}
-		try {
+//		try {
 			UriRef ur = new UriRef("urn:my-empty-graph");
 			Assert.assertFalse(wp.listGraphs().contains(ur));
 			Assert.assertFalse(wp.listMGraphs().contains(ur));
@@ -279,8 +279,8 @@ public class VirtuosoWeightedProviderTest {
 			wp.deleteTripleCollection(ur);
 			Assert.assertFalse(wp.listGraphs().contains(ur));
 			Assert.assertFalse(wp.listMGraphs().contains(ur));
-		} catch (NoSuchEntityException nsee) {
-			// Nothing to do
-		}
+//		} catch (NoSuchEntityException nsee) {
+//			// Nothing to do
+//		}
 	}
 }