001 /*
002 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 //Copyright Sun Microsystems Inc. 2004 - 2005.
027 package javax.annotation;
028
029 import java.lang.annotation.*;
030 import static java.lang.annotation.ElementType.*;
031 import static java.lang.annotation.RetentionPolicy.*;
032
033 /**
034 * The Resource annotation marks a resource that is needed
035 * by the application. This annotation may be applied to an
036 * application component class, or to fields or methods of the
037 * component class. When the annotation is applied to a
038 * field or method, the container will inject an instance
039 * of the requested resource into the application component
040 * when the component is initialized. If the annotation is
041 * applied to the component class, the annotation declares a
042 * resource that the application will look up at runtime. <p>
043 *
044 * Even though this annotation is not marked Inherited, deployment
045 * tools are required to examine all superclasses of any component
046 * class to discover all uses of this annotation in all superclasses.
047 * All such annotation instances specify resources that are needed
048 * by the application component. Note that this annotation may
049 * appear on private fields and methods of superclasses; the container
050 * is required to perform injection in these cases as well.
051 *
052 * @since Common Annotations 1.0
053 */
054 @Target({TYPE,FIELD,METHOD})
055 @Retention(RUNTIME)
056 public @interface Resource {
057 /**
058 * The JNDI name of the resource. For field annotations,
059 * the default is the field name. For method annotations,
060 * the default is the JavaBeans property name corresponding
061 * to the method. For class annotations, there is no default
062 * and this must be specified.
063 */
064 String name() default "";
065
066 /**
067 * The Java type of the resource. For field annotations,
068 * the default is the type of the field. For method annotations,
069 * the default is the type of the JavaBeans property.
070 * For class annotations, there is no default and this must be
071 * specified.
072 */
073 Class type() default java.lang.Object.class;
074
075 /**
076 * The two possible authentication types for a resource.
077 */
078 enum AuthenticationType {
079 CONTAINER, APPLICATION
080 }
081
082 /**
083 * The authentication type to use for this resource.
084 * This may be specified for resources representing a
085 * connection factory of any supported type, and must
086 * not be specified for resources of other types.
087 */
088 AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
089
090 /**
091 * Indicates whether this resource can be shared between
092 * this component and other components.
093 * This may be specified for resources representing a
094 * connection factory of any supported type, and must
095 * not be specified for resources of other types.
096 */
097 boolean shareable() default true;
098
099 /**
100 * A product specific name that this resource should be mapped to.
101 * The name of this resource, as defined by the <code>name</code>
102 * element or defaulted, is a name that is local to the application
103 * component using the resource. (It's a name in the JNDI
104 * <code>java:comp/env</code> namespace.) Many application servers
105 * provide a way to map these local names to names of resources
106 * known to the application server. This mapped name is often a
107 * <i>global</i> JNDI name, but may be a name of any form. <p>
108 *
109 * Application servers are not required to support any particular
110 * form or type of mapped name, nor the ability to use mapped names.
111 * The mapped name is product-dependent and often installation-dependent.
112 * No use of a mapped name is portable.
113 */
114 String mappedName() default "";
115
116 /**
117 * Description of this resource. The description is expected
118 * to be in the default language of the system on which the
119 * application is deployed. The description can be presented
120 * to the Deployer to help in choosing the correct resource.
121 */
122 String description() default "";
123 }
|