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
>>>
>>
>>
>


-- 

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces

Reply via email to