| <body> |
| |
| <p> |
| JAM's core API. This package includes JAM's factory mechanism |
| (the Jam* classes) as well as object model (J* classes) which |
| are used to model a set of Java types. |
| </p> |
| |
| <!-- |
| |
| <p> |
| The Java API for Metadata (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> |
| |
| |
| <h3>Comparison of Java Type Inspection Technologies</h3> |
| |
| |
| |
| <table border='1'> |
| <tr> |
| <td /> |
| <td colspan='2' align='center'>JDK 1.4</td> |
| <td colspan='2' align='center'>JDK 1.5</td> |
| </tr> |
| <tr> |
| <td /> |
| <td>Javadoc</td> |
| <td>Reflect</td> |
| <td>Javadoc</td> |
| <td>Reflect</td> |
| <td>JavaBeans</td> |
| <td>XDoclet</td> |
| <td>QDox</td> |
| <td>JAM</td> |
| </tr> |
| |
| <tr> |
| <td>JSR-175 from sources</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>JSR-175 from classfiles</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Javadoc-style metadata from source</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no</td> |
| <td>?</td> |
| <td>no</td> |
| <td>no</td> |
| <td>?</td> |
| <td>?</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Line/column number info</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no(1)</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no(1)</td> |
| <td>no(1)</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Retrieve comments from source</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Method parameter names</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no(1)</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no(1)</td> |
| <td>no(1)</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Overlay external metadata</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Full introspection of 175 annotation types<br> |
| (including default values)</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| |
| <tr> |
| <td>Parse invalid source files</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Extensibility/SPI</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| <tr> |
| <td>Supports 'Property' abstraction</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| <td>no</td> |
| <td>no</td> |
| <td bgcolor='#22DD22'>yes</td> |
| </tr> |
| |
| </table> |
| |
| <h4>notes</h4> |
| <p> |
| (1) This information is embedded in the .class files when the -g debug |
| flag specified on javac so that it can be displayed in stack |
| traces. However, there still is no API provided for retrieving |
| this information at runtime.<br /> |
| </p> |
| |
| |
| --> |
| |
| </body> |