Hallo,
ik ben op zoek naar mensen die iets meer kennis hebben van het OSGi framework dan mezelf en dit gebruiken in combinatie met de hulptool Bndtools.
Ik ben zelf wat aan de slag gegaan met OSGi specification en de informatie die ik kon vinden om mijn eigen project op te zetten, een bundel aan te maken en hier een component in te maken.
Welke software gebruik ik?
Ik gebruik Eclipse 2018-12 en Bndtools
Waar kan mijn werk gezien worden?
Ik heb mijn project gepushed naar Github zodat jullie kunnen zien wat ik gedaan/niet gedaan heb bij onduidelijkheden: https://github.com/BramCoding/bnd-workspace
Wat heb ik op dit moment gedaan?
Ik probeer zo kort en goed mogelijk uit te leggen wat ik op dit moment gedaan heb, en in mijn volgende puntje dan wat ik eigenlijk wil, maar waar ik vast loop.
1) Ik heb een nieuwe bnd-workspace aangemaakt zodat mijn OSGi project gemaakt wordt.
2) Ik heb een nieuwe OSGi project toegevoegd, met andere woorden een OSGi bundle dus: org.bram.demo
3) Ik heb van deze bundle enkele zaken zaken ingesteld die er weinig toe doen: versie, naam, ..
4) Dan heb ik voor deze bundle een package aangemaakt: org.bram.demo
5) Dan heb ik in deze package 2 klasses gemaakt: DemoComponent.java en DemoComponent2.java. De bedoeling hiervan is dat ik hier eens een Component ga aanmaken en kijken of dat lukt.
6) In de bnd.bnd van org.bram.demo heb ik geen Export-Packages toegevoegd. Wel heb ik bij het Build Path osgi.core, osgi.annotation en osgi.cmpn toegevoegd (om Component te kunnen maken). Zie hieronder:

7) Ik heb de klasses DemoComponent en DemoComponent2 vervolledigd zodat de Component aangemaakt wordt bij het opstarten van de bundel:


8 ) ik maakte een run.bndrun bestand aan waar de Resolving gebeurt. Ik heb mijn Run Requirements en na het Resolven ook mijn Run Bundles:


9) Ik start het project op, en kan zien dat mijn gemaakte bundle actief is in de Gogo shell + als ik activeer of deactiveer van deze bundle dan starten en stoppen de twee Components:

Wat is dan nu de bedoeling/het probleem?
Het is de bedoeling dat ik nu niet via de Bndtools GUI de Resolver zijn werk laat doen, maar dat ik de Resolver vanuit mijn code oproep. Dit is omdat ik verder in mijn project at runtime requirements wil toevoegen die dan ook moeten Resolved worden.
Ik denk (aangezien ik via Bndtools werk) dat ik dit het makkelijkste kan via de Resolver van Bnd. Op hun Github is een heleboel code te vinden die ik kan gebruiken: https://github.com/bndtools/bnd.
Zo zien we bijvoorbeeld biz.aQute.resolve.
Ik wil deze bundle dus graag gaan gebruiken zodat ik de Resolver kan oproepen vanuit mijn code. Echter loop ik hier helemaal vast. Ik typ hieronder even mijn stappenplan uit wat ik denk dat er moet gebeuren:
1) PROBLEEM 1: Deze biz.aQute.resolve-bundle moet ik mijn Local Repository geraken in mijn eigen project. Ik vond via deze FAQ-link al dat dit gewoon via drag-and-drop kon (https://bndtools.org/faq.html). Probleem is, als ik de bnd github repository clone, dat deze bundles geen .jar files zijn, en ik deze dus niet als bundle kan inladen in mijn eigen project? Hoe kan ik dan gebruik maken van deze bundles?
2) PROBLEEM 2: Hierna veronderstel ik dus dat ik deze bundle biz.aQute.resolve zal moeten toevoegen aan het build path van mijn eigen gemaakte bundle org.bram.demo. Hierdoor zou ik toegang moeten krijgen tot de klassen en methoden die de biz.aQute.resolve-bundle heeft.
Ik ben dus al eens gaan kijken in de klasses die in deze biz.aQute.resolve-bundle zitten, maar ik ben nog niet helemaal mee hoe dit in elkaar zit.
Een goed startpunt is volgens mij de klasse BndResolver.java, deze implements Resolver (van OSGi zelf dan denk ik?). Deze heeft een methode resolve die als argument een ResolveContext object nodig heeft. Deze heeft ook een methode resolveDynamic maar dat is voor mij (nog) niet belangrijk volgens ik gelezen heb. Voor deze code, zie hieronder:

