Obviously I didn't mean creating new annotations for everything but for
some of the items that were originally developed for Spring scanners.
@Produce, @Consume, @EndpointInject and so on.
When using Blueprint I ran into problems with using some of the
annotations.  I can't recall which right now.

There are only two concerns I can really think of in terms of reuse of
existing annotations.  The first is if the annotations are in a bundle like
Spring or other technology which wouldn't be included as a dependency
otherwise. Obviously pulling in a dependency like that just to get the
annotations would be silly.

The second concern is behavioral expectations.  If one uses the @Produce,
@Consume, @BeanInject or @EndpointInject annotations there are expectations
of how those will work based on existing technologies. One example that
comes to me off the top of my head is if I were to create an injection
would I do:

@EndpointInject(uri = "direct:inbound")
Endpoint endpoint;

or
@Inject
@Uri("direct:inbound")
Endpoint endpoint;

I'd guess that the CDI version would be newer and preferable.

Brad


On Mon, Aug 1, 2016 at 9:03 AM, Matt Sicker <boa...@gmail.com> wrote:

> It would definitely make sense to reuse the existing annotations. If a user
> can migrate from Blueprint to DS/SCR relatively easily, that would
> definitely help in adoption.
>
> On 1 August 2016 at 09:01, Claus Ibsen <claus.ib...@gmail.com> wrote:
>
> > On Mon, Aug 1, 2016 at 3:56 PM, Brad Johnson
> > <brad.john...@mediadriver.com> wrote:
> > > I figured that was probably the case so started work on something this
> > week
> > > end.  Contributing that sort of thing is possible.  I'm not sure if the
> > way
> > > that Spring did it is exactly the way I'd do it if writing it from
> > > scratch.  The first shot at it in a couple of hours time created a
> > > constrained version.
> > >
> > > From the SCR component which extends AbstractCamelRunner I added a
> method
> > > called initBeans.
> > >
> > >
> > > private void initBeans() {
> > >
> > > SimpleRegistry sRegistry = (SimpleRegistry) registry;
> > > SCRRegistry scrRegistry = new SCRRegistry(sRegistry, getContext());
> > > scrRegistry.register(MyValidator.class);
> > > scrRegistry.register(MyFileNameValidator.class);
> > >
> > > }
> > >
> > > The SCRRegistry just instantiates the classes passed in and then looks
> > for
> > > an @To annotation.  I didn't want to reuse the existing annotations
> > because
> > > I was not sure if that would be a good idea or not.  The registry looks
> > at
> > > the fields on the classes and does this:
> > >
> > > for(To to: declaredField.getAnnotationsByType(To.class))
> > > {
> > > declaredField.setAccessible(true);
> > >
> >
> declaredField.set(o,CamelProxyFactory.createProducer(declaredField.getType(),
> > > camelContext, to.uri()));
> > > }
> > >
> > > The @To annotation has a uri field so it's very similar to what the
> > > @Produce does.
> > >
> > > However, after I finished it and sat back to see what to do next I
> > started
> > > thinking that maybe this isn't the way I'd do it if I were doing it
> from
> > > scratch.  What I mean is that maybe it makes more sense to put the @To
> > > annotations on the interface methods themselves.  Then instead of
> having
> > > the class that uses that interface specify the @To and URI it would
> > specify
> > > @Bean or @EventSource or something else.  The SCRRegistry would then
> look
> > > to see if that interface had already been created and proxied.  If so
> it
> > > just sets it on the field.  If not it creates a new one, sets up
> > producers
> > > for each of the @To methods and puts them in a map in the invocation
> > > handler, and then puts the proxied interface into the registry.
> > >
> > > Perhaps I should address this on the dev email.
> > >
> >
> > Yes
> >
> > > I'm wondering if it would make sense to reuse existing annotations or
> > > create new ones.
> > >
> >
> > We for sure do NOT want new annotations. Whatever IoC mehanism in osgi
> > SCR is outside the scope of Apache Camel. Ideally you should use
> > exisiting such as Blueprint or CDI on OSGi. Not re-invent something
> > special. Or get in touch with Apache Felix folks and talk about IoC
> > framework for SCR.
> >
> >
> >
> > > Brad
> > >
> > > On Mon, Aug 1, 2016 at 3:44 AM, Claus Ibsen <claus.ib...@gmail.com>
> > wrote:
> > >
> > >> On Sun, Jul 31, 2016 at 6:01 AM, Brad Johnson
> > >> <brad.john...@mediadriver.com> wrote:
> > >> > I've started experimenting with SCR some. One item I'm curious about
> > is
> > >> if
> > >> > there are any annotations or mechanics available for using the Camel
> > >> proxy
> > >> > or other mechanics like @EndpointInject, @Produce, @Consume.
> > >> >
> > >> > The use of the @Produce annotation with uri is quite convenient for
> > >> making
> > >> > external connections.  As an example, I have validator that I use
> in a
> > >> > filter for go/no go in processing.  In that validator when it fails
> I
> > >> use a
> > >> > producer template to send a message to a route the fires off an
> email.
> > >> > With the @Produce that is even simpler because the interface is very
> > >> > explicit about what it is and what it is for yet remains nicely
> > >> decoupled.
> > >> >
> > >> > I'm sure I can make my own factory to create such producers.  But
> I'm
> > >> > wondering if (a) does it exist currently and (b) are there any plans
> > to
> > >> add
> > >> > it?  Obviously I'm not using Blueprint, Spring or Guice so those
> > >> libraries
> > >> > aren't available in this context.
> > >> >
> > >>
> > >> Does not exists, and there is no plan.
> > >> Community users would need to dive into this themselves and look what
> > >> is possible.
> > >>
> > >> We love contributions
> > >> http://camel.apache.org/contributing
> > >>
> > >>
> > >> > Brad
> > >>
> > >>
> > >>
> > >> --
> > >> Claus Ibsen
> > >> -----------------
> > >> http://davsclaus.com @davsclaus
> > >> Camel in Action 2: https://www.manning.com/ibsen2
> > >>
> >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > http://davsclaus.com @davsclaus
> > Camel in Action 2: https://www.manning.com/ibsen2
> >
>
>
>
> --
> Matt Sicker <boa...@gmail.com>
>

Reply via email to