Let’s me start from a scenario of a Java (Hibernate, Spring App)/tomcat application that would give you as myself, the error as stated in the subject above.
To reproduce
In some cases, as you do as following steps:
- Build with clean install
- Start Tomcat as normal
- Stop Tomcat
- And Start Tomcat again
- You got an error with LockObtainFailedException
The error message
org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: SimpleFSLock@C:\Users\youruser\YourProject-1.0-SNAPSHOT\index\com.yourproject.model.MyModel\write.lock
Work Around Solution
Here is my first solution, I noticed each time I got the error
- Each before start any tomcat, you need to run: mvn clean install
- Then can start tomcat as normal
Exactly Cause & Temporary Solution
What’s the exactly issue I really found out. It is because of your search index in configuration of file: hibernate.properties
app.search.index.basedir=\${user.home}/${project.build.finalName}/index hibernate.search.default.directory_provider=filesystem hibernate.search.default.locking_strategy=simple hibernate.search.default.exclusive_index_use=true hibernate.search.lucene_version=LUCENE_35 hibernate.search.analyzer=org.apache.lucene.analysis.en.EnglishAnalyzer hibernate.search.worker.batch_size=100
According to the doc of LockFactory as in one document of RedHat, the strategy config with simple said that:
If for some reason you had to kill your application, you will need to remove this file before restarting it.
So that for my temporary solution, I consider to disable the index for awhile in my development environment and keep above setting for my production environment.
hibernate.search.default.locking_strategy=none
Real Solution
I still need more flexible solution which is better than above “Work Around Solution” & “Temporary Solution” for my development environment, nor deleting the file for each restarting the tomcat.
Please drop in comment if you have some experiences about this issue.