I'm using Hibernate Search clustering feature in a stand alone Java application (not a webapp).
My problem is the application never stops: many threads are still living.
Both FSMasterDirectoryProvider and FSSlaveDirectoryProvider use a Single Thread Executor to perform the CopyTask.
When the FSSlaveDirectoryProvider.stop() is called, the timer is stopped, but not the Executor in the TimerTask.
Consequence is the process can't stop, because some threads are still living, endlessly.
This happens after the first CopyDirectory task was executed.
My fix was to copy this class in my code, and replace the Executor in TriggerTask class by an ExecutorService in FSSlaveDirectoryProvider class.
The ExecutorService is initialized in the start() method:
And properly shut down in the stop() method: