In my experience it would first help to look at the library. In my experience most libraries provide a simple registration process in addition to the automatic discovery. A trivial component using a BundleTracker can then handle this specific case.
I’ve seen so many cases where people spend a lot of effort to get a generic solution while a few lines of specific code would be fine. Obviously in this case I’ve not looked. Kind regards, Peter Kriens > On 8 Dec 2016, at 22:20, Daghan ACAY <daghana...@hotmail.com> wrote: > > I do not wish an alternative solution but application note here might give a > fresh perspective http://enroute.osgi.org/appnotes/interceptors.html as an > alternative to weaving. > > Cheers > Daghan > > Sent by MailWise <http://www.mail-wise.com/installation/2> – See your emails > as clean, short chats. > > > > -------- Original Message -------- > From: Christian Schneider <ch...@die-schneider.net> > Sent: Thursday, December 8, 2016 09:20 PM > To: OSGi Developer Mail List <osgi-dev@mail.osgi.org> > Subject: Re: [osgi-dev] Strange issue with enRoute and Aries SPI Fly. > > I think the really problematic thing in Aries-spi is the client side. > On the server side I think it makes sense to look into the bundles and > provide the ServiceLoader services as OSGi services. > > On the client side it only works if Aries-spi does the weaving early enough. > So I wonder if in many cases we could just change the client side and still > profit from the Aries-spi services. > Not sure if this can work for the sound support though. > > Christian > > On 08.12.2016 09:35, Peter Kriens wrote: >> Runtime weaving is always one of the worst programming hacks in existence, I >> would avoid it like the plague at all costs. It looks so attractive but it >> causes so much unexpected pain. >> >> However, you probably can’t. So I guess the like problem is that your UI >> code gets loaded before the weaver is installed. If you weaver uses the OSGi >> API to weave then it registers a Weaving Hook service. What you should do is >> make your GUI code depend on that service, you should make the hook also >> immediate. This will prohibit your code from loading before the weaving >> hooks is established. If you have a domain service that is registered by the >> weaver as it seems depend on that one. >> >> However, absolute best advice is to dump the dynamic weaving solution and >> find a way to register the plugin directly with the SPI. >> >> Kind regards, >> >> Peter Kriens >> >> >>> On 7 Dec 2016, at 18:38, Elliot Huntington <elliot.hunting...@gmail.com >>> <mailto:elliot.hunting...@gmail.com>> wrote: >>> >>> Hi Peter, >>> >>> Yes, I also assume I am running the application without security. I have >>> tested this two ways, one by running the enRoute application directly >>> within Eclipse just as explained in the enRoute tutorials, and also by >>> exporting the enRoute application as a stand alone executable jar file. In >>> both cases the behavior is the same. I agree with your suggestion to >>> eliminate as much as possible to identify what the problem is. Actually, >>> that was my motivation for creating this github project. I wanted to create >>> a SSCCE <http://sscce.org/> to share with others in order to get the help I >>> need to figure this out. >>> >>> In order to make this problem more clear I updated the example >>> (https://github.com/axiopisty/com.github.axiopisty.plarpebu >>> <https://github.com/axiopisty/com.github.axiopisty.plarpebu>) to isolate >>> the code that integrates the SPI Fly dynamic weaving. The latest commit on >>> this project allows the dynamic weaving feature to be configured on or off >>> with a checkbox in the GUI. I tested this quite thoroughly. With dynamic >>> weaving disabled, the MediaPlayer load method works the exact same from >>> either the command line or the GUI. But with dynamic weaving enabled it >>> only works as expected from the command line using the Gogo Shell. >>> >>> The problem is beyond my scope of knowledge or expertise in either OSGi or >>> Apache Aries SPI Fly. This is why I'm reaching out to you experts in the >>> OSGi and Aries communities. >>> >>> Sincerely, >>> Elliot >>> >>> On Tue, Dec 6, 2016 at 2:20 AM, Peter Kriens < >>> <mailto:peter.kri...@aqute.biz>peter.kri...@aqute.biz >>> <mailto:peter.kri...@aqute.biz>> wrote: >>> Since the system is all started up when you press play or use the gogo >>> command this does not look like a start ordering problem. Nor is it a R/C >>> problem because all is satisfied. >>> >>> The path from Gogo must therefore follow a different trajectory. The best >>> way to find these things out is to single step both paths and try to find a >>> difference. It might also help to remove as much functionality as possible >>> to focus on the different paths. I.e. try to remove the weaving to >>> include/exclude that as cause. >>> >>> I assume you run without security? >>> >>> Kind regards, >>> >>> Peter Kriens >>> >>>> On 5 Dec 2016, at 21:48, Elliot Huntington < >>>> <mailto:elliot.hunting...@gmail.com>elliot.hunting...@gmail.com >>>> <mailto:elliot.hunting...@gmail.com>> wrote: >>>> >>>> @BJ Hargrave, >>>> >>>> Yes, I just tested rearranging the items listed in -runbundles to make >>>> sure the ones that should be loaded first are. The problem remains. >>>> >>>> @Raymond Auge, >>>> >>>> I'm having a hard time understanding your response. I think I generally >>>> understand what you're saying, but I don't know what to look for as far as >>>> what should specifically be in the set of requirements/capabilities for >>>> this use case. But I think the essence of your response is that if the >>>> requirements and capabilities are not properly configured in the bundles >>>> then the bundles wont even resolve properly much less activate properly? >>>> >>>> I'm quite certain that I have properly configured the >>>> requirements/capabilities in the media player bundle which depends on the >>>> dynamic weaving bundle, otherwise I don't think loading the MP3 file would >>>> work properly from the gogo shell, which it does. I just don't understand >>>> why it works from the shell but not from the GUI. >>>> >>>> >>>> In case it helps, here is the output of listing the installed bundles in >>>> the framework. I'm assuming that since the ASM, Util, and Dynamic Weaving >>>> bundles are loaded first that the start level configuration is not >>>> required (as indicated in BJ's response). >>>> >>>> G! lb >>>> lb >>>> START LEVEL 1 >>>> ID|State |Level|Name >>>> 0|Active | 0|OSGi System Bundle >>>> (3.10.100.v20150529-1857)|3.10.100.v20150529-1857 >>>> 1|Active | 1|ASM all classes with debug info (5.1.0)|5.1.0 >>>> 2|Active | 1|Apache Aries Util (1.1.3)|1.1.3 >>>> 3|Active | 1|Apache Aries SPI Fly Dynamic Weaving Bundle >>>> (1.0.8)|1.0.8 >>>> 4|Active | 1|tritonus-share (0.3.7.4)|0.3.7.4 >>>> 5|Active | 1|JLayer (1.0.1.4)|1.0.1.4 >>>> 6|Active | 1|MP3SPI (1.9.5.4)|1.9.5.4 >>>> 7|Active | 1|Apache Felix Configuration Admin Service >>>> (1.8.8)|1.8.8 >>>> 8|Active | 1|Apache Felix Log Service (1.0.1)|1.0.1 >>>> 9|Active | 1|Apache Felix Declarative Services (2.0.2)|2.0.2 >>>> 10|Active | 1|Meta Type >>>> (1.4.100.v20150408-1437)|1.4.100.v20150408-1437 >>>> 11|Active | 1|org.osgi:org.osgi.service.metatype >>>> (1.3.0.201505202024)|1.3.0.201505202024 >>>> 12|Active | 1|Apache Felix Gogo Command (0.16.0)|0.16.0 >>>> 13|Active | 1|Apache Felix Gogo Runtime (0.16.2)|0.16.2 >>>> 14|Active | 1|OSGi enRoute Gogo Shell >>>> (2.0.0.201610141744)|2.0.0.201610141744 >>>> 15|Active | 1|com.github.axiopisty.plarpebu.mediaplayer.provider >>>> (1.0.0.201612052005)|1.0.0.201612052005 >>>> 16|Active | >>>> 1|com.github.axiopisty.plarpebu.javafx.launcher.provider >>>> (1.0.0.201611291642)|1.0.0.201611291642 >>>> 17|Active | 1|com.github.axiopisty.plarpebu.application >>>> (1.0.0.201612052007)|1.0.0.201612052007 >>>> >>>> >>>> The headers for the media player provider bundle are: >>>> >>>> G! headers 15 >>>> headers 15 >>>> >>>> com.github.axiopisty.plarpebu.mediaplayer.provider (15) >>>> ------------------------------------------------------- >>>> Manifest-Version = 1.0 >>>> Bnd-LastModified = 1480968335538 >>>> Bundle-Description = MP3 MediaPlayer >>>> Bundle-ManifestVersion = 2 >>>> Bundle-Name = com.github.axiopisty.plarpebu.mediaplayer.provider >>>> Bundle-SymbolicName = com.github.axiopisty.plarpebu.mediaplayer.provider >>>> Bundle-Version = 1.0.0.201612052005 >>>> Created-By = 1.8.0_60 (Oracle Corporation) >>>> Export-Package = >>>> com.github.axiopisty.plarpebu.mediaplayer.api;version="1.0.0" >>>> Import-Package = >>>> com.github.axiopisty.plarpebu.mediaplayer.api;version="[1.0,1.1)",javax.sound.sampled >>>> Private-Package = >>>> com.github.axiopisty.plarpebu.mediaplayer.mp3.provider,com.github.axiopisty.plarpebu.mediaplayer.mp3.provider.internal >>>> Provide-Capability = >>>> osgi.service;objectClass:List<String>="com.github.axiopisty.plarpebu.mediaplayer.api.MediaPlayer" >>>> Require-Capability = osgi.ee <http://osgi.ee/>;filter:="(&(osgi.ee >>>> <http://osgi.ee/>=JavaSE)(version=1.8))" >>>> Service-Component = >>>> OSGI-INF/com.github.axiopisty.plarpebu.mediaplayer.mp3.xml >>>> SPI-Consumer = javax.sound.sampled.AudioSystem#getAudioInputStream >>>> Tool = Bnd-3.3.0.201609221906 >>>> >>>> >>>> With the application running, the GUI loads properly. But if you click on >>>> the Load button and then select an MP3 file the application reports the >>>> following: >>>> >>>> load: AG1001-01 - Cat Stevens - Wild World.mp3 >>>> java.lang.IllegalArgumentException: No line matching interface >>>> SourceDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 >>>> bytes/frame, little-endian is supported. >>>> at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:479) >>>> at >>>> com.github.axiopisty.plarpebu.mediaplayer.mp3.provider.internal.MP3Player.<init>(MP3Player.java:45) >>>> at >>>> com.github.axiopisty.plarpebu.mediaplayer.mp3.provider.KaraokePlayer.initialize(KaraokePlayer.java:52) >>>> at >>>> com.github.axiopisty.plarpebu.mediaplayer.mp3.provider.KaraokePlayer.load(KaraokePlayer.java:42) >>>> at >>>> com.github.axiopisty.plarpebu.application.Plarpebu.lambda$3(Plarpebu.java:77) >>>> at >>>> com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) >>>> at >>>> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) >>>> at >>>> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) >>>> at >>>> com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) >>>> at >>>> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) >>>> at >>>> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) >>>> at >>>> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) >>>> at >>>> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) >>>> at >>>> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) >>>> at >>>> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) >>>> at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) >>>> at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) >>>> at javafx.event.Event.fireEvent(Event.java:198) >>>> at javafx.scene.Node.fireEvent(Node.java:8411) >>>> at javafx.scene.control.Button.fire(Button.java:185) >>>> at >>>> com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) >>>> at >>>> com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) >>>> at >>>> com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) >>>> at >>>> com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) >>>> at >>>> com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) >>>> at >>>> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) >>>> at >>>> com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) >>>> at >>>> com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) >>>> at >>>> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) >>>> at >>>> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) >>>> at >>>> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) >>>> at >>>> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) >>>> at >>>> com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) >>>> at >>>> com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) >>>> at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) >>>> at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) >>>> at javafx.event.Event.fireEvent(Event.java:198) >>>> at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) >>>> at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) >>>> at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) >>>> at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) >>>> at >>>> com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:352) >>>> at >>>> com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:275) >>>> at java.security.AccessController.doPrivileged(Native Method) >>>> at >>>> com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$355(GlassViewEventHandler.java:388) >>>> at >>>> com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) >>>> at >>>> com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:387) >>>> at com.sun.glass.ui.View.handleMouseEvent(View.java:555) >>>> at com.sun.glass.ui.View.notifyMouse(View.java:937) >>>> at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) >>>> at >>>> com.sun.glass.ui.gtk.GtkApplication.lambda$null$50(GtkApplication.java:139) >>>> at java.lang.Thread.run(Thread.java:745) >>>> >>>> >>>> However, if you issue the following command at the gogo shell you get: >>>> >>>> G! mp3:load "/home/ehuntington/projects/research/Tracks/AG1001/AG1001-01 - >>>> Cat Stevens - Wild World.mp3" >>>> mp3:load "/home/ehuntington/projects/research/Tracks/AG1001/AG1001-01 - >>>> Cat Stevens - Wild World.mp3" >>>> MP3Player run entered. >>>> load: AG1001-01 - Cat Stevens - Wild World.mp3 >>>> state = PlayerState.INITIALIZED >>>> >>>> After doing this you can then either click the play button in the GUI or >>>> use the gogo command "mp3:play" and the song plays as expected. >>>> >>>> What am I missing? I just don't understand why loading the mp3 file works >>>> as expected when using the gogo commands but not from within the gui. >>>> >>>> >>>> >>>> >>>> >>>> On Mon, Dec 5, 2016 at 12:19 PM, Raymond Auge < >>>> <mailto:raymond.a...@liferay.com>raymond.a...@liferay.com >>>> <mailto:raymond.a...@liferay.com>> wrote: >>>> Properly configuring the SPI-Fly integration should result in a set of >>>> requirement and capabilities on the target bundles causing them to have a >>>> resolution time requirement which should force the weaving to affect them >>>> in the correct order. >>>> >>>> For instance, if you have API bundle X that requires bundle Z providing an >>>> impl via service loader: >>>> >>>> - Bundle Z(provider) should have >>>> a) a requirement on a service mediator registrar >>>> b) a capability for the service mediator provider for the API in >>>> question >>>> c) after weaving (which must occur due to a), have published Z's impl >>>> into the service registry >>>> >>>> - Bundle X(api) should have >>>> a) a requirement for the service mediator processor >>>> b) a requirement on service mediator provider for the API in question >>>> c) after weaving (which must occur due to a), have OSGi service >>>> registry code for obtaining the impl >>>> >>>> when properly done neither of X or Y could reach "ACTIVE" or even >>>> "RESOLVE" state unless the service mediator (Spi-Fly) has done it's job of >>>> weaving. >>>> >>>> See the notes at >>>> <http://aries.apache.org/modules/spi-fly.html>http://aries.apache.org/module >>>> <http://aries.apache.org/module>s/spi-fly.html >>>> >>>> Sincerely, >>>> - Ray >>>> >>>> >>>> On Mon, Dec 5, 2016 at 1:56 PM, BJ Hargrave < >>>> <mailto:hargr...@us.ibm.com>hargr...@us.ibm.com >>>> <mailto:hargr...@us.ibm.com>> wrote: >>>> I am not aware of any support in -runbundles to set start levels for >>>> bundle. But the bnd launcher should start the bundle in the order they are >>>> specified on the -runbundles instruction. Did you try putting those >>>> bundles first that need to be started first? >>>> >>>> -- >>>> >>>> BJ Hargrave >>>> Senior Technical Staff Member, IBM // office: +1 386 848 1781 >>>> <tel:%28386%29%20848-1781> >>>> OSGi Fellow and CTO of the OSGi Alliance // mobile: +1 386 848 3788 >>>> <tel:%28386%29%20848-3788> >>>> <mailto:hargr...@us.ibm.com>hargr...@us.ibm.com >>>> <mailto:hargr...@us.ibm.com> >>>> >>>> >>>> ----- Original message ----- >>>> From: Elliot Huntington < >>>> <mailto:elliot.hunting...@gmail.com>elliot.hunting...@gmail.com >>>> <mailto:elliot.hunting...@gmail.com>> >>>> Sent by: >>>> <mailto:osgi-dev-boun...@mail.osgi.org>osgi-dev-boun...@mail.osgi.org >>>> <mailto:osgi-dev-boun...@mail.osgi.org> >>>> To: OSGi Developer Mail List < >>>> <mailto:osgi-dev@mail.osgi.org>osgi-dev@mail.osgi.org >>>> <mailto:osgi-dev@mail.osgi.org>> >>>> Cc: >>>> Subject: [osgi-dev] Strange issue with enRoute and Aries SPI Fly. >>>> Date: Mon, Dec 5, 2016 1:35 PM >>>> >>>> The motivation for this thread is that I am experimenting with an OSGi >>>> enRoute project that uses the Apache Aries SPI-Fly dynamic weaving >>>> libraries to play an MP3 file. The example project is on github at: >>>> <https://github.com/axiopisty/com.github.axiopisty.plarpebu>https://github.com/axiopisty/c >>>> <https://github.com/axiopisty/c>om.github.axiopisty.plarpebu. This >>>> project has 5 enRoute modules: >>>> JavaFX API >>>> JavaFX API Provider >>>> Media Player API >>>> Media Player API Provider >>>> Application >>>> What I have noticed is that when I use 'osgi.enroute.debug.api' I can use >>>> the debug commands in the gogo shell to successfully load, play, pause, >>>> and stop the media player. The application will successfully play an MP3 >>>> file. However, when using the GUI to 'load' the MP3 file an exception >>>> occurs that indicates something is not working right with the SPI Fly >>>> dynamic weaving integration. I have not been able to figure out why the >>>> 'load' operation works successfully when using the gogo shell, but does >>>> not work when called from the GUI. I'm wondering if it might have >>>> something to do with the bundle start levels because according to the SPI >>>> Fly documentation, "any OSGi Bundle that uses the OSGi 4.3 WeavingHooks, >>>> the weaver bundle (org.apache.aries.spifly.dynamic.bundle) needs to be >>>> active before any bundles that need to be dynamically woven. OSGi start >>>> levels can provide a mechanism to control this." >>>> >>>> My suspicion is that because the JavaFX provider is a DS component with >>>> scope SINGLETON and immediate = true, that this bundle is activated before >>>> the dynamic weaving bundle in the runtime, which is probably causing the >>>> problem described. >>>> >>>> So my question is, when using bnd, is there some directive or syntax that >>>> can be used with the -runbundles directive that indicates the bundle start >>>> level? >>>> >>>> I would greatly appreciate your help figuring out why the media player >>>> service I created in this example works successfully from the gogo shell, >>>> but not from the gui, all within the same runtime application. >>>> >>>> Sincerely, >>>> Elliot >>>> >>>> >>>> _______________________________________________ >>>> OSGi Developer Mail List >>>> <mailto:osgi-dev@mail.osgi.org>osgi-dev@mail.osgi.org >>>> <mailto:osgi-dev@mail.osgi.org> >>>> >>>> <https://mail.osgi.org/mailman/listinfo/osgi-dev>https://mail.osgi.org/mailman/ >>>> <https://mail.osgi.org/mailman/>listinfo/osgi-dev >>>> >>>> >>>> >>>> _______________________________________________ >>>> OSGi Developer Mail List >>>> <mailto:osgi-dev@mail.osgi.org>osgi-dev@mail.osgi.org >>>> <mailto:osgi-dev@mail.osgi.org> >>>> >>>> <https://mail.osgi.org/mailman/listinfo/osgi-dev>https://mail.osgi.org/mailman/ >>>> <https://mail.osgi.org/mailman/>listinfo/osgi-dev >>>> >>>> >>>> >>>> -- >>>> Raymond Augé <http://www.liferay.com/web/raymond.auge/profile> (@rotty3000) >>>> Senior Software Architect Liferay, Inc. <http://www.liferay.com/> >>>> (@Liferay) >>>> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org/> >>>> (@OSGiAlliance) >>>> >>>> _______________________________________________ >>>> OSGi Developer Mail List >>>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >>>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>>> <https://mail.osgi.org/mailman/listinfo/osgi-dev> >>>> >>>> _______________________________________________ >>>> OSGi Developer Mail List >>>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >>>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>>> <https://mail.osgi.org/mailman/listinfo/osgi-dev> >>> >>> _______________________________________________ >>> OSGi Developer Mail List >>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>> <https://mail.osgi.org/mailman/listinfo/osgi-dev> >>> >>> _______________________________________________ >>> OSGi Developer Mail List >>> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >>> https://mail.osgi.org/mailman/listinfo/osgi-dev >>> <https://mail.osgi.org/mailman/listinfo/osgi-dev> >> >> >> _______________________________________________ >> OSGi Developer Mail List >> osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org> >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> <https://mail.osgi.org/mailman/listinfo/osgi-dev> > > -- > Christian Schneider > http://www.liquid-reality.de <http://www.liquid-reality.de/> > > Open Source Architect > http://www.talend.com <http://www.talend.com/> > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev