SlideShare uma empresa Scribd logo
CDI Extensions and 
Apache DeltaSpike 
Jasoct 
AS Project Lead 
Rafael May 4, Benevides 
2011 
Senior Software Engineer 
benevides@redhat.com
Quem sou eu? 
• Nome: Rafael Benevides 
• JBoss Software Engineer 
• JBoss Developer Materials lead 
• Apache DeltaSpike committer 
• Twitter: @rafabene 
• e-Mail: benevides@redhat.com
CDI Extensions 
• OCP (Open closed Principle)
OCP in CDI = Portable Extensions 
• Baseado em SPI (Service Provider Interface) 
• Permite: 
✔ Registrar novos “Beans” 
✔ Registrar novos “Scopes” (custom scopes) 
✔ Satisfazer @Inject “tion” points 
✔ Modificar os metadados dos Beans
Como criar uma CDI 
Portable Extension ? 
• Baseado no java.util.ServiceLoader 
• Implementar javax.enterprise.inject.spi.Extension 
• Registrar a Extensão 
• Observar eventos do Container CDI 
• Durante o boot do container, modificar o 
comportamento do CDI
Eventos do Container CDI 
• BeforeBeanDiscovery 
• ProcessAnnotatedType and ProcessSyntheticAnnotatedType 
• AfterTypeDiscovery 
• ProcessInjectionTarget and ProcessProducer 
• ProcessInjectionPoint 
• ProcessBeanAttributes 
• ProcessBean, ProcessManagedBean, ProcessSessionBean, 
ProcessProducerMethod and ProcessProducerField 
• ProcessObserverMethod 
• AfterBeanDiscovery 
• AfterDeploymentValidation
Como registrar a extensão
Como a extensão é 
carregada? 
Opções ? 
O container CDI procura todas implementações da interface 
Extension ? 
A JRE procurar todas implemetações da interface Extension?
Opções ? 
Como a extensão é 
Magia ? 
carregada?
Opções ? 
Como a extensão é 
Magia ? 
ServiceLoader 
carregada?
E na vida real?
Portable Extensions 
“Você decide o que fazer com os Beans que o CDI lhe 
fornece”
Apache DeltaSpike 
http://deltaspike.apache.org
Como tudo começou 
JBoss Seam 3 Apache MyFaces 
CODI 
CDI Source Comunidade 
Java EE
Qual o propósito do 
projeto DeltaSpike ? 
“Suportar o desenvolvimento de 
Portable Extensions CDI que promovam 
funcionalidades úteis para aplicações 
Java que não são fornecidas pela 
especificação CDI.” 
(Documentação DeltaSpike)
Então o DeltaSpike é 
um framework ?
Compatibilidade
Módulos 
• “Extensões criadas pela comunidade são 
empacotadas como módulos” 
(Documentação DeltaSpike)
Módulos 
CORE 
Security 
JPA 
JSF 
Bean validation 
Servlet 
Partial Bean 
Data 
Test Control 
Scheduler
Strong typing 
• Injeção de dependência tipada 
• Elimina a dependência de Strings 
• Fácil refatoração 
• Compilador pode detectar erros 
• Nenhuma ferramenta especial é 
necessária 
• Elimina cast (ok, esconde casts) 
• Resolução de erros detectado durante deploy 
• Strong typing == Strong tooling
Principais funcionalidades 
• Exception Handler 
try { 
// Invoca um serviço que lança exception 
} catch (NoResultException e) { 
// O tratamento de exception é delegado para os @ExceptionHandlers 
catchEvent.fire(new ExceptionToCatchEvent(e)); 
} 
• Handlers 
@ExceptionHandler 
public class MyHandler { 
void fazAlgoComException(@Handles ExceptionEvent<Throwable> evt) { 
// Faz Algo com a Exception 
evt.handledAndContinue(); 
} 
}
Principais funcionalidades 
Type-safe Project Stage 
@Inject 
private ProjectStage projectStage; 
boolean isDevProjectStage = 
ProjectStage.Development.equals(this.projectStage); 
<h:panelGroup layout="block" 
rendered="#{applicationConfig.projectStage == 'Development'}" 
•UnitTest, 
•Development 
•SystemTest 
•IntegrationTest 
•Staging 
•Production 
Confgurável via DeltaSpike Confguration API 
-Dorg.apache.deltaspike.ProjectStage=Development
Principais funcionalidades 
• DeltaSpike Configuration API 
public String getFilaJMS() { 
return ConfigResolver.getProjectStageAwarePropertyValue("jms.queue"); 
} 
jms.queue.Production=queue/queueProduction 
jms.queue.Development=queue/queueDevelopment 
• Múltiplos ConfigSources: 
• Properties file values (apache-deltaspike.properties) (deltaspike_ordinal = 100, default filename 
is "META-INF/apache-deltaspike.properties") 
• JNDI values (deltaspike_ordinal = 200, the base name is "java:comp/env/deltaspike/") 
• Environment properties (deltaspike_ordinal = 300) 
• System properties (deltaspike_ordinal = 400)
Principais funcionalidades 
• Injetable Resource 
@Inject 
@InjectableResource(location = "/version.txt") 
private InputStream is; 
public String getVersion() throws IOException { 
try (BufferedReader br = 
new BufferedReader(new InputStreamReader(is))) { 
return br.readLine(); 
} 
}
Principais funcionalidades 
• I18n Messages 
@Named("msg") 
@MessageBundle 
public interface Messages { 
public String usuarioAdicionado(String username); 
public String usuario(); 
@MessageTemplate("{password}") 
public String senha(); 
} 
<br /> #{msg.senha()}: 
@Inject 
private Messages messages; 
new FacesMessage(msg.usuarioAdicionado("Rafael"));
Principais funcionalidades 
• Segurança 
@Retention(value = RetentionPolicy.RUNTIME) 
@Target({ ElementType.TYPE, ElementType.METHOD }) 
@Documented 
@SecurityBindingType 
public @interface AdminOnly { 
} 
@ApplicationScoped 
public class ApplicationAuthorizer 
{ 
@Secures 
@AdminOnly 
public boolean verificaPermissao(InvocationContext invocationContext, 
BeanManager manager, @Logado Usuario usuario) throws Exception { 
return usuario.getRole().equalsIgnoreCase("Admin"); 
} 
} 
@AdminOnly 
public void iniciarTarefaAdministrativa() { 
// Inicia uma tarefa 
}
Principais funcionalidades 
• Data Module – Repository Pattern 
@Repository 
public interface RepositorioUsuarios extends 
EntityRepository<Usuario, Long> { 
// O DeltaSpike cria um proxy com implementações para 
● count(); 
● findAll(); 
● findBy(PK); 
● flush(); 
● refresh(); 
● remove(); 
● save(); 
● saveAndFlush(); 
}
Principais funcionalidades 
• Data Module – Repository Pattern 
@Repository 
public interface RepositorioUsuarios extends EntityRepository<Usuario, Long> { 
// O próprio nome do método cria o SQL 
public Usuario findByUsernameAndPassword(String username, char[] password); 
} 
@Repository 
public interface RepositorioPostagens extends EntityRepository<Postagem, Long> { 
@Query("SELECT p FROM Postagem AS p WHERE p.autor in (?1)") 
public List<Postagem> findBySeguidos(List<Usuario> usuariosSeguidos); 
}
Principais funcionalidades 
• Type-safe view-config for JSF 
// type-safe outcome 
public Class<Welcome> telaHome() { 
return Home.class; 
} 
@Inject 
ViewNavigationHandler vnh; 
// type-safe outcome 
public Class<CriarUsuario> tela2() { 
vnh.navigateTo(CriarUsuario.class); 
} 
@Secured(CustomAccessDecisionVoter.class) 
public interface SecuredPages {} 
@View(navigation = REDIRECT) 
public interface Pages extends ViewConfig 
{ 
class Index implements Pages { 
} 
interface Admin extends Pages, SecuredPages 
{ 
class Index implements Admin { 
} 
@View(navigation = FORWARD) 
class Home implements Admin { 
} 
} 
}
Principais funcionalidades 
• @WindowScoped 
“É como se fosse uma sessão por 
aba/janela... 
Não existem muitos casos de uso que 
precisam compartilhar dados entre as 
abas.”
Principais funcionalidades 
• Agendador de Jobs integrado com o Quartz 
//Job de exemplo agendado para rodar a cada 1 minuto 
@Scheduled(cronExpression = "0 0/1 * * * ?", onStartup = false) 
public class CdiAwareQuartzJob implements org.quartz.Job { 
// O Job permite injeção CDI 
@Inject 
private AdminServices service; 
@Override 
public void execute(JobExecutionContext context) throws JobExecutionException { 
service.executarRotinasAdministrativas(); 
} 
} @Inject 
private Scheduler<Job> jobScheduler; 
public void iniciarTarefaAdministrativa() { 
jobScheduler.registerNewJob(CdiAwareQuartzJob.class); 
}
Outras funcionalidades 
• Servlet Module – Injectable Servlet objects/ 
Servlet Events Propagation 
• @Inject @DeltaSpike (qualifier para compatibilidade com CDI 1.1) 
• private HttpServletRequest request; 
• private HttpServletResponse response; 
• private HttpSession session; 
• private Principal principal; 
• @Observes @Initialized HttpServletRequest 
• @Observes @Destroyed HttpServletRequest 
• @Observes @Initialized HttpSession
Outras funcionalidades 
• Bean Validation Module 
• Permite que “Validators” recebam injeção de 
objetos via CDI em ambiente java EE 6 / CDI 1.0 
• Partial Bean 
• Permite a criação de implementações para suas 
interfaces ou classes abstratas
Outras funcionalidades 
• Container Control 
• Permite fazer o boot de implementações 
CDI em ambiente Java SE, bem como 
controlar o ciclo de vida dos contextos 
• Test Control 
• Facilita a criação de testes CDI 
• Inicia e finalizar o container CDI / Inicia 
Contextos 
• Controla o ProjectStage
Conclusão 
• O DeltaSpike não é um full-stack framework 
• O DeltaSpike é um conjunto de Portable Extensions 
para facilitar o desenvolvimento Javaa utilizando CDI 
• O DeltaSpike é um conjunto de ferramentas!
Código Exemplo 
/rafabene 
https://github.com 
/demo_deltaspike
QQuueessttiioonnss?? 
bbeenneevviiddeess@@rreeddhhaatt..ccoomm

