Как стать автором
Обновить

Комментарии 3

>CLI (общеязыковая среда исполнения)

Что, пардон?
Вот ведь что интересно. Сделали некую новую модульность для Java. При этом описанная тут проблема существует много лет. И в OSGI у нее даже есть решение, и этому решению тоже много лет. И что самое смешное — оно практически такое же, как описано, только на первый взгляд — там более гибкое.

Т.е., каждый бандл в контейнере может экспортировать и импортировать сервисы. Чтобы это делать, ему нужно импортировать интерфейсные класс сервиса (сам сервис и параметры методов), т.е. внешний API.

А дальше можно:
1) импортировать реализации, как статически, там и в runtime, аж тремя или четырьмя разными способами, включая Spring DM (т.е., это было все сделано еще в те времена)
2) подписаться на события появления и пропадания сервисов (которые естественно могут появляться и пропадать, когда мы деплоим или останавливаем другие бандлы)
3) импортировать 0..1, 1..N или как-то еще, получая 0, 1 или N доступных реализаций.
4) писать разные условия отбора сервисов, в том числе по атрибутам, устанавливаемым в runtime.

И всем этим рулить из веб-консоли Hawtio, например.

Короче, все уже украдено до нас (с).

На самом деле в Java 9 сознательно не использовали OSGI для модульности по вполне определенным причинам. К сожелению, не сильно копался в этой теме, чтобы вступить в дискусию, но вот пару полезных сылок выданых гуглом:
https://2017.jbreak.ru/en/talks/java-9-modules-why-not-osgi/
https://www.quora.com/Will-Java-9-Jigsaw-replace-OSGi

Зарегистрируйтесь на Хабре, чтобы оставить комментарий