Osgi - Felix - Maven in conjunction with jMonkey

Hello!



First of all… a little explanation.

I’m currently working on a project in my university. The project I’m working for make use of osgi, maven and Felix via Pax Runner.

I’ve made a litte 3D viewer with help of JMonkey. My programming enviroment is Eclipse.

For now I’ve packed the jMonkeyEngine3.jar and the lwjgl.jar in a Maven bundle and installed it.



If I right click on my Source that make use of the jMonkey Engine and say run. Everything works as expected. The application starts and

make it’s work.



…but if I want to start my Application via an Run Configuration that uses Felix via the Pax Runner I get this log in the console with an exception

on the end:



[java]23.08.2011 09:33:29 com.jme3.system.JmeSystem initialize

INFO: Running on jMonkey Engine 3 Alpha 0.6

23.08.2011 09:33:29 com.jme3.system.Natives extractNativeLibs

INFO: Extraction Directory #1: bundle://3.0:1/com/jme3/system/

23.08.2011 09:33:29 com.jme3.system.Natives extractNativeLibs

INFO: Extraction Directory #2: C:devworkspacesuAAL002rundirsmp.spaceconf

23.08.2011 09:33:29 com.jme3.system.Natives extractNativeLibs

INFO: Extraction Directory #3: C:devworkspacesuAAL002rundirsmp.spaceconf

23.08.2011 09:33:29 com.jme3.system.Natives extractNativeLib

WARNUNG: Cannot locate native library: windows/bulletjme64.dll

23.08.2011 09:33:30 com.jme3.system.lwjgl.LwjglCanvas$GLCanvas addNotify

INFO: EDT: Creating OGL thread.

23.08.2011 09:33:30 com.jme3.system.lwjgl.LwjglCanvas$GLCanvas addNotify

INFO: EDT: Notifying OGL that canvas is visible…

23.08.2011 09:33:30 com.jme3.system.lwjgl.LwjglAbstractDisplay run

INFO: Using LWJGL 2.7.1

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglCanvas makePbufferAvailable

INFO: OGL: Pbuffer has been created

23.08.2011 09:33:31 com.jme3.renderer.lwjgl.LwjglRenderer initialize

INFO: Caps: [FrameBuffer, FrameBufferMRT, FrameBufferMultisample, TextureMultisample, OpenGL20, OpenGL21, OpenGL30, OpenGL31, OpenGL32, ARBprogram, GLSL100, GLSL110, GLSL120, GLSL130, GLSL140, GLSL150, VertexTextureFetch, TextureArray, TextureBuffer, FloatTexture, FloatColorBuffer, FloatDepthBuffer, PackedFloatTexture, SharedExponentTexture, PackedFloatColorBuffer, TextureCompressionLATC, NonPowerOfTwoTextures, MeshInstancing, VertexBufferArray]

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglContext printContextInitInfo

INFO: Adapter: nvd3dumx,nvwgf2umx,nvwgf2umx

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglContext printContextInitInfo

INFO: Driver Version: 8.17.12.8026

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglContext printContextInitInfo

INFO: Vendor: NVIDIA Corporation

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglContext printContextInitInfo

INFO: OpenGL Version: 3.3.0

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglContext printContextInitInfo

INFO: Renderer: GeForce GT 220/PCI/SSE2

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglContext printContextInitInfo

INFO: GLSL Ver: 3.30 NVIDIA via Cg compiler

23.08.2011 09:33:31 com.jme3.system.lwjgl.LwjglTimer <init>

INFO: Timer resolution: 1.000 ticks per second

23.08.2011 09:33:31 com.jme3.asset.DesktopAssetManager <init>

INFO: DesktopAssetManager created.

23.08.2011 09:33:31 com.jme3.renderer.Camera <init>

INFO: Camera created (W: 640, H: 480)

23.08.2011 09:33:31 com.jme3.renderer.Camera <init>

INFO: Camera created (W: 640, H: 480)

23.08.2011 09:33:31 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread

INFO: AudioRenderer supports 64 channels

23.08.2011 09:33:31 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread

INFO: Audio effect extension version: 1.0

23.08.2011 09:33:31 com.jme3.audio.lwjgl.LwjglAudioRenderer initInThread

INFO: Audio max auxilary sends: 1

23.08.2011 09:33:31 com.jme3.app.Application handleError

SCHWERWIEGEND: Uncaught exception thrown in Thread[LWJGL Renderer Thread,6,main]

java.lang.IllegalStateException: No loader registered for type “fnt”

at com.jme3.asset.DesktopAssetManager.loadAsset(DesktopAssetManager.java:223)

at com.jme3.asset.DesktopAssetManager.loadFont(DesktopAssetManager.java:339)

at com.jme3.app.SimpleApplication.loadFPSText(SimpleApplication.java:182)

at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:207)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:124)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:200)

at java.lang.Thread.run(Thread.java:662)[/java]



For any reason the Engine can’t locate the locator and the loader that’s “normally” can be found in “/com/jme3/asset/Desktop.cfg”

I’ve tried to create a new assetManager so I copied the Default.cfg to a known location an created a new assetManager.

But that doesn’t work.



Have anyone some suggestions for me!?



Thanks!



-René

My first suggestion is learning about the tools you want to work with. Since OSGI has a closed class loader environment its not possible to load anything but classes from outside the current plugin, even if the packages are public. So all data files have to be in the plugin they are loaded from (as for example the .cfg file or any shader or material definition etc.). This can get a bit complicated but again, learn the tools you want to use or just use the ones provided instead :stuck_out_tongue: Since the jMonkeyEngine plugins and the plugin system work exactly like OSGI and jMP can even load and create OSGI packages and plugins it would be way easier to just use that instead.