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 }