BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias API Java para RESTful Web Services 2.1 liberada

API Java para RESTful Web Services 2.1 liberada

Favoritos

JAX-RS 2.1 Java API para RESTful Web Services foi liberada recentemente. De acordo com Santiago Pericas-Geertsen, membro principal da equipe técnica na Oracle e líder de especificações para a JSR, o JAX-RS 2.1 inclui o suporte para eventos server-sents, JSON-B e suporte aperfeiçoado para o JSON-P. A API também conta com uma extensão reativa para a API client, com suporte para o Java 8 CompletionStage e um ponto de extensão para outras APIs reativas como o RxJava.

De acordo com a especificação do JAX-RS 2.1, o foco desta release inclui anotações para POJOs, API flexível com suporte de alto nível para padrões de uso comum HTTP e aplicações incluindo WebDAV e o Atom Publishing Protocol. A API suporta uma série de tipos de conteúdo de HTTP entity body, servlet containers e JAX-WS Providers. Por fim, a API tem suporte à funcionalidades Java EE e componentes dentro de uma classe de recurso web.

O InfoQ conversou com Pericas-Geertsen, que elaborou server-sent events:

Server-sent-event (SSE) injetam um tipo especial chamado SseEventSink e produzem text/event-stream. Clientes SSE usam um SseEventSource para ler eventos de uma conexão.

Este mecanismo usa conexões de longa duração e broadcasting, que proporciona um desempenho melhorado sobre pooling, uso intensivo de recursos e conexões de curta duração.

O bloco a seguir ilustra o uso do SSE.

Server:

@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void getMessageQueue(@Context Sse sse, @Context SseEventSink eventSink) {
    // Resource method is invoked when a client subscribes to an event stream.
    // That implies that sending events will most likely happen from different
    // context - thread / event handler / etc, so common implementation of the
    // resource method will store the eventSink instance and the application 
    // logic will retrieve it when an event should be emitted to the client.
    
    // sending events:
    eventSink.send(sse.newEvent("event1"));
}

Cliente:

WebTarget target = ClientBuilder.newClient().target("server-sent-events");

SseEventSource eventSource = SseEventSource.target(target).build();

// EventSource#register(Consumer)
// Registered event handler will print the received message.
eventSource.register(System.out::println);

// Subscribe to the event stream.
eventSource.open();

Pericas-Geertsen adicionou:

  • JAX-RS 2.1 é totalmente compatível com as versões anteriores;
  • As novas funcionalidades se integram muito bem com os conceitos existentes do JAX-RS. Por exemplo, simplesmente injetando uma chamada de método em uma invocação cliente pode mudar o processamento de síncrono para reativo;
  • SSE depende da transmissão de conexões baseadas em HTTP, por isso é uma extensão natural das APIs existentes.

Uma vez que a API utiliza extensivamente annotations e expressões lambdas, a nova versão suporta aplicações desenvolvidas no Java SE 8 ou superior.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

BT