Mais conteúdo relacionado

ODP
TDC 2014 SP - E o DeltaSpike ?
PDF
Talk no Meetup LaravelSP #3
PDF
5. rodando containers docker na aws
PDF
Introdução ao docker
PPTX
Introdução a Containers Docker
PDF
Docker + Django
PDF
Vagrant & Docker: carregue seus ambientes no bolso
PDF
Docker volumes
TDC 2014 SP - E o DeltaSpike ?
Talk no Meetup LaravelSP #3
5. rodando containers docker na aws
Introdução ao docker
Introdução a Containers Docker
Docker + Django
Vagrant & Docker: carregue seus ambientes no bolso
Docker volumes

Mais procurados (20)

PDF
Desenvolvendo e implantando aplicações PHP utilizando Docker
PPTX
PDF
Aulão de docker
PDF
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
PDF
Docker na vida real
PDF
Vagrant vs docker? Melhor vagrant + docker
PPTX
Introdução ao Asp.NET MVC
PPTX
Docker para maiores
PPTX
Containers com docker #CPRecife4
PDF
QCon 2019 - Kubernetes Deepdive
PDF
Olá docker
PDF
TDC 2015 POA - O Fantástico Mundo de Docker
PDF
Deploying Docker Containers
PDF
As novidades da nova versão do Java 9
PDF
Alagoas Dev Day
PDF
Orquestrando Docker Containers: Machine, Swarm e Compose
PDF
Treinamento Docker Básico
PDF
PDF
Poco Bibliotecas C++
PDF
Docker: uma visão geral
Desenvolvendo e implantando aplicações PHP utilizando Docker
Aulão de docker
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Docker na vida real
Vagrant vs docker? Melhor vagrant + docker
Introdução ao Asp.NET MVC
Docker para maiores
Containers com docker #CPRecife4
QCon 2019 - Kubernetes Deepdive
Olá docker
TDC 2015 POA - O Fantástico Mundo de Docker
Deploying Docker Containers
As novidades da nova versão do Java 9
Alagoas Dev Day
Orquestrando Docker Containers: Machine, Swarm e Compose
Treinamento Docker Básico
Poco Bibliotecas C++
Docker: uma visão geral
Anúncio

