[Java lista] jar file verzió azonosítása
Székely István
istvan.szekely at i-logic.hu
2009. Feb. 2., H, 10:50:59 CET
Sziasztok!
Marai Laszlo wrote:
> On Fri, 30 Jan 2009 22:53:12 +0100
> Tamás Magyar <magyusz at gmail.com> wrote:
>
> Hali!
>
>
>>> Biztos vannak erre kesz megoldasok, szerintem a 'component framework'
>>> kifejezesre kell guglizni. OSGi is valami ilyesmi, lehet, hogy az
>>> helybol jo nektek.
>>>
>> A leírt problémára az OSGi "helyből" nem lesz jó, azt biztosan
>> mondhatom. Az OSGi keretrendszerben futhat egyszerre több verziója
>> ugyanannak a jarnak (bundle), ami szépen hangzik, de nem ezt a
>> problémát akarta a kérdés feltevője megoldani.
>>
Ehhez még annyit fűznék hozzá, hogy amennyiben egy jarnak (bundlinak)
egy időben csak egy verziója létezik a keretrendszerben, a frissítés
akkor sem automatikus. Tegyük fel, hogy van két bundli, x és y, és y
használja x-et (függ tőle). Valamikor az üzemeltetés során új verzió
készül x-ből.
Az új verziót a keretrendszerbe telepíteni kell, ami manuális folyamat
(hacsak nincs olyan csomag, ami egy hot-deployer funkcióját látja el).
Ebben a pillanatban y-ban semmi nem történik. Folytatja a régi x
verzióval a munkáját. Azután uninstalláljuk a régi x-et. Y még mindig a
régi x verziót használja. Minden újonnan feltelepített bundli, ami függ
x-től, már az új x verziót fogja használni.
Y két módon vehető rá x új verziójának használatára. Vagy újraindítjuk
(ilye lehet csinálni OSGi-ban, hogy csak egy bundlit indítunk újra),
vagy pedig kiadunk egy refresh parancsot a konzolon (ami viszont szintén
egy implicit újraindítással jár, de a keretrendszer elvégzi helyettünk).
Még ha ez a frissítgetős folyamat nem is automatikus, az OSGi
haszálatával nagyon sokat lehet nyerni. Mint azt már mások is írták,
teljes mértékben leveszi a vállunkról az osztálybetöltés és újratöltés
problémáját.
> Hat nem tudom, en nem ismerem reszleteiben, csak lattam, hogy kollegak
> mire hasznaltak meg hogy mit csinal pl. az Eclipse-ben. Attol, hogy
> 'futhat' ;) tobb verzioja egy jar-ban, attol meg en ugy latom, hogy
>
Több verzió nem futhat egy jarban. Minden verzió egy külön jar.
>> A verzió tárolásának módjaira (és az onnan kiolvasásra) már megvoltak
>> a válaszok. A verzió szám generálását, megfelelő helyre beírását meg
>>
OSGi-ban a verzió tárolása szabványos, a Bundle-Version manifest
fejlécben kell tárolni. API biztosít eszközöket a verzió lekérdezéséhez:
http://www.osgi.org/javadoc/r4v41/org/osgi/framework/Bundle.html#getHeaders()
+1 érv az OSGi mellett.
> Az addig rendben van, az izgalmas resz ott kezdodik, hogy
> dinamikusan ujratoltsd a kerdeses osztalyokat. Kell egy kis classloader
> buveszkedes, persze nem megoldhatatlan.
>
Erről a classloader bűvészkedésről már az előbb írtam. Még annyi, hogy
arra is van API, hogy a csomagok frissítését elvégeztethessük a
keretrendszerrel.
http://www.osgi.org/javadoc/r4v41/org/osgi/framework/BundleListener.html
http://www.osgi.org/javadoc/r4v41/org/osgi/service/packageadmin/PackageAdmin.html#refreshPackages(org.osgi.framework.Bundle[])
+1
Üdv,
Stivi
További információk a(z) Javalist levelezőlistáról