Mrkni se na wiki, OSGI je jina technologie nez Servlety a jina nez Spring IoC.
Zkracene a zjednodusene, Servlet je java Class, ktera implementuje Servlet rozhrani a Servlet Container ji spousi a ridi zivotni cyklus. Vystupem servletu je HTTP output (teoreticky muze byt jiny ale pouziva se jenom implementace pro HTTP). Servlet vyuziva funkcionality poskytovane Containerem, napr. DB pool.
Zpoustene servlety jsou napevno v konfiguraci web.xml a pro vymenu Servletu je nutno Tomacata otocit.
Osgi bundle je JAR balik, ktery ma specifikovanou spousteci class, co taky splnuje rozhrani, tusim metoda execute(). Jar balik neni omezeny na HTTP, muze mit prakticky libovolny vystup, napr update v databazi. Prakticky z libovojneho Java kodu udelas bundle jednoduchym wrapperem.
Osgi container (napr. Apache Karaf) muze loadovat, unloadovat bundly za behu, spustene bundly si muzes predstavit jako bezici procesy v Linuxu. Bundly mezi sebou komunikuji a dohromady tvori aplikaci, je to podobny mechanismus jako retezeni utilit v UNIXu pres pipe.
OSGi container muzes klidne zaintegrovat do Tomcatu.
https://dzone.com/articles/embedding-osgi-tomcatNebo do OSGi containeru zabudovat Jettynu jako bundle
https://examples.javacodegeeks.com/enterprise-java/jetty/jetty-osgi-example/Spring (mysleno Spring IoC - Spring ma jinak hromadu jinych subprojektu) slouzi pro injekci Java classes do spoustene aplikace. Aplikace se defacto sestavi pri startu na zaklade Spring konfigurace.
Napriklad pokud potrebujes funkcionalitu
publicinterface TempMeter {
public void saveTemperature(int temperature);
public int loadHistoricTemperature(Date at);
}
Udelas si Java interface, a implementaci, ktera zapisuje do Postgresu, druhou implementaci, ktera zapisuje do Elasticu.
A v konfiguraci Springu definujes, ktera implementace se pouzije, ve svym business kodu mas jenom
@Autowired
private TempMeter tempMeter;
Spring vytvori instanci nakonfigurovane implementace a a injektuje do vyse uvedeneho atributu.
A opet muzes v ramci Springu spustit embedovanou Jettynu nebo Tomcata.
Nebo pouzivat OSGi ve Springu
https://docs.spring.io/spring-osgi/docs/current/reference/html/app-deploy.html