Может ли Java взаимодействовать с очередями сообщений System V linux? - PullRequest
6 голосов
/ 20 июня 2011

Мне нужно передать информацию из сценария оболочки (вызывается из приложения на основе linux) в приложение java .

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

Сокеты жесткие , потому что если процесс прослушивания перезапускается, механизма очередей не существует, а для простых реализаций необходимо постоянно создавать новые сокеты (в противном случае сценарий оболочки станет очень сложным с check-and-restart-socket и код очереди).

Я недавно читал об этих очередях сообщений System V / POSIX linux . Я использую Fedora 12 и задаюсь вопросом, есть ли хороший способ настроить эти очереди сообщений и взаимодействовать с ними из Java .

1 Ответ

2 голосов
/ 20 июня 2011

Вы не можете использовать их напрямую, вам нужно было бы сделать немного волшебства JNI, чтобы связать их вместе.

Какие у вас проблемы с трубами? Java видит их как просто общие файлы. Я не использовал их широко, но у меня не было никаких реальных проблем с Pipes. Единственной деталью было то, что считыватель труб должен постоянно открывать трубу, если производители не успевают за ней.

Но если одна из сторон терпит неудачу, другая сторона просто блокирует ожидание восстановления другой.

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

...