/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2005-2018 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * https://oss.oracle.com/licenses/CDDL+GPL-1.1 * or LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package javax.annotation; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.Target; /** * The Resource 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. *

* Even though this annotation is not marked Inherited, 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. *

* * @since 1.6, Common Annotations 1.0 */ @Target({ TYPE, FIELD, METHOD }) @Retention(RUNTIME) @Repeatable(Resources.class) public @interface Resource { /** * 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. */ String name() default ""; /** * The name of the resource that the reference points to. It can link to any * compatible resource using the global JNDI names. * * @since 1.7, Common Annotations 1.1 */ String lookup() default ""; /** * 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. */ Class type() default java.lang.Object.class; /** * The two possible authentication types for a resource. */ enum AuthenticationType { CONTAINER, APPLICATION } /** * 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. */ AuthenticationType authenticationType() default AuthenticationType.CONTAINER; /** * 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. */ boolean shareable() default true; /** * A product-specific name that this resource should be mapped to. The * mappedName 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. *

* 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. *

*/ String mappedName() default ""; /** * 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. */ String description() default ""; }