Integração da JSR299 (CDI) com GRAILS
15/07/2012 14:57
1
Olá pessoal!

Utilizei num projeto que desenvolvi a pouco tempo atrás a JSR299 (CDI), muito "falada" no mundo EJB. Além de padronizar a injeção de dependências, ela implementou uma maneira muito interessante para controlar eventos, além de simplificar a maneira do controle para o escopo de objetos.

Não me acostumei com a maneira que o grais controla os escopos, visto que a aplicação que estou desenvolvendo agora, esta sendo construída com AJAX, sendo assim não possuo uma maneira óbvia de criar um assistente:

INICIO -> PASSO1 -> PASSO(n) -> FIM

Sinto a falta da facilidade do disparo de evento que o CDI me proporcionou, por exemplo:

LOGIN:
DisparaEventoUsuarioLogou

CONTROLEUSUARIO:
ObservaLoginDeUsuario

O uso desta pattern facilitou em muito o desenvolvimento da minha aplicação, permitindo que eu me dedicasse a um MODULO por vez, garantido que o baixo acoplamento permitisse que num momento futuro eu implementasse a captura do evento.

Redigi todo este tratado, para esclarecer que não estou buscando a Injeção de dependências, mas sim os outros benefícios que a CDI me disponibiliza.

PERGUNTA

Varri toda a Internet e só encontrei um lugar onde o profissional se dispõe a utilizar esta especificação dentro de um stack GRAILS em : http://www.znetdevelopment.com/blogs/2011/03/04/using-grails-with-cdiweld/
Porém neste post não informou como instalo e configuro a CDI principalmente o arquivo beans.xml, Alguém poderia de ajudar em como eu poderia configurar o Weld dentro de uma aplicação GRAILS?

Obrigado!

Tags: Grails Cdi Weld JSR299


0
Oi Eduardo,

no caso do Grails, não sei se faria tanto sentido assim você instalar o Weld e de fato teria algum ganho, porque por trás dos panos você já teria um container de injeção de dependências que é o próprio Spring (possívelmente lhe traria mais problemas do que ganhos). Por sua vez, o Spring já oferece algum suporte a esta JSR, então o que você teria de fazer seria basicamente incluir o arquivo de configuração do Spring no diretório grails-app/conf/spring e instruí-lo a usar as anotações.

Tudo o que você teria de fazer seria adicionar o jar com as anotações da JSR no seu classpath copiando-o para o diretório lib ou através do arquivo BuildConfig.groovy.

Com relação aos escopos, é também bastante simples no caso do Grails e é bastante parecido com o adotado nesta JSR. Basta que você adicione o atributo static scope no seu serviço identificando-o como session, request, prototype ou qualquer outro que você precise. O mesmo procedimento da JSR você adotaria nos seus beans configurados pelo Spring.

Outro ponto importante a levar em consideração: plugins. Há plugins que esperam o uso do Spring pelo framework. Talvez adicionar o Weld lhe cause problemas com estes.


0
Muito obrigado pela resposta Kiko!

Mas uma coisa me deixa em dúvida. Eu teria que procurar no framework Spring qual biblioteca da suporte a JSR299 e instalá-la?

Em relação a injeção de depend?ncias não é minha maior preocupação, mais sim o framework de controle e captura de eventos de aplicação. Não os eventos disparados pelas Entitys do GORM, mas eventos da minha aplicação, onde eu possa criar o evento e posteriormente capturá-lo.

Você conhece algum plugin ou biblioteca que forneça este serviço?

A respeito de minha aplicação, está usando backend Grails e frontend EXTJS4

Obrigado!


0
Oi Eduardo,

neste caso, você só precisa incluir suas anotações em suas classes. Lembre-se de garantir que sua configuração fique como no código abaixo:


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="seu.pacote.basico"/>

</beans>



Em seguida, basta adicionar o jar com as definições da anotação XML que você deseja. Você pode adicionar uma dependência da JSR-330, que já vai incluir tudo o que você precisa. No caso, você precisa do @PostConstruct e da @PreDestroy.

Segue a definição em Maven desta dependência pra você.


<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>5</version>
</dependency>


Se quiser usar a JSR-330, então use esta:


<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>


E dai pra frente, bom: Rock on!


0
Kiko, muito obrigado pela ajuda!

Acabei utilizando o plugin spring-event!

É exatamente o que eu queria.



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto