2009/5/21 Matej Pončák <[email protected]>
> Hi.
>
> I try to use Felix OSGi with GUI.
> I have a problem with:
> org.osgi.framework.BundleException: Unresolved constraint in bundle 5:
> package; (&(package=org.jdesktop.application)(version>=0.0.0))
>
> My bundle is number 5.
>
> -> ps
> START LEVEL 1
> ID State Level Name
> [ 0] [Active ] [ 0] System Bundle (1.8.0)
> [ 1] [Active ] [ 1] Apache Felix Shell Service (1.2.0)
> [ 2] [Active ] [ 1] Apache Felix Shell TUI (1.2.0)
> [ 3] [Active ] [ 1] Apache Felix Bundle Repository (1.4.0)
> [ 5] [Installed ] [ 1] MIM module (0.0.7)
> -> update 5
> -> start 5
> org.osgi.framework.BundleException: Unresolved constraint in bundle 5:
> package; (&(package=org.jdesktop.application)(version>=0.0.0))
> -> exports 5
> [5] exports:
> ------------
> Nothing
> -> imports 5
> [5] imports:
> ------------
> Nothing
> -> headers 5
>
> MIM module (5)
> --------------
> Main-Class = mis.MISApp
> Bundle-Activator = mis.MISApp
> Bundle-Description = My description
> Export-Package = mis.service
> Bundle-Version = 0.0.7
> Created-By = 10.0-b23 (Sun Microsystems Inc.)
> Manifest-Version = 1.0
> Bundle-Vendor = test
> Bundle-Name = MIM module
> Ant-Version = Apache Ant 1.7.0
> Class-Path = lib/appframework-1.0.3.jar lib/swing-worker-1.1.jar
> lib/felix.jar
> Import-Package = org.osgi.framework,org.jdesktop.application
> X-COMMENT = Main-Class will be added automatically by build
> ->
>
>
> I seted this option in my config:
> # To append packages to the default set of exported system packages,
> # set this value.
> org.osgi.framework.system.packages.extra=org.jdesktop.application.*
>
can you try this instead:
org.osgi.framework.system.packages.extra=org.jdesktop.application,org.jdesktop.application.*
because according to the OSGi spec, a package wildcard of:
org.foo.*
will only match against sub-packages of org.foo and _not_ org.foo itself
just for reference, in case you think the solution to this would be to use:
org.foo*
this isn't a valid package wildcard as the "*" has to be on it's own or
after a "."
( if you think this is all confusing I agree, but that's the spec'd
behaviour... )
And my Java file is:
> <filecontent>
> /*
> * MISApp.java
> */
>
> package mis;
>
> import org.jdesktop.application.Application;
> import org.jdesktop.application.SingleFrameApplication;
> import org.osgi.framework.BundleActivator;
> import org.osgi.framework.BundleContext;
> import org.osgi.framework.ServiceListener;
> import org.osgi.framework.ServiceEvent;
> import java.util.Properties;
> import mis.service.MimService;
>
>
>
> /**
> * The main class of the application.
> */
> public class MISApp extends SingleFrameApplication implements
> BundleActivator {
>
> public void start(BundleContext context)
> {
> Properties props = new Properties();
> props.put("Language", "English");
> context.registerService(
> MimService.class.getName(), new MimServiceImpl(), props);
> }
>
>
> public void stop(BundleContext context)
> {
> context=null;
> // NOTE: The service is automatically unregistered.
> }
>
>
> private static class MimServiceImpl implements MimService
> {
> // The set of words contained in the dictionary.
> String[] m_dictionary =
> { "welcome", "to", "the", "osgi", "tutorial" };
>
> /**
> * Implements DictionaryService.checkWord(). Determines
> * if the passed in word is contained in the dictionary.
> * @param word the word to be checked.
> * @return true if the word is in the dictionary,
> * false otherwise.
> **/
> public void setMenuItem(String word)
> {
> word = word.toLowerCase();
>
> System.out.println("Prislo taketo slovo:" + word);
> /* // This is very inefficient
> for (int i = 0; i < m_dictionary.length; i++)
> {
> if (m_dictionary[i].equals(word))
> {
> return true;
> }
> }
> return false;
> */
> }
> }
>
>
>
> /**
> * At startup create and show the main frame of the application.
> */
> @Override protected void startup() {
> show(new MISView(this));
> }
>
> /**
> * This method is to initialize the specified window by injecting
> resources.
> * Windows shown in our application come fully initialized from the GUI
> * builder, so this additional configuration is not needed.
> */
> @Override protected void configureWindow(java.awt.Window root) {
> }
>
> /**
> * A convenient static getter for the application instance.
> * @return the instance of MISApp
> */
> public static MISApp getApplication() {
> return Application.getInstance(MISApp.class);
> }
>
> /**
> * Main method launching the application.
> */
> public static void main(String[] args) {
> launch(MISApp.class, args);
> }
> }
>
> </filecontent>
>
>
> When I want to run my application with command
> java -jar MIS.jar
> it works fine.
>
> But when I try to run it in Felix prompt it doesn't run.
>
> I tried to search in mail-archive, but it didn't help.
>
> Thanks for all suggestions.
>
> Matej
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
--
Cheers, Stuart