Мое веб-приложение Java (myapp.war
) ist, развернутый путем размещения его в webapps
direcotry на Tomcat на Ubuntu 10.04.
Это приложение должно сохранить некоторые данные в файлах. Но пользователь, который выполняет Tomcat (tomcat6
) не имеет никакого доступа для записи к корневому каталогу /usr/share/tomcat6/
и никакой доступ для записи к текущей работе direcotry /var/lib/tomcat6/
, так как оба принадлежат root
.
Таким образом, где веб-приложение должно хранить свои данные? Я надеюсь, что это не извлеченный архив в веб-приложениях direcotry. Этот мог быть удален очень легко случайно. И Tomcat может быть настроен, для не извлечения .war файлов. Затем был бы не извлеченный direcotry.
Возможно, /var/lib/tomcat6/
должен принадлежать пользователю tomcat6
муравей это - ошибка в Ubuntu?
Я нашел решение на Launchpad. / var / lib / tomcat6 / webapps /
доступен для записи. Это означает, что работает следующее:
File myFile = new File("webapps/myfile.txt");
Если файлы не должны сохраняться дольше, чем жизненный цикл контекста сервлета, контейнер сервлета предоставляет частный временный каталог для каждого контекста сервлета, указанного атрибутом javax.servlet.context.tempdir
.
См. Спецификация сервлета 2.3 , глава 3 Контекст сервлета
3.7.1 Временная работа Справочники
Удобство временного каталог хранения требуется для каждого контекст сервлета. Контейнеры сервлетов должен предоставить частный временный каталог для контекста сервлета и сделать его доступным через javax.servlet.context.tempdircontext атрибут. Объект, связанный с атрибут должен иметь введите java.io.File
Я не видел никаких конкретных указаний о том, где вы должны хранить такие данные локально - вероятно, потому, что обычно вы храните такие данные в базе данных.
Когда мне нужно хранить такие быстрые и грязные данные, я храню их в файловой системе, специально предназначенной для этих данных, чтобы изолировать их от других областей, где они могут попасть в другие действия. До сих пор у меня не было никаких проблем с этим подходом. Кроме того, если данные важны, убедитесь, что вы храните их там, где есть резервное копирование :)
.Я думаю, это зависит от того, с какими данными вы имеете дело. В большинстве случаев данные попадают в базу данных просто потому, что выполнить CRUD быстро и легко. Если вы хотите сохранить локализованную конфигурацию пользователя и вам все равно, насколько она переносима, возможно, вы можете сохранить ее в user.home , я сделал это для одного из моих проектов, и это отлично работает. С учетом всего сказанного, я действительно не думаю, что в этом есть какая-то лучшая практика, и база данных кажется наиболее очевидным выбором, потому что вы можете выполнять множество различных задач против нее, и большинство из них бесплатны для начала. :)
Отвечая на свой вопрос, Витек заявил, что / var / lib / tomcat6 / webapps / доступен для записи
- по крайней мере, при установке его версии Ubuntu. В моей системе RHEL 5.2 / var / lib / tomcat
даже не существует, поэтому нет подкаталога webapps, доступного для записи или нет, что приводит к моему ответу.
Q: Где веб-приложение Java должно хранить свои данные?
A: Где бы вы ни сконфигурировали его для хранения своих данных.
Сделайте расположение настраиваемым в web.xml как
или в файле myApplication.properties.