Re: [Resin-interest] Resin 4: JMS Queue Injection
On Mar 24, 2009, at 10:06 AM, Scott Hernandez wrote: > Okay, got it. I will give it a try. Also, this means I can annotate > beans with @Production/@Mock in the xml also, right? Correct. > I have a feeling my xmlns declarations section (in resin-web.xml) is > going to be very long. ;( There's a solution for that. There's a special "namespaces" file that sits in com/mycom/mypkg that lists alias packages, one per line. So you could put all of your packages in a "namespaces" in com/mycom and use only one namespace declaration. > Maybe I missed it but was there a section in jsr299 dealing with > annotations of beans in xml, or is this resin specific? It's part of jsr299. You can specific any annotation as an XML child element of a bean definition and it gets added just as if you had declared the annotation on the bean. -- Scott > > > Thanks, > Scott > On Tue, Mar 24, 2009 at 9:50 AM, Scott Ferguson > wrote: >> >> On Mar 23, 2009, at 12:46 PM, Scott Hernandez wrote: >> >>> >>> And everything is fine, but if I add another Queue (in resin- >>> web.xml) >>> then I get a problem as I have more than one Queue and it is not >>> unique for injection. Now, in the examples it shows using >>> @Named("QueueName") but that annotation cannot be applied to a field >>> as the example seems to indicate. >>> >>> @Named("userUpdates") >>> private BlockingQueue userUpdateQueue; >>> >>> How do I differentiate between the queues in my injection >>> annotations? >> >> The docs are a bit out of date, because the Java Injection spec has >> changed a bit from the earlier draft. "@Named" is now _only_ for EL >> naming, not for binding. >> >> In this case, you're supposed to create your own @BindingType >> annotation, @UserUpdates. So you inject it like: >> >> @UserUpdates >> private BlockingQueue userUpdateQueue; >> >> And you configure it like: >> >> >>userUpdates >> >> >> >> (I'd put the xmlns:mypkg at the top in a real config file.) >> >> Creating the annotation is a little bit of extra work but has the >> following advantages: >> >> 1. it's "type safe", i.e. the compiler (and Java Injection) can >> verify the @UserUpdates is a valid @BindingType annotation, e.g. >> saving you from typos. >> 2. it's documented by JavaDoc, so you can explain the purpose of >> the @UserUpdates >> 3. it fits into IDEs, because IDEs have access to the annotation >> and to the xmlns of your configuration >> 4. it gives you a chance to think carefully about the organization >> of your components, in this case to double check that "UserUpdates" >> is >> a logical and self-documenting description of the queue you're using. >> >> The UserUpdates annotation is defined like: >> >> package com.me.mypkg; >> >> import static java.lang.annotation.ElementType.*; >> import static java.lang.annotation.RetentionPolicy.*; >> import java.lang.annotation.Retention; >> import java.lang.annotation.Target; >> >> import javax.inject.BindingType; >> >> @BindingType >> @Target({TYPE,FIELD,METHOD,PARAMETER}) >> @Retention(RUNTIME) >> public @interface UserUpdates { >> } >> >> (Resin does have a com.caucho.config.Name for generic things like >> databases, but that kind of general annotation is discouraged.) >> >> -- Scott >>> >>> >>> Thanks in advance, >>> Scott >>> >>> >>> ___ >>> resin-interest mailing list >>> resin-interest@caucho.com >>> http://maillist.caucho.com/mailman/listinfo/resin-interest >> >> >> >> ___ >> resin-interest mailing list >> resin-interest@caucho.com >> http://maillist.caucho.com/mailman/listinfo/resin-interest >> > > > ___ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest ___ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest
Re: [Resin-interest] Resin 4: JMS Queue Injection
Okay, got it. I will give it a try. Also, this means I can annotate beans with @Production/@Mock in the xml also, right? I have a feeling my xmlns declarations section (in resin-web.xml) is going to be very long. ;( Maybe I missed it but was there a section in jsr299 dealing with annotations of beans in xml, or is this resin specific? Thanks, Scott On Tue, Mar 24, 2009 at 9:50 AM, Scott Ferguson wrote: > > On Mar 23, 2009, at 12:46 PM, Scott Hernandez wrote: > >> >> And everything is fine, but if I add another Queue (in resin-web.xml) >> then I get a problem as I have more than one Queue and it is not >> unique for injection. Now, in the examples it shows using >> @Named("QueueName") but that annotation cannot be applied to a field >> as the example seems to indicate. >> >> @Named("userUpdates") >> private BlockingQueue userUpdateQueue; >> >> How do I differentiate between the queues in my injection annotations? > > The docs are a bit out of date, because the Java Injection spec has > changed a bit from the earlier draft. "@Named" is now _only_ for EL > naming, not for binding. > > In this case, you're supposed to create your own @BindingType > annotation, @UserUpdates. So you inject it like: > > @UserUpdates > private BlockingQueue userUpdateQueue; > > And you configure it like: > > > userUpdates > > > > (I'd put the xmlns:mypkg at the top in a real config file.) > > Creating the annotation is a little bit of extra work but has the > following advantages: > > 1. it's "type safe", i.e. the compiler (and Java Injection) can > verify the @UserUpdates is a valid @BindingType annotation, e.g. > saving you from typos. > 2. it's documented by JavaDoc, so you can explain the purpose of > the @UserUpdates > 3. it fits into IDEs, because IDEs have access to the annotation > and to the xmlns of your configuration > 4. it gives you a chance to think carefully about the organization > of your components, in this case to double check that "UserUpdates" is > a logical and self-documenting description of the queue you're using. > > The UserUpdates annotation is defined like: > > package com.me.mypkg; > > import static java.lang.annotation.ElementType.*; > import static java.lang.annotation.RetentionPolicy.*; > import java.lang.annotation.Retention; > import java.lang.annotation.Target; > > import javax.inject.BindingType; > > @BindingType > @Target({TYPE,FIELD,METHOD,PARAMETER}) > @Retention(RUNTIME) > public @interface UserUpdates { > } > > (Resin does have a com.caucho.config.Name for generic things like > databases, but that kind of general annotation is discouraged.) > > -- Scott >> >> >> Thanks in advance, >> Scott >> >> >> ___ >> resin-interest mailing list >> resin-interest@caucho.com >> http://maillist.caucho.com/mailman/listinfo/resin-interest > > > > ___ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest > ___ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest
Re: [Resin-interest] Resin 4: JMS Queue Injection
On Mar 23, 2009, at 12:46 PM, Scott Hernandez wrote: > > And everything is fine, but if I add another Queue (in resin-web.xml) > then I get a problem as I have more than one Queue and it is not > unique for injection. Now, in the examples it shows using > @Named("QueueName") but that annotation cannot be applied to a field > as the example seems to indicate. > > @Named("userUpdates") > private BlockingQueue userUpdateQueue; > > How do I differentiate between the queues in my injection annotations? The docs are a bit out of date, because the Java Injection spec has changed a bit from the earlier draft. "@Named" is now _only_ for EL naming, not for binding. In this case, you're supposed to create your own @BindingType annotation, @UserUpdates. So you inject it like: @UserUpdates private BlockingQueue userUpdateQueue; And you configure it like: userUpdates (I'd put the xmlns:mypkg at the top in a real config file.) Creating the annotation is a little bit of extra work but has the following advantages: 1. it's "type safe", i.e. the compiler (and Java Injection) can verify the @UserUpdates is a valid @BindingType annotation, e.g. saving you from typos. 2. it's documented by JavaDoc, so you can explain the purpose of the @UserUpdates 3. it fits into IDEs, because IDEs have access to the annotation and to the xmlns of your configuration 4. it gives you a chance to think carefully about the organization of your components, in this case to double check that "UserUpdates" is a logical and self-documenting description of the queue you're using. The UserUpdates annotation is defined like: package com.me.mypkg; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.*; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.inject.BindingType; @BindingType @Target({TYPE,FIELD,METHOD,PARAMETER}) @Retention(RUNTIME) public @interface UserUpdates { } (Resin does have a com.caucho.config.Name for generic things like databases, but that kind of general annotation is discouraged.) -- Scott > > > Thanks in advance, > Scott > > > ___ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest ___ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest