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 <f...@caucho.com> > 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: >> >> <jms:FileQueue> >> <Named>userUpdates</Named> >> <mypkg:UserUpdates xmlns:mypkg="urn:java:com.me.mypkg"/> >> </jms:FileQueue> >> >> (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