Apresentação tdc como aproveitar os novos recursos do java ee 7

30
Como aproveitar os novos recursos do Java EE 7 Denis Tiago | @denistiago Rodrigo Santos | @rodimes

Transcript of Apresentação tdc como aproveitar os novos recursos do java ee 7

Page 1: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Como aproveitar os novos recursos do Java EE 7Denis Tiago | @denistiagoRodrigo Santos | @rodimes

Page 2: Apresentação tdc   como aproveitar os novos recursos do java ee 7

● Websockets○ Rapida introdução

○ Demo

○ Api

● Batch Api na prática

● Bean validation 1.1

Agenda

Page 3: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● O que é?

○ Protocol RFC 6455

○ Bidirection communication channel

○ Over TCP

○ Provides Server push

Page 4: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● Como funciona?

Client RequestGET /endpoint HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeOrigin: http://example.com

Server ResponseHTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: Upgrade

Page 5: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● Como funciona?

Page 6: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● Por que não usar long pooling ou comet?

○ Http overhead (kb not bytes)

○ Http não foi feito para isso

○ Real time???

Page 7: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● Blz!! mas e o suporte nos browsers???

fonte: www.caniuse.com

Page 8: Apresentação tdc   como aproveitar os novos recursos do java ee 7

● Fallback?

○ Atmosphere

○ Socket.io

○ ServerEndpointConfig.Builder.create(ProgrammaticEndpoint.class, "/uri").build();

Web Sockets

Page 9: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets

DEMO

Page 10: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● Hello world api

import javax.websocket.*;

@ServerEndpoint("/hello")public class HelloBean {

@OnMessage public String onMessage(String name) { return “Hello “ + name; }

}

Page 11: Apresentação tdc   como aproveitar os novos recursos do java ee 7

● Endpoint

@ServerEndpoint(value="/subscribers/{user-id}",encoders={JsonEndoder.class},decoders={JsonEndoder.class},configurator = {EndpointConfigurator.class}

)public class SubscriberEndpoint { ...}

Web Sockets

Page 12: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets ● Lifecycle

@OnOpenpublic void onOpen(Session session);

@OnCLosepublic void onClose(Session session, CloseReason closeReason);

@OnErrorpublic void onError(Session session, Throwable thr);

@OnMessagepublic void onMessage(Session session, String data);

Page 13: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● Session

session.addMessageHandler(new MessageHandler(){....});

session.isOpen();

session.getAsyncRemote().sendText("");

session.close(CloseReason.CloseCodes.CANNOT_ACCEPT);

Page 14: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web Sockets● Client

@ClientEndpoint(value="/subscribers/{user-id}"

)public class SubscriberEndpoint {

....}

WebSocketContainer container = ContainerProvider.getWebSocketContainer();container.connectToServer(SubscriberEndpoint.class,URI.create("ws://localhost"));

Page 15: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web sockets● E segurança??

Page 16: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Web sockets● Containers

Glassfish 4.0 (tyrus) Jboss 8.0.0.Alpha1

Page 17: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API ● Introdução a JSR 352

● Conceitos

● Projetando um Job de Download de

Imagens○ Batchlet

○ Chunk

Page 18: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API Introdução JSR 352

● O que é?

○ Processamento batch.■ Possui muitas caracteristicas em comun■ Atividade da maioria das aplicações corporativas

● Porque ?○ Padronização de uma idéia boa.

Page 19: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API Conceitos

Page 20: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API Fluxo do Download Imagens

Page 21: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API JSL - Job Specification Language

● Configuração dos Jobs

○ Arquivos xml em:

META-INF/batch-jobs

WEB-INF/classes/META-INF/batch-jobs

Page 22: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API JSL - Job Specification Language

:

Page 23: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API

:

Page 24: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Batch API Batchlet

● Simples, permite maior liberdade de implementação

● Executado apenas uma vez, orientado a tarefa

● Caracteristicas uteis para o mundo real

○ Cópia de arquivos.

○ Enviar emails , gerar um relatório.

○ Disparar querys de update em massa.

Page 25: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Mudanças Bean validations 1.1

● Dependency Injection and CDI integrationpublic class ZipCodeValidator implements ConstraintValidator<ZipCode, String> {

@Inject private ZipCodeChecker checker;

public void initialize(ZipCode zipCode) {}

@Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value==null) return true; return checker.isZipCodeValid(value);

}}

Page 26: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Mudanças Bean validations 1.1

● Group Conversion

public class Place { @Valid @ConvertGroup.List( { @ConvertGroup(from=Default.class, to=Complete.class), } ) Address address;}

public class User { @Valid

Address address;}

public class Address {

....

@NotNull(groups =Complete.class)

private Double lat;

@NotNull(groups = Complete.class )

private Double long;

}

Page 27: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Mudanças Bean validations 1.1

● Message interpolation via the unified expression language

@DecimalMax(inclusive = true, value = "10.5")

private BigDecimal score;

javax.validation.constraints.DecimalMax.message=\

must be less than ${inclusive == true ? 'or equal to ' : ''}{value}

Page 28: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Mudanças Bean validations 1.1

● Method Validationpublic class UserService { public User findUserById(@NotNull Long id) { .... } public @NotNull List<User> findAll() { .... }}

Page 29: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Mudanças Bean validations 1.1

● Method Validation○ Pros

■ Design by Contract■ Validações declarativas

○ Cons■ Depende de um provedor de interceptors ■ Herança de validações ainda não funciona muito

bem

Page 30: Apresentação tdc   como aproveitar os novos recursos do java ee 7

Fim● Perguntas?

Estamos contratando. 100% home [email protected]