Solved

Lucene: "FileNotFoundException"

Posted on 2004-04-30
9
292 Views
Last Modified: 2012-08-13
I'm using threads in which i'm searching an xml index and sometimes updating the index also.....

However, (probabaly on the occasions when the two threads(+) conincide) i get a "FileNotFoundException": the system cannot find the path specified...
or else an "IOException": couldn't delete _4.fl

So, i'm presuming that there is a conflict, whenever there may be an indexing and a search at the same time?

(By the way.....
I'm using Digester to parse & index the xml file
In my xmlParser class, i have a 'contacts' class (which holds all the properties or each contact entry which must be declared public and static for digester to instantiate it....)

How could i make sure these two errors never occur.......
0
Comment
Question by:vinoboy
  • 5
  • 3
9 Comments
 
LVL 30

Expert Comment

by:mayankeagle
ID: 10958628
>> couldn't delete _4.fl

Do you also try to delete the files somewhere?
0
 

Author Comment

by:vinoboy
ID: 10958743
No, i didn't, but i presume that when its updating the index (ie, overwriting i think) that it deletes them itself
0
 
LVL 30

Expert Comment

by:mayankeagle
ID: 10958771
Make sure that you synchronize your file-access properly. Ideally, when a file is being read by a thread, no other thread should write to it till that one closes it. Sameway, if a file is being written into by one thread, you should not let any other thread read from it till this one closes it.
0
 

Author Comment

by:vinoboy
ID: 10958800
And an easily implementable and reliable way to do the synchronisation of file access is?
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 30

Expert Comment

by:mayankeagle
ID: 10958839
Perhaps you could use a common log-file. If a file is being written to, then the program would write its name to this file. Any other threads trying to access that file would wait till the file's entry is removed from that log-file (which will be done by the thread using it, after it is done with the file).

You could also carefully use synchronization between threads, but I don't have your code to help you with that.
0
 

Author Comment

by:vinoboy
ID: 10958887
I'll give the log file a shot....Its mere existance could tell me that the 'updating index' program is been used...
0
 
LVL 30

Expert Comment

by:mayankeagle
ID: 10958918
Don't check only for existance. Let the log-file always be there. Let the existance of the working file-name in the log-file decide whether it is to be accessed or not. You can write a separate class for this log-file purpose.
0
 
LVL 4

Expert Comment

by:illusionz70
ID: 10959066
use locks to lock the file before you access it so that no other thread/process can change it

import java.nio.channels.*; //works on 1.4 only

FileLock lck = new FileOutputStream("C:\\File").getChannel().tryLock();
            if(lck == null)
                               {
      System.out.println("Another thread is already accesing the file....");
            }

c:\\file can be the common file which is locked.if this file is not locked then a thread can do the required if it is locked then the thread has to wait.

cheers
0
 
LVL 30

Accepted Solution

by:
mayankeagle earned 100 total points
ID: 10959155
Ah, indeed~! Should've thought of that! Have been working on 1.3 a lot these days! You can see more on locks here:

http://www.javaalmanac.com/egs/java.nio/SetFileLock.html

http://www.javaalmanac.com/egs/java.nio/SharedLock.html
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now