| <body> |
| |
| <p> |
| The Java Abstraction Model (JAM) provides a representation of |
| Java abstractions (such as classes and methods) and their |
| associated metadata. This model serves to decouple its clients' code |
| from any specific introspection mechanism such as javadoc or reflection. |
| </p> |
| |
| <p>This approach has several key advantages:</p> |
| <ul> |
| |
| <li><b>A unified introspection API for sources and classes.</b> |
| In fact, source- and class-based representations can be freely |
| interwoven, if desired.</li> |
| <p> |
| <li><b>A measure of certainty in an uncertain world.</b> |
| Metadata is a hot topic at the moment, and the way we deal with it |
| is going to change dramatically over the next year or two. |
| By writing to the JAM API, you can be sure that you won't |
| have to rewrite your code to accommodate emerging tools and standards |
| (JSR175, for example).</li> |
| <p> |
| <li><b>Pluggable metadata stores.</b> |
| Metadata can be retrieved from an external source (such as an XML file) |
| or even generated programmatically. This also allows metadata to |
| be associated with java constructs that may not normally support |
| annotations (such as packages).</li> |
| <p> |
| <li><b>A Node-based view of Java constructs.</b> |
| JAM clients have the option of viewing their java constructs as a tree |
| of generic, DOM-like nodes (packages contain classes, classes contain |
| methods) each of which may have associated annotations. This is |
| extremely helpful for tools which wish to support annotation |
| inheritance.</li> |
| |
| </ul> |
| |
| </body> |