2010-08-12 2 views
0

В приложении Im для написания на сервере сервер будет иметь информацию о пользователях, используя базу данных XML. Пользователь admin также сможет писать и читать информацию об этих файлах. Как я могу работать с одновременным доступом к этим файлам? Единственный способ, которым пользователи/администраторы могут читать/записывать эти файлы, - это запрос на сервер (Sockets, TCP connection), поэтому серверу придется это обработать. Что мне делать? Я мог бы синхронизировать методы сервера, но я не хочу, чтобы пользователь USER A получал доступ к его файлам, пока администратор пишет файлы USER B.Работа с одновременным доступом к XML-файлу с использованием java-сервера

ответ

1

Использование базы данных вместо файлов - это мое первое предложение, они уже обрабатывают блокировки.

Вы должны опубликовать пример структуры файла. Это можно сделать, если пользователь A имеет свои данные в файле file.xml, а пользователь b имеет свой файл file.xml, заблокировав данный файл и синхронизируя на нем.

+0

USER A имеет свой собственный файл usera.xml , а USER B также имеет свой файл oen userb.xml ... Как сделать блокировку по файлу? – fredcrs

+1

Вы держите карту блокировок, указывающих на файл. Каждый раз, когда пользователь входит в систему и запрашивает файл, он получает блокировку этого файла (все это синхронизировано). Другой пользователь теперь может войти в систему и запросить блокировку для другого файла, и он не должен мешать первому пользователю. – Jes

+0

Могу ли я заблокировать файл FileChannel, чтобы реализовать карту блокировок? – fredcrs

1

Как говорит Джесс, используйте базу данных.
MySQL Поддерживает XML: http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html
Большинство баз данных поддерживают XML, или вы можете просто использовать VARCHAR, который достаточно длинный, и получить и поместить туда данные. Если это ваш план, возможно, решение NoSQL также будет работать, это просто постоянный HashMap, который поддерживает блокировку записи, а также другие функции.

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

Смежные вопросы