On 5 Dec 2016, at 21:48, Elliot Huntington
<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
<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/modules/spi-fly.html>
Sincerely,
- Ray
On Mon, Dec 5, 2016 at 1:56 PM, BJ Hargrave
<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>
hargr...@us.ibm.com <mailto:hargr...@us.ibm.com>
----- Original message -----
From: Elliot Huntington <elliot.hunting...@gmail.com
<mailto:elliot.hunting...@gmail.com>>
Sent by: osgi-dev-boun...@mail.osgi.org
<mailto:osgi-dev-boun...@mail.osgi.org>
To: OSGi Developer Mail List <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/com.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
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>
--
*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>