Ho creato la mia implementazione JdbcDirectory, anche se farebbe affidamento su JEE6 per sfruttare @Singleton
annotazione. Il codice stesso non è troppo banale da incollare in un post di StackOverflow e presenta ancora alcune limitazioni. La parte fondamentale è che non puoi eseguire più operazioni su una singola transazione utilizzando più thread a causa della semantica di blocco del database.
Osservando la tua implementazione, sembra che tu stia conservando anche i "file" eliminati probabilmente perché avrebbe meno frammentazione nell'archivio del database, mentre il mio avevo rimosso il record stesso.
Ho taggato una versione con cui sto lavorando che sembra abbastanza stabile per i miei carichi di prova. Sentiti libero di fare commenti o suggerimenti su di esso.