Hi all,
I want just to report that the problem is fixed.
The fix is as Richard wrote in previous mail - pre-loading the class
that was causing the problem.

Thanks for the cooperation,
damencho

On 11/9/07, Richard S. Hall <[EMAIL PROTECTED]> wrote:
> Stuart McCulloch wrote:
> > On 09/11/2007, Richard S. Hall <[EMAIL PROTECTED]> wrote:
> >
> >> After looking more closely at the wording of the problem, I notice that
> >> you said that the native code is instantiating the class. If this is
> >> actually the case, then you will need to check to see which class loader
> >> the native code is using to do this...I am not familiar with how to
> >> instantiate classes from native code.
> >>
> >
> >
> > you'd normally use:
> >
> >    jclass FindClass(JNIEnv *env, const char *name);
> >
> > to load a class from native code - note that there's no option to pass in a
> > classloader.
> >
> > The JVM will attempt to use the classloader of the _calling_ Java code (ie.
> > the loader of
> > the class who made the native call). If the native code wasn't invoked from
> > Java (ie. it's
> > from an attached native thread) then the JVM will use the system
> > classloader.
> >
> > alternatively, some people will use:
> >
> >    jclass DefineClass(JNIEnv *env, jobject loader, const jbyte *buf, jsize
> > bufLen);
> >
> > to load a class from a data stream, and here you can provide the classloader
> > to use.
> >
>
> It turns out after looking at the native code on Source Forge that they
> are calling FindClass() on a thread not associated with a native method,
> so it is using the system class loader. So this is problematic. They are
> aware of this issue, though, and in some parts of their code they
> pre-load classes to avoid this issue. So perhaps they could just
> pre-load the class that Damian is having difficulty with too to make the
> issue go away.
>
> -> richard
>
> > Regardless, all native libs are associated with exactly one class
> >
> >> loader. So, the native code should try to get its associated class
> >> loader, not the global app class loader, then everything should be ok I
> >> would guess.
> >>
> >
> >
> > if the native call originates from Java code then yes, it should be just a
> > matter of
> > ensuring the same classloader is used for the relevant packages, which
> > should
> > be just a matter of using the right imports/exports.
> >
> > however, if (somehow) the native call doesn't have a Java frame somewhere in
> > the stack then the system classloader will be used... so you'd probably need
> > to
> > also get the Java package(s) from the system classloader :(
> >
> > Keep up posted.
> >
> >> -> richard
> >>
> >> Richard S. Hall wrote:
> >>
> >>> Richard S. Hall wrote:
> >>>
> >>>> Damian Minkov wrote:
> >>>>
> >>>>> Hi,
> >>>>>
> >>>>> here is the situation.
> >>>>> In sip-communicator there is a bundle named media service which
> >>>>> handles all the media stuff.
> >>>>> I'm trying to integrate some part of fmj project. So I have included
> >>>>> the needed libs
> >>>>> (fmj-sc.jar and lti-civil-no_s_w_t.jar) and I have included in the
> >>>>> bundle jar the needed civil.dll cause I'm currently testing on
> >>>>> windows.
> >>>>> Here is the manifest file I use.
> >>>>>
> >>>>> Bundle-Activator: net.java.sip.communicator.impl.media.MediaActivator
> >>>>> Bundle-Name: Media Service Implementation
> >>>>> Bundle-Description: A bundle that offers Media capture and
> >>>>> presentation capabilities.
> >>>>> Bundle-Vendor: sip-communicator.org
> >>>>> Bundle-Version: 0.0.1
> >>>>> Bundle-NativeCode: /civil.dll; osname=WindowsXP; processor=x86;
> >>>>> Import-Package: org.osgi.framework,
> >>>>>  net.java.sip.communicator.service.configuration,
> >>>>>  net.java.sip.communicator.service.configuration.event,
> >>>>>  net.java.sip.communicator.service.protocol,
> >>>>>  net.java.sip.communicator.service.protocol.event,
> >>>>>  net.java.sip.communicator.util,
> >>>>>  net.java.sip.communicator.service.netaddr,
> >>>>>  javax.swing,
> >>>>>  javax.swing.event,
> >>>>>  net.java.sip.communicator.service.fileaccess,
> >>>>>  javax.sound,
> >>>>>  javax.sound.sampled
> >>>>> Export-Package: net.java.sip.communicator.service.media,
> >>>>>  net.java.sip.communicator.service.media.event,
> >>>>>  net.java.sip.communicator.impl.media,
> >>>>>  net.java.sip.communicator.impl.media.configuration
> >>>>>
> >>>>> Is it a problem if the required dll is also in the path of the running
> >>>>> application.
> >>>>>
> >>>>>
> >>>> I am confused from the above information. Are you including the fmj
> >>>> JARs on the bundle's class path manifest header?
> >>>>
> >>> Talking with Damian in chat, I guess I didn't realize he was exploding
> >>> the JAR files into his bundle. I thought he was just embedding that
> >>> JAR files.
> >>>
> >>> -> richard
> >>>
> >>>> -> richard
> >>>>
> >>>>
> >>>>> Thanks,
> >>>>> damencho
> >>>>>
> >>>>> On 11/9/07, Karl Pauls <[EMAIL PROTECTED]> wrote:
> >>>>>
> >>>>>
> >>>>>> On 11/9/07, Damian Minkov <[EMAIL PROTECTED]> wrote:
> >>>>>>
> >>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> I've done this but the problem stays.
> >>>>>>> The results are the same no matter whether I remove the libs from
> >>>>>>> global classpath or not.
> >>>>>>>
> >>>>>>>
> >>>>>> But did you add a Bundle-NativeCode header to your manifest? Could
> >>>>>>
> >> you
> >>
> >>>>>> maybe share the manifest with us (and or some more information)?
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> should I remove the System.loadLibrary from the lib loading the
> >>>>>>> native code ?
> >>>>>>>
> >>>>>>>
> >>>>>> no, you still need to do that.
> >>>>>>
> >>>>>> regards,
> >>>>>>
> >>>>>> Karl
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> damencho
> >>>>>>>
> >>>>>>> On 11/9/07, Karl Pauls <[EMAIL PROTECTED]> wrote:
> >>>>>>>
> >>>>>>>
> >>>>>>>> Hi Damian,
> >>>>>>>>
> >>>>>>>> I think your last suggestion is the solution. Try to add a
> >>>>>>>> Bundle-NativeCode header to your bundles manifest then the native
> >>>>>>>> lib
> >>>>>>>> should be loaded by your bundles classloader.
> >>>>>>>>
> >>>>>>>> Let us know whether that fixes your problem.
> >>>>>>>>
> >>>>>>>> regards,
> >>>>>>>>
> >>>>>>>> Karl
> >>>>>>>>
> >>>>>>>> On 11/9/07, Damian Minkov <[EMAIL PROTECTED]> wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>> Hi,
> >>>>>>>>>
> >>>>>>>>> I'm working on moving sip-communicator to FMJ. The FMJ lib uses
> >>>>>>>>> native
> >>>>>>>>> code for working with media devices.
> >>>>>>>>> The lib loads itself the native libs. But here is the problem.
> >>>>>>>>> There is
> >>>>>>>>> an object (VideoFormat) which is instantiated
> >>>>>>>>> in the native code and if I compare it ( instanceof ) in the
> >>>>>>>>> java code
> >>>>>>>>> with the class VideoFormat the result is FALSE.
> >>>>>>>>> Then I printed both classloaders :
> >>>>>>>>>  - for the class loaded from java code result is -
> >>>>>>>>> org.apache.felix.framework.searchpolicy.ContentClassLoader
> >>>>>>>>>  - and for the one that comes from native code it is -
> >>>>>>>>> sun.misc.Launcher$AppClassLoader
> >>>>>>>>>
> >>>>>>>>> Then I noticed that the lib containing the VideoFormat class is
> >>>>>>>>> not only
> >>>>>>>>> in the bundle but and in the global classpath of the
> >>>>>>>>> running application. So I remove it from there and the native
> >>>>>>>>> code began
> >>>>>>>>> to fail as it cannot find the needed class.
> >>>>>>>>>
> >>>>>>>>> Any ideas ? I have no special native code declarations in the
> >>>>>>>>> manifest
> >>>>>>>>> file of the bundle. If I have does Bundle-NativeCode declaration
> >>>>>>>>> will it change the classloader with the felix one for loading
> >>>>>>>>> classes
> >>>>>>>>> from native code ?
> >>>>>>>>>
> >>>>>>>>> Thanks,
> >>>>>>>>> damencho
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >> ---------------------------------------------------------------------
> >>
> >>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>> --
> >>>>>>>> Karl Pauls
> >>>>>>>> [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]
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>> --
> >>>>>> Karl Pauls
> >>>>>> [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]
> >>
> >>
> >>
> >
> >
> >
>
> ---------------------------------------------------------------------
> 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