[Javalist] Classloader anonymous gond
istvan.ketler at lhsystems.com
istvan.ketler at lhsystems.com
2013. Ápr. 19., P, 00:33:33 CEST
Ugye mostanában foglalkoztam hasonló problémával, és a következőre jutottam.
Amitől függ egy plugin, az legyen már betöltve és elindítva mire a tőle függő sorra kerül.
Az egymástól független pluginek betöltési sorrendje teljesen indifferens. Ezek a pluginok egymásról nem tudnak semmit, egymás számára nem léteznek. Akkor miért nem mindegy, hogy milyen sorrendben indulnak? (Ha van egy harmadik plugin amelyik mindkettőtől függ, akkor az meg ugye csak akkor indulhat, ha már a másik kettő elindult, így annak megint mindegy hogy mi volt a sorrend).
Namost OSGi esetén ez nem különbözik, szóval teljesen egyetértek, ne akard befolyásolni, majd a konténer megoldja és a függőségek adta sorrendben jól betölt mindent amit kell.
Azt nem tudom, hogy az OSGi tud-e valamit kezdeni a körkörös hivatkozásokkal. Némi töprengés után arra jutottam, hogy nem kívánok ilyen alkalmazásokat támogatni, és ha ilyen lenne, akkor nem indul a keretrendszerem, dob egy kivételt.
Maga a betöltési algoritmus egyébként egyszerű (így utólag), de azért kellett hozzá egy kis idő amíg végiggondoltam. Hátha valakit érdekel, leírom. Szóval nekem így műxik:
Elindulok a véletlenszerűen megtalált pluginek listáján, és betöltöm/elindítom azokat, akik nem függnek más pluginektől, vagy csak már elindított pluginektől függnek. Ezt ismételgetem addig, amíg ki nem ürül az el nem indított pluginek listája, vagy amíg egy adott iterációban egyáltalán nem tudok egyet sem betölteni. Ha egyet sem tudtam betölteni, akkor az ugye azt jelenti, hogy körkörös függőség van közöttük (vagy missing plugin van, amit persze szintén észreveszek).
Üdv,
Iván
______________________________
István Ketler
Senior Consultant
Lufthansa Systems Hungária Kft.
GUI Service Center
Mobile Solutions Team, Development Center Danube
Neumann János u. 1/e
1117 Budapest
Hungary
Phone: +36 1 887-2815
Fax: +36 1 887-0577
Mobile: +36 30 600-4936
E-mail: istvan.ketler at LHsystems.com<mailto:istvan.ketler at LHsystems.com>
www.LHsystems.com<http://www.lhsystems.com/>
From: javalist-bounces at lists.javaforum.hu [mailto:javalist-bounces at lists.javaforum.hu] On Behalf Of Gábor Lipták
Sent: Thursday, April 18, 2013 11:27 AM
To: Java lista
Subject: Re: [Javalist] Classloader anonymous gond
Sziasztok!
A runlevel megadása kézzel kerülendő. Normális esetben az ember a függőségek adta természetes sorrendre kellene hogy támaszkodjon.
Gábor
2013. április 18. 10:55 István Székely írta, <istvan.szekely at i-logic.hu<mailto:istvan.szekely at i-logic.hu>>:
Hali,
Én csak az Equinoxot ismerem, Felix-szel még nem volt dolgom.
1. Van rá hatásod, meg lehet adni run level-eket. Amiknek kisebb, azt hamarabb indítja. Azon belül nem vagyok biztos a sorrendben, de szerintem abban a sorrendben indulnak, ahogy a konfigban felsorolod, és szerintem az indulás nem párhuzamos. Valami rémlik, hogy a bundle activator futása ne tartson sokáig, mert addig blokkolja a többi szálat.
2. Úgy gondolom, elvben igen, de az Equinox a plugins könyvtárban keres (és gondolom, a dropins-ben, pont, mint ahogy az Eclipse is teszi).
Üdv,
Stivi
On 2013-04-18 02:14, Gábor Garami wrote:
Koszonom a doksikat mindkettotoknek, kezd oszladozni a homaly. Amit nem ertek:
1) a pluginek akkor ezek szerint a fuggosegek fuggvenyeben kialakulo sorrendben, ezen belul pedig parhuzamosan indulnak
2) a tutorialok egy kicsit kihagyjak az "install" reszt, Elvben a bundle-t alkoto jar a classpathen akarhol lehet? Vagy van valami framework-fuggo specko mappa?
Egyebkent tetszos a dolog, az LDAP alapu query-k mindig is tetszettek, bar a logikajukat szokni kell.
Garami Gábor
E-mail: gabor.garami at hron.me<mailto:gabor.garami at hron.me>
Tel: +36 20 235 9621<tel:%2B36%2020%20235%209621>
MSN: hrgy at vipmail.hu<mailto:hrgy at vipmail.hu>
Skype: hron84
2013/4/17 Zsombor <gzsombor at gmail.com<mailto:gzsombor at gmail.com>>
Pontosan :) Elég pár interfacet használnod, és becsomagolnod a kész cuccot egy jar-ba, megfelelő Manifest fileal felszerelve, és máris OSGI fejlesztőnek mondhatod magadat :)
Zs
2013/4/17 Bence Oláh <bence.olah at gmail.com<mailto:bence.olah at gmail.com>>
Hali!
Az Eclipse konkrétan csak kényelmi funkciót nyújt az OSGI fejlesztéshez, ráadásul van más OSGI implementáció is, mint az Equinox ami Eclipse alatt fut, pl az Apache Felix. A neten nagyon sok info van a témában, pl az alkalmazás szerverek egy része osgi compliant.
http://stackoverflow.com/questions/16140/whats-the-best-way-to-get-started-with-osgi
http://www.sonatype.com/books/mcookbook/reference/osgi.html
Üdv
Bence
2013/4/17 Gábor Garami <gabor.garami at hron.me<mailto:gabor.garami at hron.me>>
Khmmm... ennel picit tobbre szamitottam... :-)
Ugy ertem, hogy van vele tapasztalat is? Hogy mukodik? Maven-nel lehet ilyet?
Garami Gábor
E-mail: gabor.garami at hron.me<mailto:gabor.garami at hron.me>
Tel: +36 20 235 9621<tel:%2B36%2020%20235%209621>
MSN: hrgy at vipmail.hu<mailto:hrgy at vipmail.hu>
Skype: hron84
2013/4/17 Zsombor <gzsombor at gmail.com<mailto:gzsombor at gmail.com>>
Persze
2013/4/17 Gábor Garami <gabor.garami at hron.me<mailto:gabor.garami at hron.me>>
Van lehetoseg OSGi fejlesztesre Eclipse-tol eltero IDE alatt is, pl IntelliJ?
Garami Gábor
E-mail: gabor.garami at hron.me<mailto:gabor.garami at hron.me>
Tel: +36 20 235 9621<tel:%2B36%2020%20235%209621>
MSN: hrgy at vipmail.hu<mailto:hrgy at vipmail.hu>
Skype: hron84
2013/4/17 István Székely <istvan.szekely at i-logic.hu<mailto:istvan.szekely at i-logic.hu>>
Szia,
Pontosan 0 db XML-re van szükséged (legalábbis Equinox alatt biztosan).
A konténer pedig ennyi:
104K org.eclipse.equinox.common_3.6.0.v20110523.jar
32K org.eclipse.equinox.event_1.2.100.v20110502.jar
48K org.eclipse.equinox.launcher_1.2.0.v20110502.jar
212K org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.100.v20110505
1,4M org.eclipse.osgi_3.7.0.v20110613.jar
72K org.eclipse.osgi.services_3.3.0.v20110513.jar
24K org.eclipse.osgi.util_3.2.200.v20110110.jar
Amúgy amit Iván írt, az elég meggyőző, úgyhogy befejezem. :)
Üdv,
Stivi
On 2013-04-17 14:33, Gábor Garami wrote:
Nekem se jott be az OSGi, nekem meg kevesebb cuccom van, mint neked, plusz, en nem annyira kedvelem az XML-ezest.
A JSPF ( https://code.google.com/p/jspf/ ) egy egesz jo kis cucc, par perc alatt tanulhato, annotacio alapu tortenet. Just works.
Egy pelda (ehm... ) app: http://git.hron.me/?p=hron84/jtranslate.git;a=tree
Foleg a jtranslate-app es a jtranslate-google modulok fognak teged erdekelni. Az API-bol csak a me.hron.jtranslate.core.TranslationServiceFactory erdekes, ez az, ami felizgatja a plugin frameworkot.
Garami Gábor
E-mail: gabor.garami at hron.me<mailto:gabor.garami at hron.me>
Tel: +36 20 235 9621<tel:%2B36%2020%20235%209621>
MSN: hrgy at vipmail.hu<mailto:hrgy at vipmail.hu>
Skype: hron84
2013/4/17 <istvan.ketler at lhsystems.com<mailto:istvan.ketler at lhsystems.com>>
Sziasztok,
just for the record:
Természetesen én voltam a ló, de nagy. A jarban lévő jar fájlokat kitömörítem egy temp katalógusba, amit úgy hozok létre ha még nem volt. Azt akarom, hogy megálláskor törlődjék ez a katalógus. Ezért az egész keretrendszer exception environment-ben van, ha nem tud elindulni, a törlés automatikus. Namost valamiért a törlést áttettem a finally-ba, így amikor az indító thread megállt, jól letörölte a temp dirt. Az egyébként üres volt, de a class loader ezt mégis észrevette, és becsukta magát, attól kezdve nem töltött semmit. Finally-ból a törlés visszakerült a hibaágba, és megy mint a parancsolat... De ehhez kellett egy debuggolható rt.jar, mert az oracle fene nagy bölcsességében törölte a debug infókat. Legalább egy napot megtakarított volna vele ha végigkövethettem volna már sokkal korábban hogy mi történik.
Ami a kerék újra feltalálását illeti...
Szeretem az OSGi-t, de ugye akkor kell egy konténer, amit nem annyira akarok. Az eclipse esetén meg asszem kell az equinox, az emf core, az application model és barátai, meg a 4.0 workbench. Utána kezdhetem írni a saját bigyóimat, de eddigre már van néhány tucat jar fájlom. Mivel pluginem van összesen talán 40, meg használok vagy 8-10 3rd party apit, így az eclipse rögvest megduplázná a disztribúciómat.
Kliens oldali keretrendszer kell. Ha letörlök egy jar fájlt (plugint), akkor minden gomb és egyéb hivatkozás tűnjön el vele együtt automatikusan. Ha beteszek egyet, akkor jelenjenek meg a gombok, menük, satöbbi hozzá, szintén "maguktól". (Na jó, újraindítás azért kelljen hozzá, de semmi konfig fájl buzerálás.) Legyen context, és változzék a menü/toolbar struktúra a contexttől függően. A plugin és a libjei egyetlen jar fájlként legyenek deployolhatók (jarban jar). Van még néhány ilyen követelmény. Amit lehetett, azt készen vettem (Jide action és docking framework), de az application framework-jük már nem tudja mindazt amit szeretnék. Szóval azért körüljártam ezt a problémát, és sorra az összes opciót kikukáztam, maradt a saját keretrendszer. Ami amúgy 24 osztályból és 6 interfészből áll, és ebben a logolási szolgáltatás is benne van, meg a három saját exception osztályom is. Adok még hozzá 5 API-t (jide action, common, components, és dock, meg a log4j), ez összesen 6 jar. És igen, van extension is (kétféle - nyújtott szolgáltatás amire elő lehet fizetni, illetve opcionális szolgáltatási pontra való becsatlakozás is). A plugin csak azon más plugint látja amelyiktől függ. Satöbbi. Mindeközben ezzel a két nap szívással együtt is megáll 100 emberóra alatt a fejlesztés (tesztelés included).
Köszi, sziasztok, jó éjt!
Iván
______________________________
István Ketler
Senior Consultant
Lufthansa Systems Hungária Kft.
GUI Service Center
Mobile Solutions Team, Development Center Danube
Neumann János u. 1/e
1117 Budapest
Hungary
Phone: +36 1 887-2815<tel:%2B36%201%C2%A0887-2815>
Fax: +36 1 887-0577<tel:%2B36%201%C2%A0887-0577>
Mobile: +36 30 600-4936<tel:%2B36%2030%C2%A0600-4936>
E-mail: istvan.ketler at LHsystems.com<mailto:istvan.ketler at LHsystems.com>
www.LHsystems.com<http://www.LHsystems.com>
-----Original Message-----
From: javalist-bounces at lists.javaforum.hu<mailto:javalist-bounces at lists.javaforum.hu> [mailto:javalist-bounces at lists.javaforum.hu<mailto:javalist-bounces at lists.javaforum.hu>] On Behalf Of István Székely
Sent: Tuesday, April 16, 2013 10:58 AM
To: javalist at lists.javaforum.hu<mailto:javalist at lists.javaforum.hu>
Subject: Re: [Javalist] Classloader anonymous gond
Szia,
Ha már itt tartunk: nem kell neked teljes Eclipse RCP, de én a helyedben biztosan OSGi vonalon indultam volna el. Pont ezt az osztálybetöltősdit dolgozták ki nagyon szépen. Minden ilyen problémát levenne a helyedről.
Nekünk van egy stand-alone OSGi alkalmazásunk, sima parancssoros program, nincs UI, semmi nehézsúlyú komponens. Equinox-szal szépen működik évek óta.
Üdv,
Stivi
On 2013-04-15 19:43, istvan.ketler at lhsystems.com<mailto:istvan.ketler at lhsystems.com> wrote:
> A Jide action és docking framework-öt használom. Plugin framework egy sem jó; van túl nagy (eclipse, netbeans) és van olyan is amelyik elég béna (jpf), ráadásul halott a projekt már közel 10 éve. Amúgy más funkcionalitás is kell, ez is mellette szól.
_______________________________________________
Javalist mailing list
Javalist at lists.javaforum.hu<mailto:Javalist at lists.javaforum.hu>
http://lists.javaforum.hu/mailman/listinfo/javalist
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20130418/5af2f398/attachment.html>
További információk a(z) Javalist levelezőlistáról