Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TDC 2014 SP - E o DeltaSpike ?

887 views

Published on

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

Published in: Technology
  • Be the first to comment

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

×