You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by ca...@apache.org on 2011/05/24 15:43:13 UTC

svn commit: r1127048 - in /incubator/jena/Jena2/LARQ/trunk/src: main/java/org/apache/jena/larq/ main/java/org/apache/jena/larq/assembler/ test/java/org/apache/jena/larq/

Author: castagna
Date: Tue May 24 13:43:13 2011
New Revision: 1127048

URL: http://svn.apache.org/viewvc?rev=1127048&view=rev
Log:
IndexLARQ as a new constructor which takes an IndexWriter (so that when we have a read/write Lucene index we can close it properly). Also, every time we do a search we check the reader.isCurrent(), if not a new IndexSearcher is instantiated so that index changes are visible to users searching.

Modified:
    incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java
    incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java
    incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java
    incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java

Modified: incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/IndexLARQ.java Tue May 24 13:43:13 2011
@@ -19,12 +19,14 @@
 package org.apache.jena.larq;
 
 
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.Iterator;
 
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.search.IndexSearcher;
@@ -47,11 +49,13 @@ import com.hp.hpl.jena.util.iterator.Map
 public class IndexLARQ
 {
     
-    protected final IndexSearcher searcher ;
-    protected final IndexReader reader ;
+    protected IndexSearcher searcher ;
+    protected IndexReader reader ;
+    protected final IndexWriter writer ;
     protected final QueryParser luceneQueryParser ;
     protected final Analyzer analyzer ;
 
+    
     public IndexLARQ(IndexReader r)
     { 
         this(r, new StandardAnalyzer(LARQ.LUCENE_VERSION)) ;
@@ -60,6 +64,7 @@ public class IndexLARQ
     public IndexLARQ(IndexReader r, Analyzer a)
     { 
         //this(r, new QueryParser(LARQ.fIndex, a)) ;
+        writer = null ;
         reader = r ;
         searcher = new IndexSearcher(reader) ;
         analyzer = a ;
@@ -67,10 +72,28 @@ public class IndexLARQ
         
     }
     
+    public IndexLARQ(IndexWriter w)
+    {
+        this (w, new StandardAnalyzer(LARQ.LUCENE_VERSION)) ;
+    }
+    
+    public IndexLARQ(IndexWriter w, Analyzer a)
+    {
+        writer = w ;
+        try {
+            reader = IndexReader.open(writer, true) ;
+        } catch (IOException e) 
+        { throw new ARQLuceneException("IndexLARQ", e) ; }
+        searcher = new IndexSearcher(reader) ;
+        analyzer = a ;
+        luceneQueryParser = null ;
+    }
+    
     @Deprecated
     /** Passing in a fixed QueryParser is not thread safe */
     public IndexLARQ(IndexReader r, QueryParser qp)
     { 
+        writer = null ;
         reader = r ;
         searcher = new IndexSearcher(reader) ;
         analyzer = qp.getAnalyzer() ;
@@ -139,6 +162,7 @@ public class IndexLARQ
     public Iterator<HitLARQ> search(String queryString)
     {    
         try{
+            final IndexSearcher searcher = getIndexSearcher() ;
             Query query = getLuceneQueryParser().parse(queryString) ;
             
             TopDocs topDocs = searcher.search(query, (Filter)null, LARQ.NUM_RESULTS ) ;
@@ -175,9 +199,25 @@ public class IndexLARQ
         { throw new ARQLuceneException("contains", e) ; }
     }
     
+    private synchronized IndexSearcher getIndexSearcher() throws IOException {
+        if ( !reader.isCurrent() ) {
+            IndexReader newReader = reader.reopen(true) ;
+            reader.close();
+            reader = newReader;
+            searcher = new IndexSearcher(reader);
+        }
+        
+        return searcher ;
+    }
+
     public void close()
     {
         try{
+            if ( writer != null )
+                writer.close() ;
+        } catch (Exception e)
+        { throw new ARQLuceneException("close", e) ; }
+        try{
             if ( reader != null )
                 reader.close() ;
         } catch (Exception e)

Modified: incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/main/java/org/apache/jena/larq/assembler/AssemblerLARQ.java Tue May 24 13:43:13 2011
@@ -33,6 +33,7 @@ import org.apache.lucene.index.IndexRead
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.RAMDirectory;
 
 import com.hp.hpl.jena.assembler.Assembler;
 import com.hp.hpl.jena.assembler.Mode;
@@ -70,8 +71,15 @@ public class AssemblerLARQ extends Assem
     
     public static IndexLARQ make (Dataset dataset, String indexPath) throws CorruptIndexException, IOException 
     {
-        Directory directory = FSDirectory.open(new File(indexPath));
+        Directory directory;
+        if ( indexPath != null ) 
+        {
+            directory = FSDirectory.open(new File(indexPath));
+        } else {
+            directory = new RAMDirectory();
+        }
         IndexReader indexReader = null;
+        IndexLARQ indexLARQ = null;
         if ( dataset != null ) {
             IndexWriter indexWriter = IndexWriterFactory.create(directory);
             IndexBuilderModel larqBuilder = new IndexBuilderString(indexWriter) ; 
@@ -81,10 +89,11 @@ public class AssemblerLARQ extends Assem
                 dataset.getNamedModel(g).register(larqBuilder) ;
             }
             indexReader = IndexReader.open(indexWriter, true);
+            indexLARQ = new IndexLARQ(indexWriter) ;
         } else {
             indexReader = IndexReader.open(directory, true) ; // read-only
+            indexLARQ = new IndexLARQ(indexReader) ;
         }
-        IndexLARQ indexLARQ = new IndexLARQ(indexReader) ;
         LARQ.setDefaultIndex(indexLARQ) ;
         return indexLARQ ;
     }

Modified: incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TS_LARQ.java Tue May 24 13:43:13 2011
@@ -27,17 +27,21 @@ import org.junit.runners.Suite;
 @Suite.SuiteClasses( {
     TestLARQ_Code.class,
     TestLARQ_Script.class,
-    TestLARQ_Examples.class
+    TestLARQ_Examples.class,
+    TestAssemblerLARQ.class,
+    TestLuceneNRT.class
 } )
 
 public class TS_LARQ
 {
-    static public TestSuite suite()
-    {
-        TestSuite ts = new TestSuite(TS_LARQ.class.getName()) ;
-        ts.addTest(TestLARQ_Code.suite()) ;
-        ts.addTest(TestLARQ_Script.suite()) ;
-        ts.addTest(TestLARQ_Examples.suite()) ;
-        return ts ;
-    }
+// Is this necessary? Why?
+//
+//    static public TestSuite suite()
+//    {
+//        TestSuite ts = new TestSuite(TS_LARQ.class.getName()) ;
+//        ts.addTest(TestLARQ_Code.suite()) ;
+//        ts.addTest(TestLARQ_Script.suite()) ;
+//        ts.addTest(TestLARQ_Examples.suite()) ;
+//        return ts ;
+//    }
 }

Modified: incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java?rev=1127048&r1=1127047&r2=1127048&view=diff
==============================================================================
--- incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java (original)
+++ incubator/jena/Jena2/LARQ/trunk/src/test/java/org/apache/jena/larq/TestAssemblerLARQ.java Tue May 24 13:43:13 2011
@@ -22,6 +22,13 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.io.IOException;
+
+import org.apache.jena.larq.assembler.AssemblerLARQ;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.RAMDirectory;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -30,6 +37,7 @@ import org.openjena.atlas.lib.FileOps;
 
 import com.hp.hpl.jena.query.Dataset;
 import com.hp.hpl.jena.sparql.core.assembler.AssemblerUtils;
+import com.hp.hpl.jena.tdb.TDBFactory;
 import com.hp.hpl.jena.tdb.assembler.VocabTDB;
 import com.hp.hpl.jena.tdb.store.DatasetGraphTDB;
 
@@ -49,6 +57,7 @@ public class TestAssemblerLARQ {
     {
         FileOps.clearDirectory(tmpDir + "/tdb") ;
         FileOps.clearDirectory(tmpDir + "/lucene") ;
+        LARQ.setDefaultIndex(null) ;
     }
     
     @AfterClass static public void afterClass()
@@ -71,6 +80,23 @@ public class TestAssemblerLARQ {
         assertNotNull(LARQ.getDefaultIndex()) ;
         
         ds.close() ;
+        
+        IndexLARQ indexLARQ = LARQ.getDefaultIndex();
+        indexLARQ.close();
+    }
+    
+    @Test public void testMake1() throws CorruptIndexException, IOException {
+        Dataset ds = TDBFactory.createDataset() ;
+        IndexLARQ indexLARQ = AssemblerLARQ.make(ds, tmpDir + "/lucene") ;
+        Directory directory = indexLARQ.getLuceneReader().directory() ;
+        assertTrue ( directory instanceof FSDirectory );
+    }
+    
+    @Test public void testMake2() throws CorruptIndexException, IOException {
+        Dataset ds = TDBFactory.createDataset() ;
+        IndexLARQ indexLARQ = AssemblerLARQ.make(ds, null) ;
+        Directory directory = indexLARQ.getLuceneReader().directory() ;
+        assertTrue ( directory instanceof RAMDirectory );
     }
     
 }