Ali Naddaf wrote:
Hi Richard.

Thanks for your suggestion. I made the upgrade and understandably, it wasn't without some fun; some constructors and methods had changed their signatures, etc. I have got the application up and running with the new version and haven't run into my old issue yet so hopefully that has been resolved.

Yeah, I think this will resolve it. Sorry for the pain when moving to 1.2.2, but it should be worth it, since it is drastically improved over 0.8.0. We are working on a 1.4.0 release that will also change the API for those embedding Felix, but that move should be much easier than from 0.8.0 to 1.2.2. The new API is a proposal for a new standard framework API, so hopefully the embedding API will become more stable and work across framework implementations.

-> richard

I, however, noticed having some less serious exceptions in my log and looked further into it. Basically, I am seeing an exception in the URLHandlersBundleStreamHandler.openConnection(URL) method. Here is the part I am referring to:

if (framework != null)
       {
           // TODO: optimize this to not use reflection if not needed
           try
           {
Class targetClass = framework.getClass().getClassLoader().loadClass(
                   URLHandlersBundleURLConnection.class.getName());
return (URLConnection) m_action.invoke(m_action.getConstructor(targetClass,
                   new Class[]{URL.class, framework.getClass()}),
                   new Object[]{url, framework});
           }
           catch (Exception ex)
           {
               throw new IOException(ex.getMessage());
           }
       }
       throw new IOException("No framework context found");

The problem happens when reflection fails to find the appropriate constructor and throws a NoSuchMethodException; here the targetClass resolves to "org.apache.felix.framework.URLHandlersBundleURLConnection" and
the exception is:

java.lang.NoSuchMethodException: org.apache.felix.framework.URLHandlersBundleURLConnection.<init>(java.net.URL, org.simplecenter.application.SimpleCenterApplication)

Note that SimpleCenterApplicaion extends Felix and URLHandlersBundleURLConnection has the constructor URLHandlersBundleURLConnection(URL, Felix).

Any thoughts?

Thanks
Ali.

P.S. In the older version, it was not relying on the reflection and was calling the URLHandlersBundleURLConnection(URL, Felix) directly.

Richard S. Hall wrote:
If you are using 0.8.0 of Felix, then you seriously need to upgrade. You can get the version of Felix by starting it and typing "version" in the Felix shell or by typing "ps" and looking at the version of the system bundle.

If you really are using 0.8.0, then it is possible that this was related to a bug from a while ago where Felix was not properly guarding class definition with a lock. Try upgrading to the latest 1.2.2 release (1.4.0 will be coming soon too).

-> richard


Ali Naddaf wrote:
Hi Richard.

In the manifest of felix.jar I see "Bundle-Version: 0.8.0.incubator", so is that the version you are asking for? As for what I was doing, this is a multimedia application and I was trying to open a media file for playback. I am trying to see how I can deterministically reproduce this but otherwise, do yo have any suggestion as to how I can debug the issue?

Thanks,
Ali.


Richard S. Hall wrote:
Which version of Felix are you using?

What are you doing when this error occurs?

It certainly would be great to find some way to reproduce it. I am sure it is explainable.

-> richard

Ali Naddaf wrote:
Hello all.

I have an OSGi based application (using Felix) that is under heavy development and a few days ago, I started seeing the following exception showing up in my logs:

java.lang.LinkageError: loader (instance of org/apache/felix/framework/searchpolicy/ContentClassLoader): attempted duplicate class definition for name: "org/simplecenter/upnp/av/DIDLParser"
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(Unknown Source)
   at java.lang.ClassLoader.defineClass(Unknown Source)
at org.apache.felix.framework.searchpolicy.ContentClassLoader.findClass(ContentClassLoader.java:149) at org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClassFromModule(ContentClassLoader.java:51) at org.apache.felix.framework.searchpolicy.ContentLoaderImpl.getClass(ContentLoaderImpl.java:121) at org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:86) at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.searchImports(R4SearchPolicyCore.java:392) at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClassOrResource(R4SearchPolicyCore.java:353) at org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.findClass(R4SearchPolicyCore.java:136) at org.apache.felix.framework.searchpolicy.R4SearchPolicy.findClass(R4SearchPolicy.java:45) at org.apache.felix.framework.searchpolicy.ContentClassLoader.loadClass(ContentClassLoader.java:70)
   at java.lang.ClassLoader.loadClass(Unknown Source)
   at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at org.simplecenter.upnp.av.controlpoint.BaseAVTransportListener.parseMetaData(BaseAVTransportListener.java:87) at org.simplecenter.upnp.av.controlpoint.BaseAVTransportListener.change(BaseAVTransportListener.java:78) at org.simplecenter.upnp.av.controlpoint.LastChangeListener.parseStates(LastChangeListener.java:98) at org.simplecenter.upnp.av.controlpoint.LastChangeListener.parseEvent(LastChangeListener.java:74) at org.simplecenter.upnp.av.controlpoint.LastChangeListener.LastChangeChanged(LastChangeListener.java:45) at org.simplecenter.upnp.av.renderer.RendererAVTransport.LastChangeChanged(RendererAVTransport.java:48) at org.simplecenter.upnp.av.renderer.RendererDeviceInstance$1.sendEvent(RendererDeviceInstance.java:101) at org.simplecenter.upnp.av.renderer.LastChangeEventSender.flushEvents(LastChangeEventSender.java:122) at org.simplecenter.upnp.av.renderer.LastChangeEventSender.access$300(LastChangeEventSender.java:38) at org.simplecenter.upnp.av.renderer.LastChangeEventSender$EventTimer.run(LastChangeEventSender.java:101)
   at java.lang.Thread.run(Unknown Source)

I cannot find any duplicate classes in my code and also this problem doesn't show itself all the times, and yet I haven't been able to find accurate reproduction steps. Anyhow, if any one has any suggestion as to what this may mean and how I can debug that, it would be greatly appreciated.

Many thanks
Ali


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to