You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Rob Walker (JIRA)" <ji...@apache.org> on 2007/10/26 18:45:51 UTC

[jira] Created: (FELIX-412) Possible problem with Manifest parser if Native libs for running platform not declared

Possible problem with Manifest parser if Native libs for running platform not declared
--------------------------------------------------------------------------------------

                 Key: FELIX-412
                 URL: https://issues.apache.org/jira/browse/FELIX-412
             Project: Felix
          Issue Type: Bug
          Components: Framework
         Environment: Solaris / Sunos execution of Felx app version lifted from Windows
            Reporter: Rob Walker


We have a bundle that includes native code. The native code is only needed/used on some platforms, and hence the manifest doesn't list every platform used e.g.

   Bundle-NativeCode: /platlib.dll; osname=Windows NT; osname=Windows
   2000; osname=Windows 2003; osname=Windows XP; processor=x86,
   /libplatlib.so; osname=Linux; processor=x86; osname=NONSTOP_KERNEL;
   processor=IA64N

Previous versions of Felix/Oscar were fine with this - you only got an error thrown when you tried to actually use native classes on a platform that was not declared in the Manifest.

It seems now that this breaks during Manifest parsing, meaning our app won't load on say Solaris, even though we don't actually need the native libs on that platform:

org.osgi.framework.BundleException: Unable to select a native library clause.
       at org.apache.felix.framework.util.manifestparser.ManifestParser.getSelectedLibraryClause(ManifestParser.java:349)
       at org.apache.felix.framework.util.manifestparser.ManifestParser.getLibraries(ManifestParser.java:306)
       at org.apache.felix.framework.Felix.createModule(Felix.java:3337)
       at org.apache.felix.framework.Felix.createBundleInfo(Felix.java:3263)
       at org.apache.felix.framework.Felix.installBundle(Felix.java:2224)
       at org.apache.felix.framework.Felix.installBundle(Felix.java:2138)
       at org.apache.felix.framework.Felix.processAutoProperties(Felix.java:3606)
       at org.apache.felix.framework.Felix.start(Felix.java:803)
       at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:142)
       at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:102)
       at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:224)
       at com.ascert.vt.launch.VtLauncher.main(VtLauncher.java:210)



It doesn't seem right that Manifest parser should object to this and throw a fatal error - just because a native lib is not provided for the current platform does not mean it will be actually needed, and surely the parser's job isn't to make such decisions. At the point a missing native lib is needed and missing would seem to be the more valid place to throw an error, which I think is how it used to work.

One workaround would be to split out Winx86 libs into separate bundles, but that sort of defeats the elegant way OSGi handles platform dependencies. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Re: [jira] Resolved: (FELIX-412) Possible problem with Manifest parser if Native libs for running platform not declared

Posted by Rob Walker <ro...@ascert.com>.
Thanks Richard - I wondered if this was an R4 change area I wasn't aware of.
Will give it a try, regards
-- Rob

Richard S. Hall (JIRA) wrote:
>      [ https://issues.apache.org/jira/browse/FELIX-412?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
>
> Richard S. Hall resolved FELIX-412.
> -----------------------------------
>
>     Resolution: Fixed
>       Assignee: Richard S. Hall
>
> Actually, Rob I think this is an area of difference between Oscar and the R4 spec. Either there was a grey area in the spec before or Oscar just implemented this incorrectly, but now you need to add a "*" to the end of your native library clause to indicate that there is a default match or optional match if none of the other clauses matched. Check out page 59 of the R4.1 spec and see if this will solve your issue.
>
>   
>> Possible problem with Manifest parser if Native libs for running platform not declared
>> --------------------------------------------------------------------------------------
>>
>>                 Key: FELIX-412
>>                 URL: https://issues.apache.org/jira/browse/FELIX-412
>>             Project: Felix
>>          Issue Type: Bug
>>          Components: Framework
>>         Environment: Solaris / Sunos execution of Felx app version lifted from Windows
>>            Reporter: Rob Walker
>>            Assignee: Richard S. Hall
>>
>> We have a bundle that includes native code. The native code is only needed/used on some platforms, and hence the manifest doesn't list every platform used e.g.
>>    Bundle-NativeCode: /platlib.dll; osname=Windows NT; osname=Windows
>>    2000; osname=Windows 2003; osname=Windows XP; processor=x86,
>>    /libplatlib.so; osname=Linux; processor=x86; osname=NONSTOP_KERNEL;
>>    processor=IA64N
>> Previous versions of Felix/Oscar were fine with this - you only got an error thrown when you tried to actually use native classes on a platform that was not declared in the Manifest.
>> It seems now that this breaks during Manifest parsing, meaning our app won't load on say Solaris, even though we don't actually need the native libs on that platform:
>> org.osgi.framework.BundleException: Unable to select a native library clause.
>>        at org.apache.felix.framework.util.manifestparser.ManifestParser.getSelectedLibraryClause(ManifestParser.java:349)
>>        at org.apache.felix.framework.util.manifestparser.ManifestParser.getLibraries(ManifestParser.java:306)
>>        at org.apache.felix.framework.Felix.createModule(Felix.java:3337)
>>        at org.apache.felix.framework.Felix.createBundleInfo(Felix.java:3263)
>>        at org.apache.felix.framework.Felix.installBundle(Felix.java:2224)
>>        at org.apache.felix.framework.Felix.installBundle(Felix.java:2138)
>>        at org.apache.felix.framework.Felix.processAutoProperties(Felix.java:3606)
>>        at org.apache.felix.framework.Felix.start(Felix.java:803)
>>        at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:142)
>>        at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:102)
>>        at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:224)
>>        at com.ascert.vt.launch.VtLauncher.main(VtLauncher.java:210)
>> It doesn't seem right that Manifest parser should object to this and throw a fatal error - just because a native lib is not provided for the current platform does not mean it will be actually needed, and surely the parser's job isn't to make such decisions. At the point a missing native lib is needed and missing would seem to be the more valid place to throw an error, which I think is how it used to work.
>> One workaround would be to split out Winx86 libs into separate bundles, but that sort of defeats the elegant way OSGi handles platform dependencies. 
>>     
>
>   

