[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