Use reference to access your App component that Ds creates for you. You
currently have two instances of App - one from DS and one from your <bean>.

On Fri, 9 Jun 2023, 23:33 z8sbk.yahoo.com.ar via user, <
user@karaf.apache.org> wrote:

> Hi Paul,
> I'm not sure what you mean with using <reference> instead of <bean>. I
> tried this:
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
>
> <reference id="conf" interface="com.conf.IConf"/>
>
> <bean id="app" class="com.app.App" >
>
> <property name="conf" ref="conf"/>
>
> </bean>
>
>
>     <camelContext xmlns="http://camel.apache.org/schema/blueprint";>
>         <route>
>             <from uri="timer:simple?period=5000"/>
>             <to uri="bean:app?method=doIt"/>
>         </route>
>     </camelContext>
>
> </blueprint>
>
> Now the error is:
>
> 19:21:14.974 ERROR [xxxx\apache-karaf-4.2.15/deploy] Unable to start
> container for blueprint bundle confByDS.xml/0.0.0
> org.osgi.service.blueprint.container.ComponentDefinitionException: Unable
> to find property descriptor conf on com.app.App
>         at
> org.apache.aries.blueprint.container.BeanRecipe.getPropertyDescriptor(BeanRecipe.java:831)
> ~[!/:1.10.3]
>         at
> org.apache.aries.blueprint.container.BeanRecipe.setProperty(BeanRecipe.java:813)
> ~[!/:1.10.3]
>         at
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:784)
> ~[!/:1.10.3]
>         at
> org.apache.aries.blueprint.container.BeanRecipe.setProperties(BeanRecipe.java:765)
> ~[!/:1.10.3]
>         at
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:699)
> ~[!/:1.10.3]
>         at
> org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
> ~[!/:1.10.3]
>         at
> org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
> ~[!/:1.10.3]
>
> Could you please fix my previous blueprint?
> Thanks in advanced.
>
> El viernes, 9 de junio de 2023, 17:25:31 ART, Paul McCulloch <
> pkmccull...@gmail.com> escribió:
>
>
> You need to use <reference> in your blueprint to access your ds component.
> Using <bean> creates a new instance, but doesn't wire it into the ds
> infrastructure.
>
> On Fri, 9 Jun 2023, 16:22 z8sbk.yahoo.com.ar via user, <
> user@karaf.apache.org> wrote:
>
> Hi,
> I'm trying to understand how declarative service works. In a bundle, I
> have these two clasess, very basic:
>
> @Component
> public class App implements IApp {
>
> @Reference
> private IConf conf;
>
> public App() {}
>
> public void doIt() {
>
> System.out.println("foo=" + conf.getFoo());
>
> }
>
> }
>
> @Component(name = "Conf", immediate = true, configurationPid = "confByDS")
> public class Conf implements IConf {
>
> private String foo = "bar";
>
>
> public Conf() {}
> @Override
>
> public String getFoo() {
>
> return foo;
>
> }
>
> @Activate
> @Modified
> public void activate(ComponentContext context) {
>
> foo = context.getProperties().get("foo") != null ? (String)
> context.getProperties().get("foo") : this.foo;
>
> }
>
> }
>
> Then, I have this blueprint/camel route:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
>
> <bean id="app" class="com.app.App" />
>     <camelContext xmlns="http://camel.apache.org/schema/blueprint";>
>         <route>
>             <from uri="timer:simple?period=5000"/>
>             <to uri="bean:app?method=doIt"/>
>         </route>
>     </camelContext>
>
> </blueprint>
>
> After deploying the bundle, when I put the blueprint in /deploy, throws a
> NullPointerException in conf.getFoo(), which means that the Conf reference
> is not injected:
>
> Message History
>
> ---------------------------------------------------------------------------------------------------------------------------------------
> RouteId              ProcessorId          Processor
>                                                 Elapsed (ms)
> [route3            ] [route3            ] [timer://simple?period=5000
>                                               ] [         7]
> [route3            ] [to2               ] [bean:app?method=doIt
>                                               ] [         0]
>
> Stacktrace
>
> ---------------------------------------------------------------------------------------------------------------------------------------
> java.lang.NullPointerException: null
>         at com.app.App.doIt(App.java:17) ~[!/:?]
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ~[?:1.8.0_321]
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> ~[?:1.8.0_321]
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:1.8.0_321]
>
> I think I'm misunderstanding how the DI in Karaf works plus DS, could you
> please tell me what am I missing? Does DS work with Camel XML DSL routes?
>
> Thanks in advanced.
> Nick.
>
>
>

Reply via email to