Ik zal dus een BndResolver-object aanmaken en moet hiermee dan de resolve methode uitvoeren. Hiervoor heb ik dus dat ResolveContext-object nodig en daar loop ik dan ook vast qua denkwijze.
Ik ga dan door naar de klasse AbstractResolveContext.java omdat deze extend van ResolveContext. In deze klasse zit dan heel veel methodes waar ik nog geen vat op heb wat deze doen/kunnen doen/moeten doen.
Mijn voornaamste vraag dus: is hier iemand met wat meer OSGi en Bnd ervaring die mij de goede weg kan opsturen? Ik loop op dit moment helemaal vast en ben overweldigd door de grote happen code die plots beschikbaar worden maar waarmee ik niet weet wat te doen.
Een kleine duw in de goede richting, of het praktisch voorbeeld zou heel mooi zijn, aangezien ik zelf nog geen voorbeeld heb gevonden van iemand die hetzelfde als mij probeert (Resolver oproepen vanuit code).
Hopelijk is het wat duidelijk en voldoende informatie, zo niet dan vul ik het graag nog wat verder aan.
Alvast bedankt!
ik ben op zoek naar mensen die iets meer kennis hebben van het OSGi framework dan mezelf en dit gebruiken in combinatie met de hulptool Bndtools.
Ik ben zelf wat aan de slag gegaan met OSGi specification en de informatie die ik kon vinden om mijn eigen project op te zetten, een bundel aan te maken en hier een component in te maken.
Welke software gebruik ik?
Ik gebruik Eclipse 2018-12 en Bndtools
Waar kan mijn werk gezien worden?
Ik heb mijn project gepushed naar Github zodat jullie kunnen zien wat ik gedaan/niet gedaan heb bij onduidelijkheden: https://github.com/BramCoding/bnd-workspace
Wat heb ik op dit moment gedaan?
Ik probeer zo kort en goed mogelijk uit te leggen wat ik op dit moment gedaan heb, en in mijn volgende puntje dan wat ik eigenlijk wil, maar waar ik vast loop.
1) Ik heb een nieuwe bnd-workspace aangemaakt zodat mijn OSGi project gemaakt wordt.
2) Ik heb een nieuwe OSGi project toegevoegd, met andere woorden een OSGi bundle dus: org.bram.demo
3) Ik heb van deze bundle enkele zaken zaken ingesteld die er weinig toe doen: versie, naam, ..
4) Dan heb ik voor deze bundle een package aangemaakt: org.bram.demo
5) Dan heb ik in deze package 2 klasses gemaakt: DemoComponent.java en DemoComponent2.java. De bedoeling hiervan is dat ik hier eens een Component ga aanmaken en kijken of dat lukt.
6) In de bnd.bnd van org.bram.demo heb ik geen Export-Packages toegevoegd. Wel heb ik bij het Build Path osgi.core, osgi.annotation en osgi.cmpn toegevoegd (om Component te kunnen maken). Zie hieronder:

7) Ik heb de klasses DemoComponent en DemoComponent2 vervolledigd zodat de Component aangemaakt wordt bij het opstarten van de bundel:


8 ) ik maakte een run.bndrun bestand aan waar de Resolving gebeurt. Ik heb mijn Run Requirements en na het Resolven ook mijn Run Bundles:


9) Ik start het project op, en kan zien dat mijn gemaakte bundle actief is in de Gogo shell + als ik activeer of deactiveer van deze bundle dan starten en stoppen de twee Components:

Wat is dan nu de bedoeling/het probleem?
Het is de bedoeling dat ik nu niet via de Bndtools GUI de Resolver zijn werk laat doen, maar dat ik de Resolver vanuit mijn code oproep. Dit is omdat ik verder in mijn project at runtime requirements wil toevoegen die dan ook moeten Resolved worden.
Ik denk (aangezien ik via Bndtools werk) dat ik dit het makkelijkste kan via de Resolver van Bnd. Op hun Github is een heleboel code te vinden die ik kan gebruiken: https://github.com/bndtools/bnd.
Zo zien we bijvoorbeeld biz.aQute.resolve.
Ik wil deze bundle dus graag gaan gebruiken zodat ik de Resolver kan oproepen vanuit mijn code. Echter loop ik hier helemaal vast. Ik typ hieronder even mijn stappenplan uit wat ik denk dat er moet gebeuren:
1) PROBLEEM 1: Deze biz.aQute.resolve-bundle moet ik mijn Local Repository geraken in mijn eigen project. Ik vond via deze FAQ-link al dat dit gewoon via drag-and-drop kon (https://bndtools.org/faq.html). Probleem is, als ik de bnd github repository clone, dat deze bundles geen .jar files zijn, en ik deze dus niet als bundle kan inladen in mijn eigen project? Hoe kan ik dan gebruik maken van deze bundles?
2) PROBLEEM 2: Hierna veronderstel ik dus dat ik deze bundle biz.aQute.resolve zal moeten toevoegen aan het build path van mijn eigen gemaakte bundle org.bram.demo. Hierdoor zou ik toegang moeten krijgen tot de klassen en methoden die de biz.aQute.resolve-bundle heeft.
Ik ben dus al eens gaan kijken in de klasses die in deze biz.aQute.resolve-bundle zitten, maar ik ben nog niet helemaal mee hoe dit in elkaar zit.
Een goed startpunt is volgens mij de klasse BndResolver.java, deze implements Resolver (van OSGi zelf dan denk ik?). Deze heeft een methode resolve die als argument een ResolveContext object nodig heeft. Deze heeft ook een methode resolveDynamic maar dat is voor mij (nog) niet belangrijk volgens ik gelezen heb. Voor deze code, zie hieronder:

Ik zal dus een BndResolver-object aanmaken en moet hiermee dan de resolve methode uitvoeren. Hiervoor heb ik dus dat ResolveContext-object nodig en daar loop ik dan ook vast qua denkwijze.
Ik ga dan door naar de klasse AbstractResolveContext.java omdat deze extend van ResolveContext. In deze klasse zit dan heel veel methodes waar ik nog geen vat op heb wat deze doen/kunnen doen/moeten doen.
Mijn voornaamste vraag dus: is hier iemand met wat meer OSGi en Bnd ervaring die mij de goede weg kan opsturen? Ik loop op dit moment helemaal vast en ben overweldigd door de grote happen code die plots beschikbaar worden maar waarmee ik niet weet wat te doen.
Een kleine duw in de goede richting, of het praktisch voorbeeld zou heel mooi zijn, aangezien ik zelf nog geen voorbeeld heb gevonden van iemand die hetzelfde als mij probeert (Resolver oproepen vanuit code).
Hopelijk is het wat duidelijk en voldoende informatie, zo niet dan vul ik het graag nog wat verder aan.
Alvast bedankt!