SCM-Daten ergänzt
[percentcodec] / accelerator / src / main / java / de / juplo / accelerator / annotations / CacheSeconds.java
1 package de.juplo.accelerator.annotations;
2
3 import java.lang.annotation.ElementType;
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target;
7 import javax.servlet.http.HttpServletRequest;
8
9 /**
10  * Mit dieser Annotation können Klassen oder Methoden merkiert werden.
11  * <p>
12  * Wenn eine Methode markiert wird, muss diese eine Instanz von
13  * {@link HttpServletRequest} als (einziges!) Argument akzeptieren und einen
14  * Wert liefern, der sich nach <code>int</code> casten lässt.
15  * Die annotierte Methode ermöglicht eine einfache, zentrale aber Request-
16  * Abhängige Steuerung des Caching-Verhaltens.
17  * <p>
18  * Wenn eine Klasse annotiert wird, muss der Anotation die dann statisch für
19  * alle von der Klasse erzeugten Antworten gültige Cache-Zeit als Argument
20  * übergeben werden.
21  * Wird keine Cache-Zeit spezifiziert, wird der Wert <code>86400</code>
22  * (ein Tag) verwendet.
23  * <ul>
24  * <li>Wenn negativer Wert als Cache-Seconds festgelet wird, werden Cache-Header
25  * erzeugt, die das Cachen der Antwort für HTTP/1.0 und HTTP/1.1 vollständig
26  * untersagen.</li>
27  * <li>Wenn einen Wert größer oder gleich <code>0</code> festgelegt wird, wird
28  * für HTTP/1.0-Clients ein <code>Expires</code>-Header generiert und für
29  * HTTP/1.1-Clients ein <code>Cache-Control</code>-Header mit einem
30  * entsprechenden <code>max-age</code>-Eintrag. Dies reicht in Kombination mit
31  * der Annotation {@link LastModified} vollständig für ein einfaches aber
32  * effektives Caching aus.</li>
33  * </ul>
34  * <p>
35  * TODO
36  * <strong>Zu beachten:</strong> Wenn die Methode
37  * {@link #getCacheControl(javax.servlet.http.HttpServletRequest)} weitere
38  * Schlüssel-Wert-Paare für den <code>Cache-Control</code>-Header liefert,
39  * werden diese ergänzt. Wenn in der Rückgabe ein Wert für
40  * <code>max-age</code> enthalten ist, wir er allerdings von dem durch diese
41  * Methode vorgegebenen Wert überschrieben!
42  *
43  * @author kai
44  * @See Cacheable
45  * @See LastModified
46  * @See CacheControl
47  */
48 @Retention(RetentionPolicy.RUNTIME)
49 @Target({ ElementType.TYPE, ElementType.METHOD })
50 public @interface CacheSeconds {
51   int value() default 86400; /** Default: 1 Tag */
52 }