Which class does the uimInfoShell bean extends ? There's something weird in the stack trace, as if the bean implements the Function interface, i don't think the org.apache.felix.gogo.runtime.shell.Reflective should be involved. Can you check the wiring with the 'package:imports' command and make sure the org.apache.felix.service.command is correctly imported from the karaf.console bundle ?
On Mon, Oct 18, 2010 at 15:38, Manuel Bernhardt <[email protected]>wrote: > Hi, > > On Mon, Oct 18, 2010 at 2:32 PM, Guillaume Nodet <[email protected]> wrote: > > Note that @Autowired could be achieved by an explicit wiring in blueprint > if > > the bean has setters. > > Let me know if you need more help, that's an are i'm interested in going > to > > the bottom, as I'm still unclear what works and what does not. > > Thanks, actually I would need more help with the shell command service: > > Spring DM gets installed as a feature -- with a load of stacktraces, > but in the end it seems to run and deploy things nicely. I guess I'll > give you the stacktraces later on, when I'm sure it actually works as > expected (right now the shell is the only means I have to do so). > > I now declared a blueprint service in the spring-dm bundle-context: > > <bp:service id="infoShell" ref="uimInfoShell" > interface="org.apache.felix.service.command.Function"> > <bp:service-properties> > <bp:entry key="osgi.command.function" value="info"/> > <bp:entry key="osgi.command.scope" value="uim"/> > </bp:service-properties> > </bp:service> > > together with a "uimInfoShell" bean which points to the implementation. > > Upon running "uim:info" in the console, I get > > 15:23:36,070 | INFO | l Console Thread | Console > | araf.shell.console.jline.Console 187 | 17 - > org.apache.karaf.shell.console - 2.1.0 | Exception caught while > executing command > java.lang.IllegalArgumentException: Cannot coerce info[] to any of [] > at > org.apache.felix.gogo.runtime.shell.Reflective.method(Reflective.java:174)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.CommandProxy.execute(CommandProxy.java:54)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:229)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:162)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:101)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:79)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.CommandSessionImpl.execute(CommandSessionImpl.java:71)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.karaf.shell.console.jline.Console.run(Console.java:169)[17:org.apache.karaf.shell.console:2.1.0] > at java.lang.Thread.run(Thread.java:637)[:1.6.0_20] > > > I found a similar trace at > http://felix.apache.org/site/rfc-147-overview.html but I'm not really > sure what it means. > > The uimInfo execute() method only does a few System.out's and returns > null - is there anything else I need to do? > > Thanks, > > Manuel > > > > > > 15:23:36,070 | INFO | l Console Thread | Console > | araf.shell.console.jline.Console 187 | 17 - > org.apache.karaf.shell.console - 2.1.0 | Exception caught while > executing command > java.lang.IllegalArgumentException: Cannot coerce info[] to any of [] > at > org.apache.felix.gogo.runtime.shell.Reflective.method(Reflective.java:174)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.CommandProxy.execute(CommandProxy.java:54)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:229)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:162)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:101)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:79)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.felix.gogo.runtime.shell.CommandSessionImpl.execute(CommandSessionImpl.java:71)[17:org.apache.karaf.shell.console:2.1.0] > at > org.apache.karaf.shell.console.jline.Console.run(Console.java:169)[17:org.apache.karaf.shell.console:2.1.0] > at java.lang.Thread.run(Thread.java:637)[:1.6.0_20] > > On Mon, Oct 18, 2010 at 2:32 PM, Guillaume Nodet <[email protected]> wrote: > > Note that @Autowired could be achieved by an explicit wiring in blueprint > if > > the bean has setters. > > Let me know if you need more help, that's an are i'm interested in going > to > > the bottom, as I'm still unclear what works and what does not. > > > > On Fri, Oct 15, 2010 at 22:24, Manuel Bernhardt < > [email protected]> > > wrote: > >> > >> Salut! > >> > >> On Fri, Oct 15, 2010 at 7:19 PM, Guillaume Nodet <[email protected]> > wrote: > >> > Yeah, that has changed in 2.1 where Karaf does not display the > >> > pre-installed > >> > bundle anymore. > >> > Try 'la' in the console to see all the bundles. The Aries Blueprint > >> > impl is > >> > used by a lot of bundles in karaf. > >> > >> Indeed. Well then I'll probably have some more surprises with the two > >> Blueprint implementations running side-by-side > >> > >> >> The issue I have now is that we use the Karaf shell extensions in > >> >> order to talk to our bundles via the console. This worked nicely with > >> >> a <command-bundle> declaration as long as I didn't inject > dependencies > >> >> with spring (but wired them via hand). Now, spring not being the one > >> >> initializing the shell <action> classes, the dependencies are not > >> >> initialized. > >> > > >> > Not sure to exactly follow what you did with spring. > >> > >> Mainly the shell extension (extending OsgiCommandSupport) has a member > >> that is injected via @AutoWired. The type is declared in the spring > >> bundle context. > >> > >> >> - how does the shell console look for it's extension points? Will it > >> >> only look in <command-bundle> definitions in a OSGI-INF/blueprint > >> >> path, or would it in theory be fine if the definition were in a > spring > >> >> bundle-context definition file (with a custom namespace mapping). My > >> >> aim would be to have spring initialize the instance (and wire its > >> >> dependencies) but still have the shell know about it / how to talk to > >> >> it. > >> > > >> > The console looks for services in the registry. The custom blueprint > >> > namespace is just a simple way to expose the service. > >> > To add a command to the console if you're no using blueprint, register > a > >> > service implementing the org.apache.felix.service.command.Function > >> > interface > >> > and with the osgi.command.function and osgi.command.scope service > >> > properties. Try "ls -a 14' for example in the karaf console to see a > >> > bunch > >> > of those methods. The helper classes are located in the > >> > o.a.karaf.shell.console bundle. > >> > >> Great, thanks! > >> > >> >> - it looks like http://karaf.apache.org/xmlns/shell/v1.0.0 isn't > >> >> online, whilst that would be handy to have > >> > > >> > Wanna raise a JIRA, that should be fixed. > >> > You can find it at > >> > > >> > > http://svn.apache.org/repos/asf/karaf/tags/karaf-2.1.0/shell/console/src/main/resources/org/apache/karaf/shell/console/commands/karaf-shell.xsd > >> > in the mean time. > >> > >> Will file a ticket > >> > >> >> - does what I am trying to do make any sense at all? (I'm rather new > >> >> to the latest OSGi spec, and am not sure what the usual practices > are) > >> > > >> > What are you trying to do? Do you only need to register a set of > >> > commands > >> > using spring-dm ? Do you really need to use the blueprint > implemnttion > >> > from > >> > spring? > >> > >> Actually I don't care so much for the blueprint implementation. What I > >> am after is spring's dependency injection toolset and the integration > >> test facility > >> ( > http://static.springsource.org/osgi/docs/2.0.0.M1/reference/html/testing.html#testing:integration > ). > >> If I understood things right, I do need spring dm to be running on the > >> platform in order to get those, or not? > >> > >> Thanks, > >> > >> Manuel > > > > > > > > -- > > Cheers, > > Guillaume Nodet > > ------------------------ > > Blog: http://gnodet.blogspot.com/ > > ------------------------ > > Open Source SOA > > http://fusesource.com > > > > > > > -- Cheers, Guillaume Nodet ------------------------ Blog: http://gnodet.blogspot.com/ ------------------------ Open Source SOA http://fusesource.com
