001 /*
002 * Copyright 2004-2006 Stephen J. McConnell.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
013 * implied.
014 *
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package net.dpml.annotation;
020
021 import java.lang.annotation.ElementType;
022 import java.lang.annotation.RetentionPolicy;
023 import java.lang.annotation.Retention;
024 import java.lang.annotation.Target;
025
026 /**
027 * Component annotation dealing with lifestyle policy, lifecycle model, and collection semantics.
028 * @author <a href="http://www.dpml.net">Digital Product Management Library</a>
029 * @version 2.1.1
030 */
031 @Target( ElementType.TYPE )
032 @Retention( RetentionPolicy.RUNTIME )
033 public @interface Component
034 {
035 /**
036 * Declaration of the component name. QAs a general rule it is recommended
037 * that component names should be restricted to short names without periods or
038 * spaces (such as 'widget', 'gizmo', etc.). Component names are used in the
039 * construction of composite names that fully qualify the component within the
040 * runtime and serve as logging category names. If undefined, a "" name value
041 * is declared in which case a container may resolve a name based on the component
042 * classname.
043 */
044 String name() default "";
045
046 /**
047 * Declaration of an explicit component lifestyle policy. If undefined the
048 * default policy is LifestylePolicy.THREAD.
049 */
050 LifestylePolicy lifestyle() default LifestylePolicy.THREAD;
051
052 /**
053 * Declaration of an explicit component collection policy. If undefined the
054 * default policy is CollectionPolicy.HARD.
055 */
056 CollectionPolicy collection() default CollectionPolicy.HARD;
057
058 /**
059 * Declaration of an alternative lifestyle graph via a URI. If undefined the
060 * default semantics are derived from a graph definition colocated with the class
061 * using the resource path <classname>.xgraph.
062 */
063 String lifecycle() default "";
064
065 /**
066 * Declaration of an alternative component runtime handler uri.
067 */
068 String handlerURI() default "link:part:dpml/metro/dpml-lang-component";
069
070 /**
071 * Declaration of an alternative component runtime strategy handler classname.
072 */
073 String handlerClassname() default "net.dpml.runtime.ComponentStrategyHandler";
074 }