|
|
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Не пойму, как мне конфиг эксклюзивно получить, чтобы несколько копий приложения, запущенных у разных пользователей, не могли его одновременно править? В С++ Билдере у меня так реализовано: Код: plaintext 1. А в Яве что-то найти не могу, что для этого нужно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 15:15:58 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Хмм, кажется наконец-то нашёл пример, спасибо. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 15:20:55 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Хмм, такое ощущение, что это не совсем то что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 16:01:59 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вообще-то это гуглится на раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2012, 16:44:37 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
chpashaвообще-то это гуглится на раз А что толку? В Яве ведь нужно ещё подобрать класс подходящий по интерфейсу, а мне RandomAccessFile не подходит, нужно чтобы InputStream или Reader был, одновременно являясь OutputStream или Writer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 07:22:30 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Нужно чтобы и Properties использовать, и при этом ещё и заблокировать файл перед чтением, считать, обработать, сохранить обновлённые данные, и разблокировать файл. А похоже получается что сначала придётся блокировать в FileInputStream, который читает, потом разблокировать, и снова блокировать в FileOutputStream, чтобы сохранить. Мне не нравится промежуток между разблокированием и блокированием. Как бы что не вышло, с другими копиями приложения. Файл то конфига хранится на сервере, а пользователей много. У них общий файл, из которого они берут очередной номер последовательности, и сохраняют х+1 обратно вместо х. В том и суть, что без блокировки иногда бывает, что у двоих юзеров приходит одинаковый номер. Коллизия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 07:54:11 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Как вообще в Яве обычно ищется цепочка преобразований, которая приведёт куда надо? Я имею в виду примерно вот такое: new Object1(new Object2(new Object3())); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 08:04:28 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Такое ощущение, что следует сделать наследников для InputStream и OutputStream, которые будут прикидываться наследниками, а фактически тупо вызывать методы RandomAccessFile. Изврат, но цель будет достигнута. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 08:36:43 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Чувствую себя извращенцем, но сделал так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 09:33:13 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Почему нельзя вычитать из RandomAccessFile все байты, произведя перед этим все нужные действия для захвата локов на файле, и загрузить потом их с помощью какого нибудь ByteArrayInputStream в инстанс Properties? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 10:23:25 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
schwaПочему нельзя вычитать из RandomAccessFile все байты, произведя перед этим все нужные действия для захвата локов на файле, и загрузить потом их с помощью какого нибудь ByteArrayInputStream в инстанс Properties? Давай, попробуй. Я сутки убил, чтобы найти приемлемый вариант. Ничего лучше не нашлось, как сделать этот класс с двумя иннер классами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 10:25:07 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
XDiaBLoДавай, попробуй. Я сутки убил, чтобы найти приемлемый вариант Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ахтунгThe behavior of the file lock is platform-dependent. On some platforms, the file lock is advisory, which means that unless an application checks for a file lock, it will not be prevented from accessing the file. On other platforms, the file lock is mandatory, which means that a file lock prevents any application from accessing the file ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 12:37:17 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
chpasha, Вот-вот, мудрёная штука у тебя вышла. Пока найдёшь обходной путь блин, проще уже такой адаптер чтоль сделать, как я тут привёл. Но всё равно спасибо, еслиб я ещё не сделал, то использовал бы. И кстати lock() от tryLock() как я понял отличается тем, что tryLock сразу отзывается, а lock ждёт пока файл разлочится? Так мне как раз ждать нужно, пока файл освободится. А насчёт того, что платформенно-зависимо, я уже протестировал, под виндой если файл лочится этим приложением, то другая копия этого приложения, ждёт пока снимется блокировка. В принципе так и нужно. Допустим если копий будет запущено до нескольких десятков, на разных компьютерах в сети, то они нормально смогут работать с одним конфиг-файлом. Так как он лочится то на доли секунды, коллизии редки, но хочется избежать их раз и навсегда. Одно не уверен, а что если программа где-то глюканёт и повиснет, когда залочка снимется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 12:52:30 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
XDiaBLochpasha, Вот-вот, мудрёная штука у тебя вышла. мудренная? ну ты жжешь. XDiaBLo Пока найдёшь обходной путь блин да ничего там не надо было искать. просто ты видимо еще в java io плаваешь. XDiaBLotryLock сразу отзывается, а lock ждёт пока файл разлочится? да. еще tryLock еще можно задать время ожидания. XDiaBLoОдно не уверен, а что если программа где-то глюканёт и повиснет, когда залочка снимется? я бы вообще задумался о том, не пора ли использовать какую-то (возможно embedded) базу данных, которая автоматом обеспечит атомарность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:09:22 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
chpashaXDiaBLochpasha, Вот-вот, мудрёная штука у тебя вышла. мудренная? ну ты жжешь. XDiaBLo Пока найдёшь обходной путь блин да ничего там не надо было искать. просто ты видимо еще в java io плаваешь. XDiaBLotryLock сразу отзывается, а lock ждёт пока файл разлочится? да. еще tryLock еще можно задать время ожидания. XDiaBLoОдно не уверен, а что если программа где-то глюканёт и повиснет, когда залочка снимется? я бы вообще задумался о том, не пора ли использовать какую-то (возможно embedded) базу данных, которая автоматом обеспечит атомарность. Ясен пень плаваю, яж не синьор джава девелопер. Эмбеддед куда? И ради чего, небольшой кучки циферок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 13:11:09 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
XDiaBLoЭмбеддед куда? никуда. без централизированного сервера. например firebird embedded или sqlite. XDiaBLo И ради чего, небольшой кучки циферок? ну а так ты фактически лепишь свою файловую бд с сомнительной реализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:05:26 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
chpashaXDiaBLoЭмбеддед куда? никуда. без централизированного сервера. например firebird embedded или sqlite. XDiaBLo И ради чего, небольшой кучки циферок? ну а так ты фактически лепишь свою файловую бд с сомнительной реализацией. Ну как никуда? Тут имеем приложение, запускаемое с разных компьютеров, а нумерация нужна сквозная. И под эту тему сервер поднимать надо получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:07:49 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
XDiaBLoНу как никуда? Тут имеем приложение, запускаемое с разных компьютеров, а нумерация нужна сквозная. И под эту тему сервер поднимать надо получается. не получается. для упомянутых реализаций сервер не нужен. нужны лишь клиентские библиотеки, которые автоматом обеспечат и эксклюзивность доступа и атомарность операций. но вообще да, сервер надежнее, потому что как будут работать локи на сетевом диске х.з. (это кстати касается и FileChannel.lock). впрочем поднимать, это слишком громко сказано. P.S. альтернативно можно создавать пустой лок-файл перед доступом к редактируемому файлу (и проверять его существование, если уже создан, значит кто-то другой пишет в файл) и удалять его по завершении записи. если какой-то процесс завис (или сеть упала) не удалив файл, любой другой процесс может удалить этот файл если его возраст превышает какой-то разумный срок. тоже наколенка, но более менее failsafe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:28:57 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
chpashaP.S. альтернативно можно создавать пустой лок-файл перед доступом к редактируемому файлу (и проверять его существование, если уже создан, значит кто-то другой пишет в файл) и удалять его по завершении записи. если какой-то процесс завис (или сеть упала) не удалив файл, любой другой процесс может удалить этот файл если его возраст превышает какой-то разумный срок. тоже наколенка, но более менее failsafe Во, такой вариант поинтереснее будет. Я даже на секунду задумывался о нём. Но его я внедрю, если вдруг начнутся проблемы с тем вариантом. Итак проект затягиваю, завтра бы сдать его уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:31:08 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
XDiaBLoесли вдруг начнутся проблемы с тем вариантомони почти наверняка возникнут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:43:37 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
chpashaXDiaBLoесли вдруг начнутся проблемы с тем вариантомони почти наверняка возникнут У меня сейчас такой же вариант функционирует в программе, написанной на С++, год работает, интенсивно, и ничего не возникает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 14:45:14 |
|
||
|
Эксклюзивный доступ к файлу
|
|||
|---|---|---|---|
|
#18+
XDiaBLochpashaпропущено... они почти наверняка возникнут У меня сейчас такой же вариант функционирует в программе, написанной на С++, год работает, интенсивно, и ничего не возникает.Если какая-нибудь неприятность может произойти, она случиться. (с) Мерфи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2012, 15:27:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37873294&tid=2131397]: |
0ms |
get settings: |
19ms |
get forum list: |
22ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
67ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
101ms |
get tp. blocked users: |
2ms |
| others: | 344ms |
| total: | 595ms |

| 0 / 0 |
