On 5/21/09 6:37 AM, Stuart McCulloch wrote:
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.*

Wild cards do not work at all for system packages, only for boot delegation. You have to explicitly list each system package. The original line didn't match because the system bundle was exporting "org.jdesktop.application.*", which obviously no one was importing.

-> richard

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]




Reply via email to