2009/5/21 Matej Pončák <[email protected]>
>
> > 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... )
> >
> I tried change
> org.osgi.framework.system.packages.extra=org.jdesktop.application.*
>
> to
>
>
> org.osgi.framework.system.packages.extra=org.jdesktop.application,org.jdesktop.application.*
>
>
>
> Here is my output:
>
> -> 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] [Resolved ] [ 1] MIM module (0.0.7)
> -> update 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)
> -> start 5
> org.osgi.framework.BundleException: Activator start error in bundle [5].
> at org.apache.felix.framework.Felix.startBundle(Felix.java:1506)
> at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:779)
> at
>
> org.apache.felix.shell.impl.StartCommandImpl.execute(StartCommandImpl.java:105)
> at
>
> org.apache.felix.shell.impl.Activator$ShellServiceImpl.executeCommand(Activator.java:291)
> at
>
> org.apache.felix.shell.tui.Activator$ShellTuiRunnable.run(Activator.java:177)
> at java.lang.Thread.run(Thread.java:636)
> Caused by: java.lang.NoClassDefFoundError:
> org/jdesktop/application/SingleFrameApplication
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:637)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.findClass(ModuleImpl.java:1556)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:562)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1446)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl.getClassByDelegation(ModuleImpl.java:481)
> at
> org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3344)
> at org.apache.felix.framework.Felix.startBundle(Felix.java:1453)
> ... 5 more
> Caused by: java.lang.ClassNotFoundException:
> org.jdesktop.application.SingleFrameApplication
> at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
> at
>
> org.apache.felix.framework.ExtensionManager$ExtensionManagerModule.getClassByDelegation(ExtensionManager.java:653)
> at
> org.apache.felix.framework.searchpolicy.R4Wire.getClass(R4Wire.java:108)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl.searchImports(ModuleImpl.java:1184)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:557)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl.access$100(ModuleImpl.java:59)
> at
>
> org.apache.felix.framework.searchpolicy.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1446)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
> ... 15 more
> java.lang.NoClassDefFoundError:
> org/jdesktop/application/SingleFrameApplication
> -> 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
> -> exports 5
> [5] exports:
> ------------
> mis.service; version=0.0.0
> -> imports 5
> [5] imports:
> ------------
> org.osgi.framework; version=1.4.0 -> org.apache.felix.framework [0]
> org.jdesktop.application; version=0.0.0 -> org.apache.felix.framework [0]
> ->
>
OK, so you now have your client bundle wired to the system bundle for
"org.jdesktop.application"
- presumably you've put the JDesktop jars on the same classpath that you use
to launch Felix?
such as:
java -classpath bin/felix.jar:<jdesktop-jars> org.apache.felix.main.Main
the jars need to be on the launching classpath so the Felix system bundle
can delegate to them
> Any another ideas?
>
> Matej
>
> > 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]
> >>
> >>
> >>
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
--
Cheers, Stuart