SeamFramework.orgCommunity Documentation
A Web Beans pretende ser uma plataforma para frameworks, extensões e integração com outras tecnologias. Portanto,a Web Beans expõe um conjunto de SPIs para a utilização pelos desenvolvedores de extensões portáveis para Web Beans. Por exemplo, os seguintes tipos de extensões estavam previstas pelos designers da Web Beans:
Integração com motores de gerenciamento de processos de negócios (Business Process Management )
integração com frameworks de terceiros, tais como Spring, Seam, GWT ou Wicket, e
nova tecnologia baseada no modelo de programação da Web Beans.
O nervo central para estender a Web Beans é o objeto Manager
.
A interface Manager
permite, programaticamente, registrar e obter Web Beans, interceptadores, decoradores, observadores e contextos.
public interface Manager
{
public <T
> Set<Bean<T
>
> resolveByType(Class<T
> type, Annotation... bindings);
public <T
> Set<Bean<T
>
> resolveByType(TypeLiteral<T
> apiType,
Annotation... bindings);
public <T
> T getInstanceByType(Class<T
> type, Annotation... bindings);
public <T
> T getInstanceByType(TypeLiteral<T
> type,
Annotation... bindings);
public Set<Bean<?>
> resolveByName(String name);
public Object getInstanceByName(String name);
public <T
> T getInstance(Bean<T
> bean);
public void fireEvent(Object event, Annotation... bindings);
public Context getContext(Class<? extends Annotation
> scopeType);
public Manager addContext(Context context);
public Manager addBean(Bean<?> bean);
public Manager addInterceptor(Interceptor interceptor);
public Manager addDecorator(Decorator decorator);
public <T
> Manager addObserver(Observer<T
> observer, Class<T
> eventType,
Annotation... bindings);
public <T
> Manager addObserver(Observer<T
> observer, TypeLiteral<T
> eventType,
Annotation... bindings);
public <T
> Manager removeObserver(Observer<T
> observer, Class<T
> eventType,
Annotation... bindings);
public <T
> Manager removeObserver(Observer<T
> observer,
TypeLiteral<T
> eventType, Annotation... bindings);
public <T
> Set<Observer<T
>
> resolveObservers(T event, Annotation... bindings);
public List<Interceptor
> resolveInterceptors(InterceptionType type,
Annotation... interceptorBindings);
public List<Decorator
> resolveDecorators(Set<Class<?>
> types,
Annotation... bindings);
}
Nós podemos obter uma instância do Manager
via injeção:
@Current Manager manager
Instâncias da classe abstrata Bean
representam Web Beans. Existe uma instância do Bean
registrado com o objeto Manager
para todos os Web Beans da aplicação.
public abstract class Bean<T> {
private final Manager manager;
protected Bean(Manager manager) {
this.manager=manager;
}
protected Manager getManager() {
return manager;
}
public abstract Set<Class> getTypes();
public abstract Set<Annotation> getBindingTypes();
public abstract Class<? extends Annotation> getScopeType();
public abstract Class<? extends Annotation> getDeploymentType();
public abstract String getName();
public abstract boolean isSerializable();
public abstract boolean isNullable();
public abstract T create();
public abstract void destroy(T instance);
}
É possível estender a classe Bean
e registrar instâncias através da chamada Manager.addBean()
, para fornecer suporte para novos tipos de Web Beans, além dos definidos pela especificação Web Beans (Web Beans simples e coporativos, métodos produtores e endpoints JMS). Por exemplo, poderíamos usar a classe Bean
para permitir que os objetos gerenciados por um outro framework possam ser injetados nos Web Beans.
Existem duas subclasses de Bean
definidas pela especificação de Web Beans: Interceptor
e Decorator
.
A interface Context
suporta a adição de novos escopos a Web Beans, ou extensões dos escopos existentes para novos ambientes.
public interface Context {
public Class<? extends Annotation> getScopeType();
public <T> T get(Bean<T> bean, boolean create);
boolean isActive();
}
Por exemplo, nós poderíamos implementar Context
para adicionar um escopo de processo de negócios a Web Beans, ou para adicionar suporte ao escopo de conversação a uma aplicação que utiliza o Wicket.