Destaque (20)

PDF
Enterprise Integration Patterns na nuvem com Spring Integration
PDF
Microservices with Kubernetes, Docker, and Jenkins
PDF
Architecting cloud-enabled applications using Spring-Integration 2.x
PDF
JavaOne 2016: The Deploy Master: From Basic to Zero Downtime, Blue/Green, A/B...
PDF
Java Craftsmanship: Lessons Learned on How to Produce Truly Beautiful Java Code
PDF
Write Powerful Javascript Modules To Make Your Apps DRY (Brian Leathem)
PDF
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
PDF
High Performance Data Storage in a Microservices Environment
PDF
JavaOne 2016: Kubernetes introduction for Java Developers
PDF
Containers: Under The Hood (Vincent Batts)
PDF
MicroServices for Java Developers
PDF
Kubernetes for Java Developers
PPTX
DevOps Moves To Production (Lori MacVittie)
PDF
The Deploy Master: From Basic to Zero Downtime, Blue/Green, A/B and Canary
PDF
Reactive Distributed Applications with Vert.x
PDF
Java and DevOps: Supercharge Your Delivery Pipeline with Containers
PDF
Microservices with Docker, Kubernetes, and Jenkins
PDF
Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)
PDF
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
PDF
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Enterprise Integration Patterns na nuvem com Spring Integration
Microservices with Kubernetes, Docker, and Jenkins
Architecting cloud-enabled applications using Spring-Integration 2.x
JavaOne 2016: The Deploy Master: From Basic to Zero Downtime, Blue/Green, A/B...
Java Craftsmanship: Lessons Learned on How to Produce Truly Beautiful Java Code
Write Powerful Javascript Modules To Make Your Apps DRY (Brian Leathem)
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
High Performance Data Storage in a Microservices Environment
JavaOne 2016: Kubernetes introduction for Java Developers
Containers: Under The Hood (Vincent Batts)
MicroServices for Java Developers
Kubernetes for Java Developers
DevOps Moves To Production (Lori MacVittie)
The Deploy Master: From Basic to Zero Downtime, Blue/Green, A/B and Canary
Reactive Distributed Applications with Vert.x
Java and DevOps: Supercharge Your Delivery Pipeline with Containers
Microservices with Docker, Kubernetes, and Jenkins
Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Anúncio

