+1 for a commons.annoscan

Concerning the question of how to design the API for this scanner:

Sometimes there is not a fixed set of annotations to scan for (like a.g. JPA) 
but one doesn't even a priori know which annotations are really important. 
In WebBeans any user may define it's own annotations in his custom project and 
define e.g. a custom @StereoType @AdministratorAction. 
So this is a highly dynamic situation and there are 3 ways to cope with it 
coming to my mind:

1.) scan for all annotations and store them all for later queries. (which is 
the scannotation+javassist way currently used in openwebbeans)
2.) multi-pass scanning (this would be more time consuming but has a small 
memory footprint)
3.) scan all annotations and remove all unnecessary ones. 


LieGrue,
strub

--- Bernd Bohmann <bernd.bohm...@atanion.com> schrieb am So, 18.1.2009:

> Von: Bernd Bohmann <bernd.bohm...@atanion.com>
> Betreff: Re: Scanning for annotated classes in MyFaces 2
> An: "MyFaces Development" <dev@myfaces.apache.org>
> Datum: Sonntag, 18. Januar 2009, 22:00
> Hello,
> 
> perhaps the annotation scanning was already solved by
> openejb?
> We should try to create a common annotation module for
> apache projects
> like openejb, tomcat, cxf and myfaces.
> 
> Regards
> 
> Bernd
> 
> 
> 
> Gerhard Petracek schrieb:
> > hello,
> > 
> > i agree with simon.
> > 
> > regards,
> > gerhard
> > 
> > 
> > 
> > 2009/1/18 Simon Lessard
> <simon.lessar...@gmail.com>
> > 
> >> Hi again,
> >>
> >> Actually, much more packages have to be scanned.
> The goal of those
> >> annotation is 0-Config, so a faces-config.xml
> might not even be needed
> >> anymore in the libraries. Anyway, before
> implementing any kind of package
> >> filter, I would wait for the final spec version,
> as long as the scanner is
> >> designed to easily include such filter if/when the
> need arise.
> >>
> >>
> >> Regards,
> >>
> >> ~ Simon
> >>
> >>
> >> On Sun, Jan 18, 2009 at 11:15 AM, Cagatay Civici
> <cagatay.civ...@gmail.com
> >>> wrote:
> >>> I also have some questions for the JSF 2.0 EG,
> like what classpaths
> >>>> need to be scanned by default. Or the
> policy of dealing with runtime
> >>>> invisible annotations (I can read them,
> but Reflection cannot). I'm
> >>>> also interested in general rules regarding
> class/method signatures.
> >>>> For example, do you need to implement a
> specific interface when
> >>>> annotating a class with @FacesComponent?
> >>>
> >>> Afaik, only jars with a faces-config.xml under
> META-INF are subject to
> >>> scan in classpath.
> >>>
> >>> On Sun, Jan 18, 2009 at 4:01 PM, Jan-Kees van
> Andel <
> >>> jankeesvanan...@gmail.com> wrote:
> >>>
> >>>>> That sounds great.
> >>>>>
> >>>>> What is your general approach? Just
> read in the class as byte[], then
> >>>>> use the class-file-format rules to get
> to the annotations sections on
> >>>>> the class and the methods? From my
> quick scan of the classfile spec it
> >>>>> seemed reasonably easy to do that...
> >>>>>
> >>>> This line is the important one:
> >>>> DataInputStream dis = new
> DataInputStream(new BufferedInputStream(new
> >>>> FileInputStream(classFile)));
> >>>>
> >>>> The DataInputStream is responsible for
> delivering the bytecode to me
> >>>> as easy-to-read ints, shorts and bytes.
> >>>> The first chapter of this document
> specifies the relation between the
> >>>> terms used in the spec and the
> DataInputStream API.
> >>>>
> >>>>
> http://java.sun.com/docs/books/jvms/second_edition/ClassFileFormat-Java5.pdf
> >>>>
> >>>> From there it's just reading each
> field, which is quite cumbersome and
> >>>> hard to get right the first time, because
> you need to read the spec
> >>>> very carefully. For example, when reading
> a double or long, you need
> >>>> to skip the next byte. Forget this and you
> get annoying errors, like
> >>>> EOF or variables that contain nonsense.
> >>>> But when you get the hang of it, it's
> not that hard.
> >>>>
> >>>>> I'd be interested to know the
> actual requirements that MyFaces has for
> >>>>> such a scanner. For example, does it
> ever need to look for annotations
> >>>>> on methods when the class itself is
> not annotated?
> >>>>>
> >>>> I also have some questions for the JSF 2.0
> EG, like what classpaths
> >>>> need to be scanned by default. Or the
> policy of dealing with runtime
> >>>> invisible annotations (I can read them,
> but Reflection cannot). I'm
> >>>> also interested in general rules regarding
> class/method signatures.
> >>>> For example, do you need to implement a
> specific interface when
> >>>> annotating a class with @FacesComponent?
> >>>>
> >>>>> Your comment about "expose parsed
> classes" seems to imply that you are
> >>>>> providing some kind of DOM-style API.
> I would have thought that a
> >>>>> SAX-style API would be better, ie
> various bits of code interested in
> >>>>> annotations registers callbacks for
> annotations it cares about with the
> >>>>> "scanner". Then the scanner
> scans all jars in the classpath and when
> >>>>> something is found that matches a
> "registered" annotation, then it
> >>>>> invokes the appropriate callback. That
> approach would minimise memory
> >>>>> usage, and I can't see where we
> would need anything dom-like...
> >>>> Well, for performance reasons you would
> like a SAX style API, but
> >>>> afaics, the class file format is not very
> developer friendly. Maybe it
> >>>> just takes some getting used to, but on
> first sight, it looks less
> >>>> intuitive than SAX parsing an XML
> document. For example, class
> >>>> attributes are placed below the fields and
> methods, so you don't know
> >>>> the class annotations when reading through
> the fields and methods.
> >>>> That's not very intuitive for a
> developer.
> >>>>
> >>>> My plan was not to fully initialize the
> classes, but just fill them
> >>>> with the bytes read. This way, I get a
> little bit more structure so I
> >>>> don't have to think in bits and bytes
> too much. The heavy work will be
> >>>> done lazily. For example, I don't
> initialize the classes' fields
> >>>> unless the user asks for it, probably
> resulting in less memory usage
> >>>> and better performance than a fully
> fledged DOM model.
> >>>>
> >>>> But there's only one way to find out
> and that's implementing and testing
> >>>> it.
> >>>>
> >>>> I'm gonna look at a SAX style API.
> Maybe it's not as bad as I first
> >>>> thought...
> >>>>
> >>>> Regards,
> >>>>
> >>>> /Jan-Kees
> >>>>
> >>>
> > 
> >



Reply via email to