XPages: реализация Java PubSub подписка с потоком - PullRequest
0 голосов
/ 16 октября 2019

Я хотел бы использовать публикацию / подписку в нашем приложении XPages, на Java, например, с Jedis. Приложение работает в многопользовательском режиме, и когда один пользователь вносит некоторые изменения в документ, мы бы хотели, чтобы эти изменения были отражены на экранах других пользователей. Теоретически это можно сделать с помощью PubSub: когда изменение применяется, сообщение «измененный документ» публикуется и отправляется стороне или сторонам, подписавшимся на это сообщение. Абонентскую часть, которую я хотел бы поместить в поток, чтобы подписавшийся объект мог реагировать немедленно при получении сообщения.

Область действия большинства объектов, использующих подписку, - видимость, они должны быть уничтожены при уничтожении видимости. Но что происходит, когда объект заброшен, а поток подписчика все еще там? Например, как я могу сказать JVM, что поток может быть безопасно остановлен и удален сборщиком мусора?

Я еще не попробовал это, поэтому у меня нет кода, который я могу показать, но вот вопросыУ меня есть:

  • Прав ли я, продолжит ли поток продолжать работу даже после уничтожения видоискателя?
  • Есть ли способ создать поток для сбора мусора?
  • или, может быть: есть какой-то API, который делает PubSub в многопоточной среде XPages?

1 Ответ

2 голосов
/ 16 октября 2019

Я сделал что-то подобное несколько лет назад. Вы можете найти пример Pub / Sub с Guava здесь: http://hasselba.ch/blog/?p=2158

Я не уверен, что вы планируете с потоком подписчика, соответственно, какая выгода для вашей идеи.

Но чтобыОтветьте на свои вопросы: Да, поток продолжает работать, пока вы не остановите его. Вы должны использовать ExecutorService, потому что он очень помогает вам в управлении. Если вы хотите, чтобы он был «автоматически» удален, вам просто нужно выполнить «выключение», которое затем обрабатывает все оставшиеся задания и останавливает ThreadPool.

Если вам нужна общесерверная система Pub / Sub,подумайте о плагине OSGi, который запускается / останавливается автоматически с задачей Domino HTTP. Все объекты этого плагина могут быть использованы любым приложением.

...