Globalcode – Open4education
Software Livre: E o DeltaSpike ?
Rafael Benevides
Globalcode – Open4education
Quem sou eu?
Nome: Rafael Benevides
JBoss Software Engineer
JBoss Developer Materials lead
Apa...
Globalcode – Open4education
CDI Extensions
OCP (Open closed Principle)
Globalcode – Open4education
OCP in CDI =
Portable Extensions
Baseado em SPI (Service Provider Interface)
Permite:
✔
Regist...
Globalcode – Open4education
Apache DeltaSpike
Globalcode – Open4education
Como tudo começou
JBoss Seam 3 Apache MyFaces
CODI
CDI Source
Comunidade
Java EE
Globalcode – Open4education
Qual o propósito do
projeto DeltaSpike ?
“Suportar o desenvolvimento de Portable Extensions
CD...
Globalcode – Open4education
Então o DeltaSpike é
um framework ?
Globalcode – Open4education
Compatibilidade
Globalcode – Open4education
Módulos
“Extensões criadas pela comunidade são
empacotadas como módulos”
(Documentação DeltaSp...
Globalcode – Open4education
Módulos
CORE
Security
JPA
JSF
Bean validation
Servlet
Partial Bean
Data
Test Control
Scheduler
Globalcode – Open4education
Strong typing
Injeção de dependência tipada
Elimina a dependência de Strings
Fácil refatoração...
Globalcode – Open4education
Principais funcionalidades
Exception Handler
try {
// Invoca um serviço que lança exception
} ...
Globalcode – Open4education
Principais funcionalidades
Type-safe Project Stage
UnitTest,
Development
SystemTest
Integratio...
Globalcode – Open4education
Principais Funcionalidades
DeltaSpike Configuration API
public String getFilaJMS() {
return Co...
Globalcode – Open4education
Principais funcionalidades
Injetable Resource
@Inject
@InjectableResource(location = "/version...
Globalcode – Open4education
Principais funcionalidades
I18n Messages
@Named("msg")
@MessageBundle
public interface Message...
Globalcode – Open4education
Principais funcionalidades
Segurança
@Retention(value = RetentionPolicy.RUNTIME)
@Target({ Ele...
Globalcode – Open4education
Principais Funcionalidades
Data Module – Repository Pattern
@Repository
public interface Repos...
Globalcode – Open4education
Principais Funcionalidades
Data Module – Repository Pattern
@Repository
public interface Repos...
Globalcode – Open4education
Principais funcionalidades
Type-safe view-config for JSF
// type-safe outcome
public Class<Wel...
Globalcode – Open4education
Principais funcionalidades
@WindowScoped
“É como se fosse uma sessão por aba/janela...
Não exi...
Globalcode – Open4education
Principais funcionalidades
Agendador de Jobs integrado com o Quartz
//Job de exemplo agendado ...
Globalcode – Open4education
Outras funcionalidades
Servlet Module – Injectable Servlet objects/
Servlet Events Propagation...
Globalcode – Open4education
Outras funcionalidades
Bean Validation Module
Permite que “Validators” recebam injeção de obje...
Globalcode – Open4education
Outras funcionalidades
Container Control
Permite fazer o boot de implementações CDI em
ambient...
Globalcode – Open4education
Conclusão
O DeltaSpike não é um full-stack framework
O DeltaSpike é um conjunto de Portable Ex...
Globalcode – Open4education
Código Exemplo
/rafabene
https://github.com
/demo_deltaspike
Globalcode – Open4education
Upcoming SlideShare
Loading in...5
×

TDC 2014 SP - E o DeltaSpike ?

449

Published on

Apresentação sobre o projeto Apache DeltaSpike no TDC 2014 em São Paulo

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
449
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • according to OCP software should be open for extension and closed for modification
    Você não precisa abrir o peito de uma pessoa para colocar um casaco.
  • according to OCP software should be open for extension and closed for modification
    Você não precisa abrir o peito de uma pessoa para colocar um casaco.
  • CDI possibilita a extensão de suas funcionalidades – Hack Java EE :)
    A especificação fornece um SPI (que é uma Service Provider Interface), onde o o Provedor de serviços implementa uma interface para estender o CDI
    Esta funcionalidade é oficialmante chamada de CDI Portable Extensions
    É portable pois todos os servers devem suportar sua implantação
    Nada mais, nada menos que um JAR
  • Conjunto de Portable Extensions CDI com diversas funcionalidades e extensões prontas para você dar uma acelerada no seu projeto.
  • Quem estava escrevendo Portable Extensions CDI?
  • O DeltaSpike NÃO é um full stack frameworkj como o Seam, Spring, Play, etc
    Não há nada de errado hoje em dia nos chamados Full Stack Frameworks (englobam funcionalides para View, Persistência, Segurança)
    A confusão veio por causa do Seam 3
  • Mesmo com a garantia de portabilidade na especidicac&amp;apos;ão CDI para Portalble estensions,
    A integração contínua do DeltaSpike é testada nas implmentações Glassfish, 3 e 4, Weld 1, 2, TomEE, OpenWebBeans
  • Antes de falarmos das funcionalidades, é preciso saber...
    O DeltaSpike por ser baseado em CDI é fortemente tipado.
    Oq isto significa ?
  • Ou pelo menos as funcionalidades que mais me atraem
    Posso ter os mais variados Handlers: Logar a Exception:
    - enviar para uma console administrativa,
    - enviar para uma fila para ser tratada,
    - Tratar exceptions específicas de maneira diferenciada, etc
  • Permite configurar o estágio do projeto.
    Algum dos estágio pré-definidos, você pode criar um stage custom (caso sua empresa tenha algo fora do normal)
  • Permite passar configurações para a aplicação
    Multiplas configurações por ProjectStage
    Multiplos origens de configuração, inclusive um custom
  • Permite injectar InputStreams de maneira fácil
    Pode ser um arquivo texto, uma imagem, etc
  • Permite que o código fique mais expressivo, além de facilitar e muito lidar com grandes sistemas que requeiram internacionalização
    Vantagem1: Evita Strings no código / facilita refactoring
    Vantagem2: Evitar cadastrar chaves duplicadas
  • A segurança também é type-safe onde pode-se criar anotações que serão checadas por métodos específicos
  • O Data Module criar um proxy com implementações de alguns métodos básicos como save, saveAndFlush, remove, count, findBy(PK), etc
  • Além disso, é possível criar queries customizadas usando o nome do método ou então declarar a query com a anotação @Query
  • Apesar do JSF estar caindo em desuso o type-safe view config é uma mão não roda
  • Permite a injeção de beans CDI em Jobs Quartz,
    Permite a injeção de um Schedduler para manipular os Jobs
    Permite o agendamento do Jobs através da anotação @Scheduled
  • Permite em ambiente CDI 1.0 a injeção de objetos do ambiente Servlet.
    É possível utilizar o qualifier @Deltaspike para seu código ter compatibilidade com o CDI 1.1 onde esta funcionlidade faz parte da especificação
    Também é possível registrar listerners CDI para os eventos gerados pelo Servlet
  • Transcript of "TDC 2014 SP - E o DeltaSpike ?"

    1. 1. Globalcode – Open4education Software Livre: E o DeltaSpike ? Rafael Benevides
    2. 2. Globalcode – Open4education Quem sou eu? Nome: Rafael Benevides JBoss Software Engineer JBoss Developer Materials lead Apache DeltaSpike committer Twitter: @rafabene
    3. 3. Globalcode – Open4education CDI Extensions OCP (Open closed Principle)
    4. 4. Globalcode – Open4education 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. 5. Globalcode – Open4education Apache DeltaSpike
    6. 6. Globalcode – Open4education Como tudo começou JBoss Seam 3 Apache MyFaces CODI CDI Source Comunidade Java EE
    7. 7. Globalcode – Open4education 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)
    8. 8. Globalcode – Open4education Então o DeltaSpike é um framework ?
    9. 9. Globalcode – Open4education Compatibilidade
    10. 10. Globalcode – Open4education Módulos “Extensões criadas pela comunidade são empacotadas como módulos” (Documentação DeltaSpike)
    11. 11. Globalcode – Open4education Módulos CORE Security JPA JSF Bean validation Servlet Partial Bean Data Test Control Scheduler
    12. 12. Globalcode – Open4education 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
    13. 13. Globalcode – Open4education 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(); } }
    14. 14. Globalcode – Open4education Principais funcionalidades Type-safe Project Stage UnitTest, Development SystemTest IntegrationTest Staging Production Configurável via DeltaSpike Configuration API @Inject private ProjectStage projectStage; boolean isDevProjectStage = ProjectStage .Development.equals(this.projectStage); <h:panelGroup layout="block" rendered="#{applicationConfig.projectStage == 'Development'}" -Dorg.apache.deltaspike.ProjectStage=Development
    15. 15. Globalcode – Open4education 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: System properties (deltaspike_ordinal = 400) Environment properties (deltaspike_ordinal = 300) JNDI values (deltaspike_ordinal = 200, the base name is "java:comp/env/deltaspike/") Properties file values (apache-deltaspike.properties) (deltaspike_ordinal = 100, default filename is "META-INF/apache-deltaspike.properties")
    16. 16. Globalcode – Open4education 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(); } }
    17. 17. Globalcode – Open4education 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"));
    18. 18. Globalcode – Open4education 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 }
    19. 19. Globalcode – Open4education 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(); }
    20. 20. Globalcode – Open4education 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); }
    21. 21. Globalcode – Open4education 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 { } } }
    22. 22. Globalcode – Open4education 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.” (Documentação DeltaSpike)
    23. 23. Globalcode – Open4education 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); }
    24. 24. Globalcode – Open4education 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
    25. 25. Globalcode – Open4education 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
    26. 26. Globalcode – Open4education 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
    27. 27. Globalcode – Open4education Conclusão O DeltaSpike não é um full-stack framework O DeltaSpike é um conjunto de Portable Extensions para facilitar o desenvolvimento Java utilizando CDI O DeltaSpike é um conjunto de ferramentas!
    28. 28. Globalcode – Open4education Código Exemplo /rafabene https://github.com /demo_deltaspike
    29. 29. Globalcode – Open4education
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×