SeamFramework.orgCommunity Documentation
Secondo la specifica Web Beans:
In molti sistemi l'uso di pattern architetturali produce un set di ruoli Web Bean ricorrenti. Uno stereotipo consente allo sviluppatore di framework di identificare tale ruolo e di dichiarare alcuni metadati comuni per i Web Bean con tale ruolo come parte principale.
Uno stereotipo incapsula qualsiasi combinazione di:
un tipo di deploy di default,
un tipo di scope di default,
una restrizione sullo scope del Web Bean,
un requisito che il Web Bean implementi o estenda un certo tipo, e
un set di annotazioni di interceptor binding.
Uno stereotipo può anche specificare che tutti i Web Beans con tale stereotipo abbiano nomi Web Bean di default.
Un Web Bean può dichiarare zero, uno o più stereotipi.
Uno stereotipo è un tipo di annotazione Java. Questo stereotipo identifica le classi di azione in alcuni framework MVC:
@Retention(RUNTIME)
@Target(TYPE)
@Stereotype
public @interface Action {}
Lo stereotipo viene impiegato applicando l'annotazione al Web Bean.
@Action
public class LoginAction { ... }
Uno stereotipo può specificare uno scope di default e/o un tipo di deploy di default per Web Bean con tale stereotipo. Per esempio, se il tipo di deploy @WebTier
identifica Web Bean che dovrebbero essere deployati quando il sistema viene eseguito come applicazione web, si potrebbero specificare i seguenti valori di default per le classi d'azione:
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@WebTier
@Stereotype
public @interface Action {}
Certamente una particolare azione può comunque fare l'override di questi valore se necessario:
@Dependent @Mock @Action
public class MockLoginAction { ... }
Se si vuole forzare tutte le azioni ad un particolare scope, è possibile.
Si supponga di voler prevenire le azioni dal dichiarare certi scope. Web Beans consente esplicitamente di specificare un set di scope consentiti per Web Bean con certi stereotipi. Per esempio:
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@WebTier
@Stereotype(supportedScopes=RequestScoped.class)
public @interface Action {}
Se una particolare classe d'azione tenta di specificare uno scope diverso dallo scope di richiesta Web Bean, verrà lanciata un'eccezione dal manager Web Bean in fase di inizializzazione.
Tutti i Web Bean con certi stereotipi possono venire forzati ad implementare un'interfaccia o ad estendere una classe:
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@WebTier
@Stereotype(requiredTypes=AbstractAction.class)
public @interface Action {}
Se una particolare classe d'azione non estende la classe AbstractAction
, verrà lanciata un'eccezione dal manager Web Bean in fase di inizializzazione.
Uno stereotipo può specificare un set di interceptor binding da ereditare da tutti i Web Bean con quello stereotipo.
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@Transactional(requiresNew=true)
@Secure
@WebTier
@Stereotype
public @interface Action {}
Questo aiuta ad ottenere concern tecnici anche lontano dal codice di business!
Infine è possibile specificare che tutti i Web Bean con certi stereotipi abbiamo un certo nome Web Bean, messo di default dal manager Web Bean. Le azioni sono spesso referenziate nelle pagine JSP, e quindi sono un caso d'uso perfetto per questa funzionalità. Basta aggiungere un'annotazione vuota @Named
:
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@Transactional(requiresNew=true)
@Secure
@Named
@WebTier
@Stereotype
public @interface Action {}
Ora, LoginAction
avrà nome loginAction
.
Si sono già visti due stereotipi standard definiti dalla specifica Web Bean: @Interceptor
e @Decorator
.
Web Bean definisce un ulteriore stereotipo standard:
@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD})
@Retention(RUNTIME)
public @interface Model {}
Questo stereotipo è inteso per l'uso con JSF. Invece di usare bean gestiti da JSF, basta annotare un Web Bean con @Model
, e usarlo direttamente nelle pagine JSF.