Semelhante a CDI Extensions e DeltaSpike (20)

PDF
Workshop Microservices - Construindo APIs RESTful com Spring Boot
PDF
Apostilava Java EE 5 - 2007
PPTX
Inversão de Controlo e Injecção de Dependência na .NET Framework
PDF
JHipster - Produtividade e Maturidade em suas mãos
PDF
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
PPTX
PPTX
PDC - Engenharia - Plataforma Microsoft .NET
PDF
Diapositivos práticos - Integração de Sistemas.pdf
PDF
Precisamos falar sobre Gradle
PDF
Framework web 01 - Aula UTFPR 2018
PDF
Apache Wicket - Desenvolvimento WEB orientado a componentes
PPTX
PDF
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
PDF
Aplicando CDI em aplicações Java
PDF
Analise frameworks php
PDF
JSF com Primefaces
PPTX
Treinamento Elasticsearch - Parte 1
PPT
Java Seminar
PPT
Aula JPA
PPT
API Apontador
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Apostilava Java EE 5 - 2007
Inversão de Controlo e Injecção de Dependência na .NET Framework
JHipster - Produtividade e Maturidade em suas mãos
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
PDC - Engenharia - Plataforma Microsoft .NET
Diapositivos práticos - Integração de Sistemas.pdf
Precisamos falar sobre Gradle
Framework web 01 - Aula UTFPR 2018
Apache Wicket - Desenvolvimento WEB orientado a componentes
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Aplicando CDI em aplicações Java
Analise frameworks php
JSF com Primefaces
Treinamento Elasticsearch - Parte 1
Java Seminar
Aula JPA
API Apontador

