There is blueprint annotations. Though not sure how mature that is.
http://aries.apache.org/modules/blueprintannotation.html



On Thu, Nov 7, 2013 at 2:19 PM, alexey-s <[email protected]> wrote:
> It's no secret that the OSGI Blueprint implements a proxy object for the
> service. In the old specification OSGI used references to objects.
> Very often forget to let go of the service object obtained from the
> ServiseReference.
> For this reason, it is desirable to use the links provided in the blueprint.
> Camel process can be described in a blueprint xml file. But it is not always
> convenient. In particular, all of the components (bean) should be in the
> open part of the osgi bundle.
> Using a public method, referring to the components of the private part of
> the osgi bundle is very bad. BIND swears by these methods.
> There is only one. We must use the Java DSL Builder process.
>
> <reference id="externalService" interface="external.ExternalService"/>
>
> <bean id="routeBuilder" class="publicpackage.LocalRouteBuilder"/>
>
> <camelContext id="camel-ccje-exchange-oos-doc-read"
> xmlns="http://camel.apache.org/schema/blueprint";>
>   <propertyPlaceholder id="properties" location="blueprint:placeholder"/>
>   <routeBuilder ref="routeBuilder"/>
> </camelContext>
>
> Inside RouteBuilder can use annotations @ PropertyInject, @ EndpointInject.
> But to get service "externalService" can only be the old-fashioned
>
> import external.ExternalService;
> import privatepackage.MyBean;
>
> public class LocalRouteBuilder extends RouteBuilder {
>    public void configure() throws Exception {
>       ExternalService externalService =
> CamelContextHelper.mandatoryLookup(getContext(), "externalService",
> ExternalService.class);
>       MyBean bean = new MyBean(externalService);
>
>       from("direct.start)
>         .bean(bean, "doProcess")
>       .end();
>    }
> }
>
> Similarly, it was possible to get any property
>
> String value = CamelContextHelper.parseText(getContext(),
> "{{my_property}}");
>
> or through annotation
>
> @PropertyInject ("my_property") String value;
>
>
> I propose to add an annotation @BeanInject
>
> import external.ExternalService;
> import privatepackage.MyBean;
>
> public class LocalRouteBuilder extends RouteBuilder {
>    @BeanInject(ref="externalService") ExternalService externalService;
>
>    public void configure() throws Exception {
>       MyBean bean = new MyBean(externalService);
>
>       from("direct.start)
>         .bean(bean, "doProcess")
>       .end();
>    }
> }
>
> In the blueprint and in spring you can pass all the components as properties
> or constructor parameters.
> This can be done in Guice, jndi, JUnit.
>
> I am at the project using the OSGI blueprint for services and management
> Camel processes. Inside guice for working with MyBatis, not to show the
> private part of the OSGI bundle.
>
> By the way. There is one nice little bug.
> @Produce and @EndpointInject perform the same action in
> DefaultCamelBeanPostProcessor.
> We expect that the implementation of the @Produce is ProducerTemplate or
> Producer. We can get ConsumerTemplate, PollingConsumer, Endpoint.
>
> @Produce(url="direct.start")
> ConsumerTemplate consumer; // raze it right?
>
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Propose-add-annotation-BeanInject-tp5742782.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: [email protected]
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to