Ответ 1
Я бы сказал, что OSGi - это то, что вы должны рассмотреть. У меня нет опыта в этой области, но вы можете найти примеры и описания в stackoverflow и других онлайн-ресурсах.
Проблемы с пониманием всей экосистемы OSGi Web
В руководстве " Введение в OSGi" используются Apache Felix и Apache Karaf, и оно дает, казалось бы, простое руководство по созданию пакетов услуг. Из учебника:
Open Service Gateway Initiative - это спецификация, определяющая компонентную систему на основе Java. В настоящее время им управляет OSGi Alliance, а его первая версия датируется 1999 годом. С тех пор он зарекомендовал себя как отличный стандарт для компонентных систем и широко используется в настоящее время. Например, Eclipse IDE является приложением на основе OSGi.
По-видимому, более сложным учебным пособием может быть OSGi Modularity - Tutorial
ServiceLoader предоставляет A simple service-provider loading facility.
но выглядит упрощенно для ваших нужд. Он работает для весенней загрузки, но, похоже, не предназначен для корпоративных приложений. Простой пример этого так:
Framework
вашего приложения:
public class FrameworkClass {
public static void main(String[] args) {
new FrameworkClass().run();
}
private void run() {
ServiceLoader<IFrameworkModule> modules = ServiceLoader.load(IFrameworkModule.class);
modules.forEach(IFrameworkModule::initialize);
modules.forEach(IFrameworkModule::execute);
}
}
Интерфейс, который реализуют сервисные модули:
public interface IFrameworkModule {
public void initialize();
public void execute();
}
Модуль - в отдельной банке - для приложения
public class Module1 implements IFrameworkModule {
@Override
public void initialize() {
System.out.println("initialize module1");
}
@Override
public void execute() {
System.out.println("execute module1");
}
}
которому нужен файл framework.IFrameworkModule
папке META-INF/services
fmodule.Module1
Но учитывая сложность вашего приложения, я думаю, что имеет больше смысла использовать OSGi.