Mais de Rafael Benevides (6)

PDF
Docker for (Java) Developers
PDF
Reunião SouJava BSB - 2005 - Java a favor do consumidor brasileiro
ODP
TDC 2012 - JDF
PDF
JBossInBossa 2011 - BRMS
PPT
JBossinBossa 2010 - Seam
PDF
Red Hat Roadshow 2009 - Drools
Docker for (Java) Developers
Reunião SouJava BSB - 2005 - Java a favor do consumidor brasileiro
TDC 2012 - JDF
JBossInBossa 2011 - BRMS
JBossinBossa 2010 - Seam
Red Hat Roadshow 2009 - Drools

Último (19)

PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Apple Pippin Uma breve introdução. - David Glotz
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula 18 - Manipulacao De Arquivos python
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
COBITxITIL-Entenda as diferença em uso governança TI
Custos e liquidação no SAP Transportation Management, TM130 Col18
Aula04-Academia Heri- Tecnologia Geral 2025
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Processos na gestão de transportes, TM100 Col18
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Apple Pippin Uma breve introdução. - David Glotz

CDI Extensions e DeltaSpike

  • 1. CDI Extensions and Apache DeltaSpike Jasoct AS Project Lead Rafael May 4, Benevides 2011 Senior Software Engineer benevides@redhat.com
  • 2. Quem sou eu? • Nome: Rafael Benevides • JBoss Software Engineer • JBoss Developer Materials lead • Apache DeltaSpike committer • Twitter: @rafabene • e-Mail: benevides@redhat.com
  • 3. CDI Extensions • OCP (Open closed Principle)
  • 4. OCP in CDI = Portable Extensions • Baseado em SPI (Service Provider Interface) • Permite: ✔ Registrar novos “Beans” ✔ Registrar novos “Scopes” (custom scopes) ✔ Satisfazer @Inject “tion” points ✔ Modificar os metadados dos Beans
  • 5. Como criar uma CDI Portable Extension ? • Baseado no java.util.ServiceLoader • Implementar javax.enterprise.inject.spi.Extension • Registrar a Extensão • Observar eventos do Container CDI • Durante o boot do container, modificar o comportamento do CDI
  • 6. Eventos do Container CDI • BeforeBeanDiscovery • ProcessAnnotatedType and ProcessSyntheticAnnotatedType • AfterTypeDiscovery • ProcessInjectionTarget and ProcessProducer • ProcessInjectionPoint • ProcessBeanAttributes • ProcessBean, ProcessManagedBean, ProcessSessionBean, ProcessProducerMethod and ProcessProducerField • ProcessObserverMethod • AfterBeanDiscovery • AfterDeploymentValidation
  • 7. Como registrar a extensão
  • 8. Como a extensão é carregada? Opções ? O container CDI procura todas implementações da interface Extension ? A JRE procurar todas implemetações da interface Extension?
  • 9. Opções ? Como a extensão é Magia ? carregada?
  • 10. Opções ? Como a extensão é Magia ? ServiceLoader carregada?
  • 11. E na vida real?
  • 12. Portable Extensions “Você decide o que fazer com os Beans que o CDI lhe fornece”
  • 14. Como tudo começou JBoss Seam 3 Apache MyFaces CODI CDI Source Comunidade Java EE
  • 15. Qual o propósito do projeto DeltaSpike ? “Suportar o desenvolvimento de Portable Extensions CDI que promovam funcionalidades úteis para aplicações Java que não são fornecidas pela especificação CDI.” (Documentação DeltaSpike)
  • 16. Então o DeltaSpike é um framework ?
  • 18. Módulos • “Extensões criadas pela comunidade são empacotadas como módulos” (Documentação DeltaSpike)
  • 19. Módulos CORE Security JPA JSF Bean validation Servlet Partial Bean Data Test Control Scheduler
  • 20. Strong typing • Injeção de dependência tipada • Elimina a dependência de Strings • Fácil refatoração • Compilador pode detectar erros • Nenhuma ferramenta especial é necessária • Elimina cast (ok, esconde casts) • Resolução de erros detectado durante deploy • Strong typing == Strong tooling
  • 21. Principais funcionalidades • Exception Handler try { // Invoca um serviço que lança exception } catch (NoResultException e) { // O tratamento de exception é delegado para os @ExceptionHandlers catchEvent.fire(new ExceptionToCatchEvent(e)); } • Handlers @ExceptionHandler public class MyHandler { void fazAlgoComException(@Handles ExceptionEvent<Throwable> evt) { // Faz Algo com a Exception evt.handledAndContinue(); } }
  • 22. Principais funcionalidades Type-safe Project Stage @Inject private ProjectStage projectStage; boolean isDevProjectStage = ProjectStage.Development.equals(this.projectStage); <h:panelGroup layout="block" rendered="#{applicationConfig.projectStage == 'Development'}" •UnitTest, •Development •SystemTest •IntegrationTest •Staging •Production Confgurável via DeltaSpike Confguration API -Dorg.apache.deltaspike.ProjectStage=Development
  • 23. Principais funcionalidades • DeltaSpike Configuration API public String getFilaJMS() { return ConfigResolver.getProjectStageAwarePropertyValue("jms.queue"); } jms.queue.Production=queue/queueProduction jms.queue.Development=queue/queueDevelopment • Múltiplos ConfigSources: • Properties file values (apache-deltaspike.properties) (deltaspike_ordinal = 100, default filename is "META-INF/apache-deltaspike.properties") • JNDI values (deltaspike_ordinal = 200, the base name is "java:comp/env/deltaspike/") • Environment properties (deltaspike_ordinal = 300) • System properties (deltaspike_ordinal = 400)
  • 24. Principais funcionalidades • Injetable Resource @Inject @InjectableResource(location = "/version.txt") private InputStream is; public String getVersion() throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) { return br.readLine(); } }
  • 25. Principais funcionalidades • I18n Messages @Named("msg") @MessageBundle public interface Messages { public String usuarioAdicionado(String username); public String usuario(); @MessageTemplate("{password}") public String senha(); } <br /> #{msg.senha()}: @Inject private Messages messages; new FacesMessage(msg.usuarioAdicionado("Rafael"));
  • 26. Principais funcionalidades • Segurança @Retention(value = RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) @Documented @SecurityBindingType public @interface AdminOnly { } @ApplicationScoped public class ApplicationAuthorizer { @Secures @AdminOnly public boolean verificaPermissao(InvocationContext invocationContext, BeanManager manager, @Logado Usuario usuario) throws Exception { return usuario.getRole().equalsIgnoreCase("Admin"); } } @AdminOnly public void iniciarTarefaAdministrativa() { // Inicia uma tarefa }
  • 27. Principais funcionalidades • Data Module – Repository Pattern @Repository public interface RepositorioUsuarios extends EntityRepository<Usuario, Long> { // O DeltaSpike cria um proxy com implementações para ● count(); ● findAll(); ● findBy(PK); ● flush(); ● refresh(); ● remove(); ● save(); ● saveAndFlush(); }
  • 28. Principais funcionalidades • Data Module – Repository Pattern @Repository public interface RepositorioUsuarios extends EntityRepository<Usuario, Long> { // O próprio nome do método cria o SQL public Usuario findByUsernameAndPassword(String username, char[] password); } @Repository public interface RepositorioPostagens extends EntityRepository<Postagem, Long> { @Query("SELECT p FROM Postagem AS p WHERE p.autor in (?1)") public List<Postagem> findBySeguidos(List<Usuario> usuariosSeguidos); }
  • 29. Principais funcionalidades • Type-safe view-config for JSF // type-safe outcome public Class<Welcome> telaHome() { return Home.class; } @Inject ViewNavigationHandler vnh; // type-safe outcome public Class<CriarUsuario> tela2() { vnh.navigateTo(CriarUsuario.class); } @Secured(CustomAccessDecisionVoter.class) public interface SecuredPages {} @View(navigation = REDIRECT) public interface Pages extends ViewConfig { class Index implements Pages { } interface Admin extends Pages, SecuredPages { class Index implements Admin { } @View(navigation = FORWARD) class Home implements Admin { } } }
  • 30. Principais funcionalidades • @WindowScoped “É como se fosse uma sessão por aba/janela... Não existem muitos casos de uso que precisam compartilhar dados entre as abas.”
  • 31. Principais funcionalidades • Agendador de Jobs integrado com o Quartz //Job de exemplo agendado para rodar a cada 1 minuto @Scheduled(cronExpression = "0 0/1 * * * ?", onStartup = false) public class CdiAwareQuartzJob implements org.quartz.Job { // O Job permite injeção CDI @Inject private AdminServices service; @Override public void execute(JobExecutionContext context) throws JobExecutionException { service.executarRotinasAdministrativas(); } } @Inject private Scheduler<Job> jobScheduler; public void iniciarTarefaAdministrativa() { jobScheduler.registerNewJob(CdiAwareQuartzJob.class); }
  • 32. Outras funcionalidades • Servlet Module – Injectable Servlet objects/ Servlet Events Propagation • @Inject @DeltaSpike (qualifier para compatibilidade com CDI 1.1) • private HttpServletRequest request; • private HttpServletResponse response; • private HttpSession session; • private Principal principal; • @Observes @Initialized HttpServletRequest • @Observes @Destroyed HttpServletRequest • @Observes @Initialized HttpSession
  • 33. Outras funcionalidades • Bean Validation Module • Permite que “Validators” recebam injeção de objetos via CDI em ambiente java EE 6 / CDI 1.0 • Partial Bean • Permite a criação de implementações para suas interfaces ou classes abstratas
  • 34. Outras funcionalidades • Container Control • Permite fazer o boot de implementações CDI em ambiente Java SE, bem como controlar o ciclo de vida dos contextos • Test Control • Facilita a criação de testes CDI • Inicia e finalizar o container CDI / Inicia Contextos • Controla o ProjectStage
  • 35. Conclusão • O DeltaSpike não é um full-stack framework • O DeltaSpike é um conjunto de Portable Extensions para facilitar o desenvolvimento Javaa utilizando CDI • O DeltaSpike é um conjunto de ferramentas!
  • 36. Código Exemplo /rafabene https://github.com /demo_deltaspike