SeamFramework.orgCommunity Documentation
De acordo com a especificação Web Beans:
Em muitos sistemas, a utilização de padrões arquiteturais produz um conjunto de papéis Web Bean recorrentes. Um estereótipo permite a um desenvolvedor de framwework identificar esse papel e declarar alguns metadados comums para Web Beans com esse papel em um local centralizado.
Um estereótipo encapsula qualquer combinação de:
um tipo padrão de implantação,
um tipo de escopo padrão,
uma restrição ao escopo do Web Bean,
uma exigência de que o Web Bean implemente ou estenda um certo tipo, e
um conjunto de anotações para binding de interceptadores
Um estereótipo também pode especificar que todos os Web Beans com o estereótipo têm um nome Web Bean padrão.
Um Web Bean pode declarar zero, um ou vários estereótipos.
Um estereótipo é um tipo de anotação Java. Esse estereótipo identifica classes de ação em algum framework MVC:
@Retention(RUNTIME)
@Target(TYPE)
@Stereotype
public @interface Action {}
Nós utilizamos o estereótipo, aplicando a anotação ao Web Bean.
@Action
public class LoginAction { ... }
Um estereótipo pode especificar um escopo padrão e/ou um tipo padrão de implantação para Web Beans com esse estereótipo. Por exemplo, o tipo de implantação @WebTier
identifica Web Beans que só deverão ser implantados quando o sistema executar como uma aplicação web. Podemos especificar os seguintes padrões para classes de ação :
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@WebTier
@Stereotype
public @interface Action {}
Evidentemente, uma determinada ação pode ainda,se necessário, substituir estes padrões:
@Dependent @Mock @Action
public class MockLoginAction { ... }
Se quisermos forçar todas as ações para um escopo particular, podemos fazer isso também.
Suponha que queremos impedir as ações de declarar certos escopos. Web Beans permite-nos indicar explicitamente o conjunto de escopos permitidos para Web Beans com um certo estereótipo. Por exemplo:
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@WebTier
@Stereotype(supportedScopes=RequestScoped.class)
public @interface Action {}
Se uma determinada classe de ação tenta especificar um escopo diferente do escopo de requisição da Web Beans, uma exceção será lançada pelo gerenciador do Web Bean em tempo de inicialização.
Também podemos forçar todos os Web Beans com um certo estereótipo a implementar uma interface ou estender uma classe:
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@WebTier
@Stereotype(requiredTypes=AbstractAction.class)
public @interface Action {}
Se uma determinada classe de ação não estender a classe AbstractAction
, uma exceção será lançada pelo gerenciador do Web Bean em tempo de inicialização.
Um estereótipo pode especificar um conjunto de interceptadores de bindings a serem herdados por todos os Web Beans com esse estereótipo.
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@Transactional(requiresNew=true)
@Secure
@WebTier
@Stereotype
public @interface Action {}
Isso nos ajuda a manter os detalhes técnicos ainda mais longe do código de negócios!
Por último, é possível especificar que todos os Web Beans com um certo estereótipo tenham um nome Web Bean padronizado pelo gerenciador do Web Bean. As ações são,muitas vezes, referenciadas em páginas JSP. Por isso, elas são um caso de utilização perfeito desse recurso. Tudo o que precisamos fazer é adicionar uma anotação @Nome
vazia:
@Retention(RUNTIME)
@Target(TYPE)
@RequestScoped
@Transactional(requiresNew=true)
@Secure
@Named
@WebTier
@Stereotype
public @interface Action {}
Agora, LoginAction
terá o nome loginAction
.
Já conhecemos dois estereótipos padrões definidos pela especificação de Web Beans: @Interceptor
e @Decorator
.
Web Beans define mais um estereótipo padrão:
@Named
@RequestScoped
@Stereotype
@Target({TYPE, METHOD})
@Retention(RUNTIME)
public @interface Model {}
Esse estereótipo é destinado ao uso com o JSF. Em vez de utilizar JSF managed beans, basta anotar um Web Bean com @Model
, e utilizá-lo diretamente em sua página JSF.