Основное различие между OSGi и Java Beans заключается в том, как работает загрузчик классов.В стандартном файле .jar или EJB файл rt.jar или его эквивалент EJB поддерживает путь к классам.Кроме того, если вы используете контейнер для развертывания приложения, у вас может быть несколько механизмов обслуживания пути к классам, которые вызывают проблемы.В результате, например, когда вы создаете файл .war, вы обычно создаете каталог lib со всеми вашими .war-зависимостями .jar.Если в вашем приложении только одна война или .jar, это не так уж плохо.Но представьте себе большое развертывание на предприятии с 100 EJB-компонентами, содержащими Apache-Commons!В итоге вы получите 100 экземпляров Apache-Commons, работающих внутри одного и того же контейнера, высасывающего ресурсы.
В OSGi вы развертываете каждый файл .jar (мы будем называть их пакетами, потому что сейчас это OSGi) вКонтейнер OSGi.Каждый файл .jar предоставляет (экспортирует) пакеты, которые он хочет использовать для других пакетов, а также определяет версию пакета.Кроме того, каждый пакет также прямо заявляет (импортирует) пакеты, которые ему нужны из других пакетов для работы.Контейнер OSGi затем будет управлять всем этим экспортом и сопоставлять его с соответствующим импортом.Теперь у вас есть apache-commons, доступные для каждого из EJB-компонентов, которые вы хотите сделать доступными.Вы покончили с каталогом / lib и теперь ваше приложение занимает меньше ресурсов.
В своем вопросе вы задали вопрос о разнице между компонентной архитектурой и модульной архитектурой.Модульность относится к этому процессу создания каждого пакета в отдельном модуле развертывания и предоставления ему возможности общаться с другими пакетами вместо того, чтобы объединять их все в один массивный файл .jar.