2 Java-процесса - одно чтение и одна запись в один и тот же файл - PullRequest
2 голосов
/ 18 мая 2011

У меня есть два Java-процесса, которые я хочу полностью отделить друг от друга.

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

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

Лучший способ описать это как простой механизм прямой передачи сообщений, который я мог бы реализовать с помощью файлов.(Проще, чем JMS).

Спасибо, Дэн

Ответы [ 5 ]

1 голос
/ 18 мая 2011

Если вам нужно простое решение, и вы можете предположить, что «переименовать файл» является атомарной операцией (это не совсем так), каждый из процессов может переименовать файл при чтении или записи в него и переименовать при это заканчивается. Другой не найдет файл и будет ждать его появления.

0 голосов
/ 18 мая 2011

Поправь меня, если я не понимаю твою проблему ...

Почему вы не смотрите на блокировки файлов? Когда программа получает блокировку, другая ожидает, пока блокировка не будет снята

0 голосов
/ 18 мая 2011

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

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

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

0 голосов
/ 18 мая 2011

Вы запрашиваете функциональность, которая в точности соответствует JMS.JMS - это API, который имеет много реализаций.Можете ли вы не просто использовать легкую реализацию?Я не понимаю, почему вы думаете, что это "сложно".К тому времени, когда вам удастся надежно внедрить свое решение, вы обнаружите, что справляться со всеми крайними случаями нетривиально.

0 голосов
/ 18 мая 2011

ты имеешь в виду как именованный канал?это возможно, но Java не позволяет создавать каналы, если вы не используете непереносимые процессы

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