segunda-feira, 20 de julho de 2015

Configurando JavaSE com CDI e DeltaSpike

No último post mostrei como configurar o CDI em projetos JavaSE. Porém, hoje vamos um pouco além e mostrarei como deixar o CDI ainda mais poderoso. Iremos configurar com Maven a extensão mais famosa do CDI, o DeltaSpike.

Não vou entrar em detalhes sobre o que é o DeltaSpike, isso já é possível de achar em diversos sites e blogs sobre programação.Pretendo Apenas trazer de maneira resumida as configurações iniciais.

Entretanto, para os que ainda não tiveram contato, deixarei links no final do post para esclarecimento.

Basicamente o DeltaSpike é um conjunto de módulos opcionais que podem ser adicionados a especificação CDI para contemplar funcionalidades que não foram pensadas. O mesmo é composto por um módulo central e diversos módulos opcionais, que são basicamente:

  • Bean Validation
  • Container Control
  • Data
  • JPA
  • JSF
  • Partial-Bean
  • Scheduler
  • Security
  • Servlet
  • TestControl
Vamos ao código !

Inicialmente precisamos adicionar as dependências. Vou assumir que o CDI já está configurado em seu projeto, caso contrário a configuração não funcionará.
org.apache.deltaspike.core deltaspike-core-api 1.4.1 compile org.apache.deltaspike.core deltaspike-core-impl 1.4.1 runtime org.apache.deltaspike.cdictrl deltaspike-cdictrl-api 1.4.1 compile
Chegou a hora da famosa classe Main. Se você leu o artigo anterior sobre CDI EM JAVASE a classe main deve estar da seguinte forma:
public class Main {
@Inject ClasseParaInjecao classeInjetada; public void main(@Observes ContainerInitialized event, @Parameters List params) { classeInjetada.testarInjecao(); } }
Porém, com a classe Main desta maneira, seria necessário iniciar o Container do CDI e do DeltaSpike. Então vamos deixá-la mais simples.
public class Main {
public static void main(String[] args) { CdiContainer cdiContainer = CdiContainerLoader.getCdiContainer(); cdiContainer.boot(); ClasseParaInjecao classeInjetada = BeanProvider.getContextualReference(ClasseParaInjecao.class, false); classeInjetada.testarInjecao(); cdiContainer.shutdown(); } }
Prontinho. Desse modo voltamos a ter a classe Main tradicional, a única diferença é que ela agora carrega programaticamente o Container do DeltaSpike que já inicia o CDI.

As informações deste post foram tiradas da página oficial do projeto, para mais detalhes você pode consultá-la.

Página oficial do DeltaSpike:
http://deltaspike.apache.org/index.html


Um comentário :

  1. Opa, eu implementei esse seu exemplo. Recebo o seguinte erro:

    Exception in thread "main" java.lang.IllegalStateException: Could not find an implementation of org.apache.deltaspike.cdise.api.CdiContainer available in the classpath!

    Teria como me ajudar?

    ResponderExcluir