Advertisement
Advertisement

More Related Content

Similar to TDC 2014 SP - E o DeltaSpike ?(20)

Advertisement

Recently uploaded(20)

Advertisement

TDC 2014 SP - E o DeltaSpike ?

  1. Globalcode – Open4education Software Livre: E o DeltaSpike ? Rafael Benevides
  2. Globalcode – Open4education Quem sou eu? Nome: Rafael Benevides JBoss Software Engineer JBoss Developer Materials lead Apache DeltaSpike committer Twitter: @rafabene
  3. Globalcode – Open4education CDI Extensions OCP (Open closed Principle)
  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. Globalcode – Open4education Apache DeltaSpike
  6. Globalcode – Open4education Como tudo começou JBoss Seam 3 Apache MyFaces CODI CDI Source Comunidade Java EE
  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. Globalcode – Open4education Então o DeltaSpike é um framework ?
  9. Globalcode – Open4education Compatibilidade
  10. Globalcode – Open4education Módulos “Extensões criadas pela comunidade são empacotadas como módulos” (Documentação DeltaSpike)
  11. Globalcode – Open4education Módulos CORE Security JPA JSF Bean validation Servlet Partial Bean Data Test Control Scheduler
  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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Globalcode – Open4education Código Exemplo /rafabene https://github.com /demo_deltaspike
  29. Globalcode – Open4education

Editor's Notes

  1. 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.
  2. 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.
  3. 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
  4. Conjunto de Portable Extensions CDI com diversas funcionalidades e extensões prontas para você dar uma acelerada no seu projeto.
  5. Quem estava escrevendo Portable Extensions CDI?
  6. 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
  7. 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
  8. Antes de falarmos das funcionalidades, é preciso saber... O DeltaSpike por ser baseado em CDI é fortemente tipado. Oq isto significa ?
  9. 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
  10. 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)
  11. Permite passar configurações para a aplicação Multiplas configurações por ProjectStage Multiplos origens de configuração, inclusive um custom
  12. Permite injectar InputStreams de maneira fácil Pode ser um arquivo texto, uma imagem, etc
  13. 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
  14. A segurança também é type-safe onde pode-se criar anotações que serão checadas por métodos específicos
  15. O Data Module criar um proxy com implementações de alguns métodos básicos como save, saveAndFlush, remove, count, findBy(PK), etc
  16. 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
  17. Apesar do JSF estar caindo em desuso o type-safe view config é uma mão não roda
  18. 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
  19. 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
Advertisement