<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>Resource</title>
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="Resource";
        }
    }
    catch(err) {
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../jakarta/annotation/Priority.html" title="annotation in jakarta.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../jakarta/annotation/Resource.AuthenticationType.html" title="enum in jakarta.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?jakarta/annotation/Resource.html" target="_top">Frames</a></li>
<li><a href="Resource.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.element.detail">Element</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">jakarta.annotation</div>
<h2 title="Annotation Type Resource" class="title">Annotation Type Resource</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>@Target(value={TYPE,FIELD,METHOD})
 @Retention(value=RUNTIME)
 @Repeatable(value=<a href="../../jakarta/annotation/Resources.html" title="annotation in jakarta.annotation">Resources.class</a>)
public @interface <span class="memberNameLabel">Resource</span></pre>
<div class="block">The <code>Resource</code> annotation marks a resource that is needed
 by the application.  This annotation may be applied to an
 application component class, or to fields or methods of the
 component class.  When the annotation is applied to a
 field or method, the container will inject an instance
 of the requested resource into the application component
 when the component is initialized.  If the annotation is
 applied to the component class, the annotation declares a
 resource that the application will look up at runtime. 
 <p>
 Even though this annotation is not marked <code>Inherited</code>, deployment
 tools are required to examine all superclasses of any component
 class to discover all uses of this annotation in all superclasses.
 All such annotation instances specify resources that are needed
 by the application component.  Note that this annotation may
 appear on private fields and methods of superclasses; the container
 is required to perform injection in these cases as well.</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.6, Common Annotations 1.0</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="annotation.type.optional.element.summary">
<!--   -->
</a>
<h3>Optional Element Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
<caption><span>Optional Elements</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Optional Element and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../jakarta/annotation/Resource.AuthenticationType.html" title="enum in jakarta.annotation">Resource.AuthenticationType</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/annotation/Resource.html#authenticationType--">authenticationType</a></span></code>
<div class="block">The authentication type to use for this resource.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/annotation/Resource.html#description--">description</a></span></code>
<div class="block">Description of this resource.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/annotation/Resource.html#lookup--">lookup</a></span></code>
<div class="block">The name of the resource that the reference points to.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/annotation/Resource.html#mappedName--">mappedName</a></span></code>
<div class="block">A product-specific name that this resource should be mapped to.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/annotation/Resource.html#name--">name</a></span></code>
<div class="block">The JNDI name of the resource.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/annotation/Resource.html#shareable--">shareable</a></span></code>
<div class="block">Indicates whether this resource can be shared between
 this component and other components.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>java.lang.Class&lt;?&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../jakarta/annotation/Resource.html#type--">type</a></span></code>
<div class="block">The Java type of the resource.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="annotation.type.element.detail">
<!--   -->
</a>
<h3>Element Detail</h3>
<a name="name--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>name</h4>
<pre>public abstract&nbsp;java.lang.String&nbsp;name</pre>
<div class="block">The JNDI name of the resource.  For field annotations,
 the default is the field name.  For method annotations,
 the default is the JavaBeans property name corresponding
 to the method.  For class annotations, there is no default
 and this must be specified.</div>
<dl>
<dt>Default:</dt>
<dd>""</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="lookup--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>lookup</h4>
<pre>public abstract&nbsp;java.lang.String&nbsp;lookup</pre>
<div class="block">The name of the resource that the reference points to. It can
 link to any compatible resource using the global JNDI names.</div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>1.7, Common Annotations 1.1</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>""</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="type--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>type</h4>
<pre>public abstract&nbsp;java.lang.Class&lt;?&gt;&nbsp;type</pre>
<div class="block">The Java type of the resource.  For field annotations,
 the default is the type of the field.  For method annotations,
 the default is the type of the JavaBeans property.
 For class annotations, there is no default and this must be
 specified.</div>
<dl>
<dt>Default:</dt>
<dd>java.lang.Object.class</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="authenticationType--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>authenticationType</h4>
<pre>public abstract&nbsp;<a href="../../jakarta/annotation/Resource.AuthenticationType.html" title="enum in jakarta.annotation">Resource.AuthenticationType</a>&nbsp;authenticationType</pre>
<div class="block">The authentication type to use for this resource.
 This may be specified for resources representing a
 connection factory of any supported type, and must
 not be specified for resources of other types.</div>
<dl>
<dt>Default:</dt>
<dd>jakarta.annotation.Resource.AuthenticationType.CONTAINER</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="shareable--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>shareable</h4>
<pre>public abstract&nbsp;boolean&nbsp;shareable</pre>
<div class="block">Indicates whether this resource can be shared between
 this component and other components.
 This may be specified for resources representing a
 connection factory of any supported type, and must
 not be specified for resources of other types.</div>
<dl>
<dt>Default:</dt>
<dd>true</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="mappedName--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>mappedName</h4>
<pre>public abstract&nbsp;java.lang.String&nbsp;mappedName</pre>
<div class="block">A product-specific name that this resource should be mapped to.
 The <code>mappedName</code> element provides for mapping the
 resource reference to the name of a resource known to the
 applicaiton server.  The mapped name could be of any form.
 <p>Application servers are not required to support any particular
 form or type of mapped name, nor the ability to use mapped names.
 The mapped name is product-dependent and often installation-dependent.
 No use of a mapped name is portable.</p></div>
<dl>
<dt>Default:</dt>
<dd>""</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="description--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>description</h4>
<pre>public abstract&nbsp;java.lang.String&nbsp;description</pre>
<div class="block">Description of this resource.  The description is expected
 to be in the default language of the system on which the
 application is deployed.  The description can be presented
 to the Deployer to help in choosing the correct resource.</div>
<dl>
<dt>Default:</dt>
<dd>""</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../jakarta/annotation/Priority.html" title="annotation in jakarta.annotation"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../jakarta/annotation/Resource.AuthenticationType.html" title="enum in jakarta.annotation"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?jakarta/annotation/Resource.html" target="_top">Frames</a></li>
<li><a href="Resource.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.element.detail">Element</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