-- 


Ascert - Taking systems to the Edge
robw@ascert.com
+44 (0)20 7488 3470
www.ascert.com


[jira] Resolved: (FELIX-412) Possible problem with Manifest parser if Native libs for running platform not declared

Posted by "Richard S. Hall (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-412?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Richard S. Hall resolved FELIX-412.
-----------------------------------

    Resolution: Fixed
      Assignee: Richard S. Hall

Actually, Rob I think this is an area of difference between Oscar and the R4 spec. Either there was a grey area in the spec before or Oscar just implemented this incorrectly, but now you need to add a "*" to the end of your native library clause to indicate that there is a default match or optional match if none of the other clauses matched. Check out page 59 of the R4.1 spec and see if this will solve your issue.

> Possible problem with Manifest parser if Native libs for running platform not declared
> --------------------------------------------------------------------------------------
>
>                 Key: FELIX-412
>                 URL: https://issues.apache.org/jira/browse/FELIX-412
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>         Environment: Solaris / Sunos execution of Felx app version lifted from Windows
>            Reporter: Rob Walker
>            Assignee: Richard S. Hall
>
> We have a bundle that includes native code. The native code is only needed/used on some platforms, and hence the manifest doesn't list every platform used e.g.
>    Bundle-NativeCode: /platlib.dll; osname=Windows NT; osname=Windows
>    2000; osname=Windows 2003; osname=Windows XP; processor=x86,
>    /libplatlib.so; osname=Linux; processor=x86; osname=NONSTOP_KERNEL;
>    processor=IA64N
> Previous versions of Felix/Oscar were fine with this - you only got an error thrown when you tried to actually use native classes on a platform that was not declared in the Manifest.
> It seems now that this breaks during Manifest parsing, meaning our app won't load on say Solaris, even though we don't actually need the native libs on that platform:
> org.osgi.framework.BundleException: Unable to select a native library clause.
>        at org.apache.felix.framework.util.manifestparser.ManifestParser.getSelectedLibraryClause(ManifestParser.java:349)
>        at org.apache.felix.framework.util.manifestparser.ManifestParser.getLibraries(ManifestParser.java:306)
>        at org.apache.felix.framework.Felix.createModule(Felix.java:3337)
>        at org.apache.felix.framework.Felix.createBundleInfo(Felix.java:3263)
>        at org.apache.felix.framework.Felix.installBundle(Felix.java:2224)
>        at org.apache.felix.framework.Felix.installBundle(Felix.java:2138)
>        at org.apache.felix.framework.Felix.processAutoProperties(Felix.java:3606)
>        at org.apache.felix.framework.Felix.start(Felix.java:803)
>        at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:142)
>        at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:102)
>        at com.ascert.vt.launch.VtLauncher.a(VtLauncher.java:224)
>        at com.ascert.vt.launch.VtLauncher.main(VtLauncher.java:210)
> It doesn't seem right that Manifest parser should object to this and throw a fatal error - just because a native lib is not provided for the current platform does not mean it will be actually needed, and surely the parser's job isn't to make such decisions. At the point a missing native lib is needed and missing would seem to be the more valid place to throw an error, which I think is how it used to work.
> One workaround would be to split out Winx86 libs into separate bundles, but that sort of defeats the elegant way OSGi handles platform dependencies. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.