OSGI vs Servletové kontejnery

anonym

OSGI vs Servletové kontejnery
« kdy: 27. 04. 2018, 10:29:57 »
Jaký je rozdíl mezí OSGI a servletovými kontejnerý typu Tomcat, Jetty atp.? Je OSGi v něčem lepší? Proč Spring nepoužívá OSGi?


Youda

Re:OSGI vs Servletové kontejnery
« Odpověď #1 kdy: 27. 04. 2018, 14:27:42 »
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-tomcat
Nebo 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

Re:OSGI vs Servletové kontejnery
« Odpověď #2 kdy: 27. 04. 2018, 14:28:16 »
Řekl bych, že nemá moc smysl to porovnávat - servletové kontejnery jsou na servlety a OSGi je na cokoli. Podívejte se na výklad těch pojmů třeba na wikipedii.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:OSGI vs Servletové kontejnery
« Odpověď #3 kdy: 27. 04. 2018, 18:49:54 »
Řekl bych, že nemá moc smysl to porovnávat - servletové kontejnery jsou na servlety a OSGi je na cokoli. Podívejte se na výklad těch pojmů třeba na wikipedii.
Na wikipedii nemůže mět doplňující otázky.

Re:OSGI vs Servletové kontejnery
« Odpověď #4 kdy: 27. 04. 2018, 20:27:08 »
Řekl bych, že nemá moc smysl to porovnávat - servletové kontejnery jsou na servlety a OSGi je na cokoli. Podívejte se na výklad těch pojmů třeba na wikipedii.
Na wikipedii nemůže mět doplňující otázky.

To je pravda, ale přečíst si ty pojmy v encyklopedii je dobrý začátek. Každopádně Youda to myslím vysvětlil hezky.


OOM

Re:OSGI vs Servletové kontejnery
« Odpověď #5 kdy: 28. 04. 2018, 20:26:41 »
Tomcat netreba otacat, ale apku (redeploy).
S tym osgi - to je pouzitie springu v osgi (nejaky komplikovany bundle). Opacne neviem ci to ma zmysel. Moze osgi container pouzivat spring ked tak.