У меня есть библиотека JVM (назовите ее «tool
»), которая предоставляет услугу. Для некоторых конкретных функций tool
должен вызывать сторонний код. Это происходит путем загрузки пользовательского файла Jar в пользовательский загрузчик классов и вызова пользовательской функции, принимающей список String
s в качестве аргументов. По сути, это базовая инфраструктура плагина.Межъядерная связь в одном JVM
Для моего варианта использования я хотел бы, чтобы два плагина разговаривали друг с другом в рамках этих ограничений. Плагины могут делать все, что они хотят (в том числе нерестовые долгоживущие фоновые потоки), но их вызывают только tool
.
Простейшее решение, которое не сработает для меня, - это «объединить» оба плагина вместе. (Предположим, что приведенный выше сценарий является приведенным выше. У меня очень упрощенные вещи.)
Моим текущим решением было бы изменить оба плагина для открытия TCP-сокетов и сделать номер порта после инициализации. Тем не менее, это похоже на ужасный взлом, потому что они уже работают в одном и том же процессе, и сетевое взаимодействие без проблем осложняет ситуацию.
Мой вопрос: есть ли безболезненная библиотека связи между классами для JVM? Ему просто нужно поддерживать передаваемые строки и собственные типы (массивы, ...), но, самое главное, он должен быть инициализирован с использованием только строк. Тогда было бы возможно, чтобы я упаковал его для tool
и позволял другим плагинам общаться через него. Предположим, что я могу добавлять произвольные зависимости к плагинам, но не к tool
.
Мне пришло в голову, что мой сценарий будет похож на то, чтобы два веб-приложения разговаривали друг с другом на сервере приложений (но без поддержки со стороны сервера). – larsrh
не является ответом, а главным образом основанным на мнениях, но osgi - это способ создания такого приложения. проще, просто поделитесь некоторыми классами между загрузчиками классов. –
@ JérémieB И даже если вы решите не использовать OSGI (зачем вы это делаете?), принцип всех разумных решений одинаковый: полагайтесь на классы, загруженные общим загрузчиком классов, если push нажимает, вы даже можете передавать сообщения JSON в 'String'. – biziclop