blob: a68c6945583bc319dd231f37c26447235c3e5ccc [file] [log] [blame]
<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>