Где веб-приложение Java должно хранить свои данные? - PullRequest
18 голосов
/ 01 июля 2010

Мое веб-приложение Java (myapp.war) развертывается путем помещения его в директорию webapps на Tomcat в Ubuntu 10.04.

Это приложение должно сохранять некоторые данные в файлах.Но пользователь, который запускает Tomcat (tomcat6), не имеет доступа на запись к домашнему каталогу /usr/share/tomcat6/ и доступа на запись к текущей рабочей директории /var/lib/tomcat6/, поскольку оба принадлежат root.

Так где же веб-приложение должно хранить свои данные?Я надеюсь, что это не извлеченный архив в директории webapps.Этот может быть удален очень легко случайно.И Tomcat может быть настроен, а не для извлечения файлов .war.Тогда не будет извлеченной директории.

Возможно, /var/lib/tomcat6/ должен принадлежать пользователю tomcat6 и это ошибка в Ubuntu?

Ответы [ 5 ]

4 голосов
/ 01 июля 2010

Если файлы не должны сохраняться дольше, чем жизненный цикл контекста сервлета, контейнер сервлета предоставляет личный временный каталог для каждого контекста сервлета, указанный атрибутом javax.servlet.context.tempdir.

См. Спецификация сервлета 2.3 , Глава 3 Контекст сервлета

3.7.1 Временная работа Справочники

Удобство временное каталог хранения требуется для каждого контекст сервлета. Контейнеры для сервлетов должен предоставить частный временный каталог на контекст сервлета и сделать его доступным через javax.servlet.context.tempdircontext приписывать. Объект, связанный с атрибут должен быть введите java.io.File

2 голосов
/ 02 июля 2010

Отвечая на свой вопрос, Витек заявил /var/lib/tomcat6/webapps/ is writable - по крайней мере, об установке его версии Ubuntu. В моей системе RHEL 5.2 /var/lib/tomcat<X> даже не существует, поэтому нет подкаталога webapps для записи или нет, что приводит к моему ответу.

Q: Где веб-приложение Java должно хранить свои данные?
A: Где бы вы ни настроили его для хранения своих данных.

Сделать расположение настраиваемым, в файле web.xml как <context-param> или в файле myApplication.properties.

  • Я могу положить его туда, где я хочу, на свою коробку, системные администраторы могут положить его туда, куда они хотят, в производственной системе.
  • Вы можете передумать позже.
  • Вам не нужны символические ссылки (которые уже магически исчезли передо мной, сломав систему.)
  • Вы можете иметь несколько наборов тестовых данных и просто указать конфигурацию на ту, которая вам нужна.
  • Вы можете разместить его там, где есть место на диске.
  • Вы собираетесь передумать позже.
2 голосов
/ 01 июля 2010

Я думаю, это зависит от того, с какими данными вы имеете дело. В большинстве случаев данные попадают в базу данных просто потому, что CRUD-код можно быстро и легко выполнить. Если вы хотите сохранить локализованную пользовательскую конфигурацию и вам не важно, насколько она переносима, возможно, вы можете хранить ее под user.home , я сделал это для одного из моих проектов, и это прекрасно работает. Несмотря на это, я действительно не думаю, что есть лучшая практика в этом, и база данных, кажется, является наиболее очевидным выбором, потому что вы можете выполнять множество различных задач, и большинство из них бесплатны для начала. :)

2 голосов
/ 01 июля 2010

Я нашел решение на Launchpad. /var/lib/tomcat6/webapps/ доступно для записи. Это означает, что работает следующее:

File myFile = new File("webapps/myfile.txt");
0 голосов
/ 01 июля 2010

Я не видел каких-либо конкретных указаний о том, где вы должны хранить такие данные локально - возможно, потому что вы обычно храните такие данные в базе данных.

Когда мне нужно хранить такие быстрые и грязные данные, я сохраняю их в файловой системе специально для этих данных, чтобы изолировать их от других областей, где они могут попасть в другую деятельность. До сих пор не было проблем с подходом. Кроме того, если это важно, убедитесь, что вы храните его где-то, где вы сохраняете его:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...