SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesRodrigo Cândido da Silva
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVCBenicio Ávila
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4David Ruiz
 
QCon 2019 - Kubernetes Deepdive
QCon 2019 -  Kubernetes DeepdiveQCon 2019 -  Kubernetes Deepdive
QCon 2019 - Kubernetes DeepdiveRicardo Katz
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker ContainersHugo Henley
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeRoberto Hashioka
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker BásicoAndré Justi
 
Poco Bibliotecas C++
Poco Bibliotecas C++Poco Bibliotecas C++
Poco Bibliotecas C++Uilian Ries
 

La actualidad más candente (20)

Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
Docker
DockerDocker
Docker
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVC
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
QCon 2019 - Kubernetes Deepdive
QCon 2019 -  Kubernetes DeepdiveQCon 2019 -  Kubernetes Deepdive
QCon 2019 - Kubernetes Deepdive
 
Olá docker
Olá dockerOlá docker
Olá docker
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
As novidades da nova versão do Java 9
As novidades da nova versão do Java 9As novidades da nova versão do Java 9
As novidades da nova versão do Java 9
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Orquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e ComposeOrquestrando Docker Containers: Machine, Swarm e Compose
Orquestrando Docker Containers: Machine, Swarm e Compose
 
Treinamento Docker Básico
Treinamento Docker BásicoTreinamento Docker Básico
Treinamento Docker Básico
 
Crud
CrudCrud
Crud
 
Poco Bibliotecas C++
Poco Bibliotecas C++Poco Bibliotecas C++
Poco Bibliotecas C++
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 

Destacado

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

Destacado (20)

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

Similar a CDI Extensions e DeltaSpike

Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootRodrigo Cândido da Silva
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Inversão de Controlo e Injecção de Dependência na .NET Framework
Inversão de Controlo e Injecção de Dependência na .NET FrameworkInversão de Controlo e Injecção de Dependência na .NET Framework
Inversão de Controlo e Injecção de Dependência na .NET FrameworkC. Augusto Proiete
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6Dr. Spock
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETslides_teltools
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfJ0071
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaMichel Graciano
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 

Similar a CDI Extensions e DeltaSpike (20)

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

Más de Rafael Benevides

Docker for (Java) Developers
Docker for (Java) DevelopersDocker for (Java) Developers
Docker for (Java) DevelopersRafael Benevides
 
Reunião SouJava BSB - 2005 - Java a favor do consumidor brasileiro
Reunião SouJava BSB - 2005 - Java a favor do consumidor brasileiro Reunião SouJava BSB - 2005 - Java a favor do consumidor brasileiro
Reunião SouJava BSB - 2005 - Java a favor do consumidor brasileiro Rafael Benevides
 
Red Hat Roadshow 2009 - Drools
Red Hat Roadshow 2009 - DroolsRed Hat Roadshow 2009 - Drools
Red Hat Roadshow 2009 - DroolsRafael Benevides
 

Más de Rafael Benevides (6)

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

Último

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 

Último (9)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 

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