Hi Koji, Thanks for your help, would not have found that soon ... You are right, if I apply your code, the IOException comes.
I only see one difference in the constructor of the IndexWriter class: "closeDir" is 'true' in my scenario and 'false' in your scenario. What is reason for this difference? And if there is a valid reason, it might be useful to add this to the javaDoc of the IndexWriter class. See below the difference in the constructor: When passing a Directory object: public IndexWriter(Directory d, Analyzer a, boolean create) throws IOException { this(d, a, create, false); } When passing a String path: public IndexWriter(String path, Analyzer a, boolean create) throws IOException { this(FSDirectory.getDirectory(path, create), a, create, true); } Dick On 1/10/06, Koji Sekiguchi <[EMAIL PROTECTED]> wrote: > > Hello Dick, > > Why you couldn't get an IOException when obtaining the second > writer because you used IndexWriter(String,Analyzer,boolean) version > constructor. Try IndexWriter(Directory,Analyzer,boolean) version instead: > > To do it, add the following code on your program: > > import org.apache.lucene.store.Directory; > import org.apache.lucene.store.FSDirectory; > > private Directory directory; > > private Directory getDirectory() throws IOException { > if( directory == null ){ > directory = FSDirectory.getDirectory( indexDir, true ); > } > return directory; > } > > And use the following method: > > private IndexWriter getWriter(String name, boolean createIndex) > throws > IOException > { > System.out.println("Opening writer " + name + " on: " + > this.indexDir); > //return new IndexWriter(this.indexDir, this.analyzer, > createIndex); > return new IndexWriter(getDirectory(), this.analyzer, > createIndex); > } > > If IndexWriter(path,Analyzer,true) is used, > IndexWriter calls FSDirectory.getDirectory(path,true) and > FSDirectory overwrites the existing lock file. > > Hope this helps, > > Koji > > > -----Original Message----- > > From: Dick de Jong [mailto:[EMAIL PROTECTED] > > Sent: Sunday, January 08, 2006 1:54 PM > > To: java-user@lucene.apache.org > > Subject: Basic question on opening 2 IndexWriters on same > > Directory - I do not get IOException ... > > > > > > Question: > > Run attached java class and see the also attached when I ran it. > > I assumed the second writer should get an IOException in > > getWriter (in > > first TESTCASE). > > However this does not happen! This only happens when I open both > > writers with flag 'createIndex'=true (see > > also second test case). > > > > Is this a misunderstanding from my side or what is this? > > > > ENVIRONMENT: > > Windows Professional XP SP2 > > Lucene 1.4 (java) > > > > > > OUTPUT OF MAIN METHOD: > > ======================= > > START TESTCASE > > Test open 2 index writers on index c:\temp\indexdir > > writer 1 uses createIndex =true > > writer 2 uses createIndex =true // why not an > > IOException here ?? > > Opening writer w1 on: c:\temp\indexdir > > Writing document to index using writer :w1 > > Opening writer w2 on: c:\temp\indexdir > > Writing document to index using writer :w2 > > Writing document to index using writer :w1 > > Closing writer w1 > > Closing writer w2 > > END of test case ... > > ======================= > > ======================= > > START TESTCASE > > Test open 2 index writers on index c:\temp\indexdir > > writer 1 uses createIndex =true > > writer 2 uses createIndex =false > > Opening writer w1 on: c:\temp\indexdir > > Writing document to index using writer :w1 > > Opening writer w2 on: c:\temp\indexdir > > In open writer caught IOException: > > Lock obtain timed out: > > [EMAIL PROTECTED]:\DOCUME~1\ddjong\LOCALS~1\Temp\lucene- > > ea51d1f7bb672168eda3ee90698e936d-write.lock > > Closing writer w1 > > END of test case ... > > ======================= > > > > USED JAVA class (src): > > ================================== > > > > import java.io.IOException; > > > > import org.apache.lucene.analysis.Analyzer; > > import org.apache.lucene.analysis.standard.StandardAnalyzer; > > import org.apache.lucene.index.IndexWriter; > > import org.apache.lucene.document.Document; > > import org.apache.lucene.document.Field; > > > > public class TestIndexWriter > > { > > > > private IndexWriter w1; > > private IndexWriter w2; > > private String indexDir; > > > > private Analyzer analyzer; > > private Document document; > > > > private TestIndexWriter() > > { > > // just create dummy document for test purposes, document is > > reused. > > this.document = new Document(); > > this.document.add(Field.Keyword("fname", "fvalue")); > > > > // indexDirectory Folder to be used > > this.indexDir = "c:\\temp\\indexdir"; > > > > this.analyzer = new StandardAnalyzer(); > > } > > > > private IndexWriter getWriter(String name, boolean > > createIndex) throws > > IOException > > { > > System.out.println("Opening writer " + name + " on: " + > > this.indexDir); > > return new IndexWriter(this.indexDir, this.analyzer, > > createIndex); > > } > > > > private void closeWriter(String name, IndexWriter w) > > { > > try { > > if (w != null) { > > System.out.println("Closing writer " + name); > > w.close(); > > } > > } > > catch (IOException e) { > > System.out.println("Don't bubble error in close > > writer; error: > > \n" + e.getMessage()); > > } > > } > > > > private void addDocument(String name, IndexWriter w) throws > > IOException > > { > > System.out.println("Writing document to index using writer :" + > > name); > > w.addDocument(this.document); > > } > > > > > > public void testOpenIndexWriters(boolean w1_create, boolean > > w2_create) > > { > > System.out.println("======================="); > > System.out.println("START TESTCASE"); > > System.out.println("Test open 2 index writers on index " + > > this.indexDir); > > > > System.out.println(" \twriter 1 uses createIndex =" + > w1_create); > > System.out.println(" \twriter 2 uses createIndex =" + > w2_create); > > > > this.w1 = this.w2 = null; > > try > > { > > w1 = this.getWriter("w1", w1_create); > > addDocument("w1", w1); > > w2 = this.getWriter("w2", w2_create); > > addDocument("w2", w2); > > addDocument("w1", w1); > > } > > catch (IOException e) > > { > > System.out.println("In open writer caught IOException:"); > > System.out.println("\t" + e.getMessage()); > > } > > finally > > { > > this.closeWriter("w1", w1); > > this.closeWriter("w2", w2); > > System.out.println("END of test case ..."); > > System.out.println("======================="); > > } > > } > > > > public static void main(String[] args) > > { > > TestIndexWriter tw = new TestIndexWriter(); > > tw.testOpenIndexWriters(true, true); > > tw.testOpenIndexWriters(true, false); > > } > > } > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >