У нас есть локально разработанное тройное хранилище на основе b-деревьев, которое я хочу использовать для постоянного хранения в ряде приложений сервлетов. Вместо того, чтобы встраивать файлы индекса b-дерева в сервлет .war, я хотел бы хранить их в известном месте, и чтобы сервлеты обращались к ним напрямую. Это все работает в Jetty, но вызывает исключение безопасности, когда я пробую это в Tomcat. Мне сказали, что модель безопасности Tomcat требует явных разрешений сервлету для доступа к файлам вне дерева каталогов, куда распаковывается .war. Если я правильно понял документацию Tomcat (версия 5.5), следующее, добавленное к catalina.policy
, должно позволить сервлету получить доступ к каталогам, в которых находятся индексные файлы:
grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-"
{
permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete";
}
Однако я все еще получаю исключение безопасности:
java.io.FileNotFoundException:
/var/data/tdb/kb/node2id.idn (Permission denied)
at java.io.RandomAccessFile.open(Native Method)
...
Чтобы отметить очевидные глупые ошибки: я проверил, что файлы индекса находятся в правильном месте, с правильными разрешениями и не повреждены. Любые предложения или намеки на то, что я ошибся в настройках безопасности, будут с благодарностью приняты.