tdc 2014 sp - e o deltaspike ?

29
Globalcode – Open4education Software Livre: E o DeltaSpike ? Rafael Benevides

Upload: rafael-benevides

Post on 17-Mar-2018

883 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Software Livre: E o DeltaSpike ?Rafael Benevides

Page 2: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Quem sou eu?

Nome: Rafael BenevidesJBoss Software Engineer

JBoss Developer Materials lead

Apache DeltaSpike committer

Twitter: @rafabene

Page 3: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

CDI Extensions

OCP (Open closed Principle)

Page 4: TDC 2014 SP - E o DeltaSpike ?

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

Page 5: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Apache DeltaSpike

Page 6: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Como tudo começou

JBoss Seam 3 Apache MyFacesCODI

CDI Source Comunidade Java EE

Page 7: TDC 2014 SP - E o DeltaSpike ?

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)

Page 8: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Então o DeltaSpike éum framework ?

Page 9: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Compatibilidade

Page 10: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Módulos

“Extensões criadas pela comunidade são empacotadas como módulos”

(Documentação DeltaSpike)

Page 11: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Módulos

CORE

Security

JPA

JSF

Bean validation

Servlet

Partial Bean

Data

Test Control

Scheduler

Page 12: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Strong typing

Injeção de dependência tipadaElimina a dependência de Strings

Fácil refatoração

Compilador pode detectar errosNenhuma ferramenta especial é

necessária

Elimina cast (ok, esconde casts)

Resolução de erros detectado durante deploy

Strong typing == Strong tooling

Page 13: TDC 2014 SP - E o DeltaSpike ?

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();

}

}

Page 14: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Principais funcionalidades

Type-safe Project StageUnitTest,

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

Page 15: TDC 2014 SP - E o DeltaSpike ?

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")

Page 16: TDC 2014 SP - E o DeltaSpike ?

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(); } }

Page 17: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Principais funcionalidades

I18n Messages

@Named("msg")@MessageBundlepublic interface Messages { public String usuarioAdicionado(String username); public String usuario(); @MessageTemplate("{password}") public String senha();}

<br /> #{msg.senha()}:

@Injectprivate Messages messages;

new FacesMessage(msg.usuarioAdicionado("Rafael"));

Page 18: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Principais funcionalidades

Segurança

@Retention(value = RetentionPolicy.RUNTIME)@Target({ ElementType.TYPE, ElementType.METHOD })@Documented@SecurityBindingTypepublic @interface AdminOnly {

}

@ApplicationScopedpublic 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 }

Page 19: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Principais Funcionalidades

Data Module – Repository Pattern@Repositorypublic interface RepositorioUsuarios extends EntityRepository<Usuario, Long> {

// O DeltaSpike cria um proxy com implementações para● count();● findAll();● findBy(PK);● flush();● refresh();● remove();● save();● saveAndFlush(); }

Page 20: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Principais Funcionalidades

Data Module – Repository Pattern@Repositorypublic interface RepositorioUsuarios extends EntityRepository<Usuario, Long> {

// O próprio nome do método cria o SQL public Usuario findByUsernameAndPassword(String username, char[] password); }

@Repositorypublic 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);

}

Page 21: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Principais funcionalidades

Type-safe view-config for JSF

// type-safe outcomepublic Class<Welcome> telaHome() { return Home.class;}

@Inject

ViewNavigationHandler vnh;

// type-safe outcomepublic 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 { } }}

Page 22: TDC 2014 SP - E o DeltaSpike ?

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)

Page 23: TDC 2014 SP - E o DeltaSpike ?

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);}

Page 24: TDC 2014 SP - E o DeltaSpike ?

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

Page 25: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Outras funcionalidades

Bean Validation ModulePermite que “Validators” recebam injeção de objetos via CDI em ambiente java EE 6 / CDI 1.0

Partial BeanPermite a criação de implementações para suas interfaces ou classes abstratas

Page 26: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Outras funcionalidades

Container ControlPermite fazer o boot de implementações CDI em ambiente Java SE, bem como controlar o ciclo de vida dos contextos

Test ControlFacilita a criação de testes CDI

Inicia e finalizar o container CDI / Inicia Contextos

Controla o ProjectStage

Page 27: TDC 2014 SP - E o DeltaSpike ?

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!

Page 28: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education

Código Exemplo

/rafabenehttps://github.com

/demo_deltaspike

Page 29: TDC 2014 SP - E o DeltaSpike ?

Globalcode – Open4education