Я вижу OSGi как технологию структурирования. Вы можете использовать его для определения структуры компонентов вашего приложения. Таким образом, все ваше приложение представляет собой набор OSGi-пакетов. Следовательно, взаимодействие не является проблемой, просто различные части вашего приложения взаимодействуют обычным образом.
[Отредактировано после уточнения комментария.]
У вас есть фундаментальное решение: ваш код OSGi будет выполняться в том же процессе, что и исходный, или в отдельном процессе?
Разделение подразумевает свободу структурировать новый код по вашему желанию, используя OSGi, но за счет сложности межпроцессного взаимодействия и снижения производительности. Вполне вероятно, что в конечном итоге вы внесете существенные изменения в существующее приложение, чтобы поддерживать удаленное взаимодействие в той или иной форме. Я не считаю это хорошим подходом, если только ваш код OSGi не является неким сервисом многократного использования, который могут использовать другие удаленные клиенты.
Если в том же процессе я скажу, что вам нужно прикусить пулю и сказать, что это будет приложение OSGi. Количество усилий, чтобы взять существующее приложение и запустить его в OSGi, не должно быть чрезмерным.
Предположим, вы рассматривали существующее приложение как один огромный пакет OSGi? Будет некоторая работа по инициализации, но все ли будет «просто работать»? Если вы сделаете это в качестве первого шага, то реальная ре-архитектура и модульность существующего приложения будут отложены. Затем вы просто выставляете интерфейсы, необходимые вашим новым модулям, и, где необходимо, используете сервисы, предоставляемые новыми модулями. Вы сразу получаете преимущества OSGi, структурируя зависимости.