SlideShare uma empresa Scribd logo
1 de 5
Baixar para ler offline
Transformando eficientemente
resultados de uma consulta
JDBC para JSON
Vamos enfrentá-lo: JSON é o formato de saída dominante para os
serviços mais RESTful. Então, o que é uma maneira fácil de
converter seus resultados SQL para este formato popular? Leia
mais para descobrir como.
Um monte de dados da empresa são armazenados em bancos de
dados relacionais e acessado através de consultas SQL. Muitos
serviços web são pouco mais do que invólucros com base em
HTTP em torno de tais consultas.
Infelizmente, transformando os resultados da consulta para JSON
para que ele possa ser consumido por um aplicativo cliente muitas
vezes envolve numerosos passos ineficientes, tais como ligação
cada linha para um objeto de dados e carregar todos os dados na
memória antes de serialização-lo de volta para o chamador. Este
tipo de abordagem tem um impacto negativo no desempenho e
scalabilty. Cada linha requer múltiplas alocações de heap e
invocações do construtor, aumentando a latência e carga da CPU.
Pior, o chamador não receber uma resposta até que todo o
conjunto de dados foi processada.
Além disso, uma vez que cada resposta é carregado
completamente na memória, aplicações de grande volume
requerem uma grande quantidade de RAM, e só pode ser
dimensionado através da adição de hardware mais física.
Eventualmente, o coletor de lixo tem que correr, retardando todo
o sistema.
Uma abordagem muito mais eficiente é para transmitir dados de
resposta. Em vez de copiar os resultados da consulta em uma
estrutura de dados na memória antes de enviar a resposta, o
serviço web pode escrever uma linha de dados para o fluxo de
saída cada vez que uma linha é lida a partir do conjunto de
resultados. Isto permite a um cliente para começar a receber os
dados assim que ele estiver disponível, reduzindo
significativamente a latência. Além disso, porque há estruturas de
dados são criadas intermédias, CPU e memória de carga é
reduzida, permitindo que cada servidor para lidar com maior
número de pedidos simultâneos. Finalmente, porque menos
alocações de heap são necessários, o coletor de lixo precisa ser
executado com muito menos frequência, resultando em menos
pausas do sistema.
Introducing HTTP-RPC
HTTP-RPC é um framework open-source para simplificar o
desenvolvimento de aplicativos baseados em REST. Ele permite
aos desenvolvedores criar e de acesso com base em HTTP serviços
web usando uma RPC-como metáfora conveniente, preservando
princípios fundamentais de REST como apatridia e acesso a
recursos uniforme. O projeto atualmente inclui suporte para a
implementação de serviços REST em Java e consumo de serviços
em Java, Objective-C / Swift, ou JavaScript.
serviços HTTP-RPC são acessados através da aplicação de um
verbo HTTP como GET ou POST para um recurso de destino.
Argumentos são fornecidos quer através da cadeia de consulta ou
no corpo da solicitação, como um formulário HTML. Os
resultados são geralmente retornado como JSON, apesar de as
operações que não retornam um valor também são suportados.
Por exemplo, a sequência do pedido pode recuperar a soma de
dois números, cujos valores são especificados pelos argumentos a
e b de consulta:
GET /math/sum?a=2&b=4
O serviço iria retornar o valor 6 em resposta.
WebService Class
WebService é uma classe base abstrata para serviços web HTTP-
RPC. operações de serviço são definidos pela adição de métodos
públicos para a implementação do serviço concreto.
A anotação @RPC é usado para marcar um método como acessível
remotamente. Esta anotação associa um verbo HTTP e um
caminho de recursos com o método. Todos os métodos públicos
anotada automaticamente tornam-se disponíveis para a execução
remota de quando o serviço é publicado.
Por exemplo, a seguinte classe pode ser utilizada para
implementar a operação de adição simples discutidos na secção
anterior:
public class MathService extends WebService {
@RPC(method="GET", path="sum")
public double getSum(double a, double b) {
return a + b;
}
}
 Argumentos pode ser qualquer tipo primitivo numérico,
booleano, String, java.net.URL ou java.util.List. Argumentos
de URL representam conteúdo binário e só pode ser usado
com solicitações POST. os argumentos da lista pode ser
usado com qualquer tipo de solicitação, mas os elementos da
lista deve ser um tipo simples suportado; por exemplo. List
<Double> orList <URL>.
 Os métodos podem retornar qualquer tipo primitivo
numérico, booleano, CharSequence, java.util.List ou
java.util.Map. Os resultados são mapeados para os seus
equivalentes JSON como se segue:numeric primitive:
number
 boolean: true/false
 CharSequence: string
 java.util.List: array
 java.util.Map: object
Métodos também pode retornar nulo para indicar que eles não
produzem um valor.
Lista e mapear tipos não são obrigados a apoiar o acesso aleatório;
iteratividade é suficiente. Isso permite que implementações de
serviço para transmitir dados de coleção em vez de buffer na
memória antes de serem gravados. Além disso, tipos de coleção
que implementam a interface AutoCloseable será fechado
automaticamente após o seu conteúdo ter sido escrito para o fluxo
de saída, garantindo que os recursos do sistema não são
divulgados.
ResultSetAdapter Class
A classe ResultSetAdapter permite que o resultado de uma
consulta SQL para ser eficientemente retornado de um método de
serviço. Essa classe implementa a interface List e faz com que cada
linha em um conjunto de resultados JDBC aparecer como uma
instância de Mapa, tornando os dados adequados para
serialização JSON. Também implementsAutoCloseable, para
garantir que o conjunto de resultados subjacente é fechado uma
vez que todos os dados de resposta foi escrito.
Além disso, ResultSetAdapter é só para a frente de rolagem; seu
conteúdo, não são acessíveis através do () métodos andsize get ().
Isto permite que os resultados da consulta para ser devolvida ao
chamador directamente, sem qualquer intermediário de
tamponamento.
Por exemplo, considere um serviço web que retorna o resultado de
uma consulta SQL nesta mesa, tomadas a partir da base de dados
exemplo BIRT:
CREATE TABLE Products (
productCode VARCHAR(50) NOT NULL,
productName VARCHAR(70) NOT NULL,
productLine VARCHAR(50) NOT NULL,
productScale VARCHAR(10) NOT NULL,
productVendor VARCHAR(50) NOT NULL,
productDescription TEXT NOT NULL,
quantityInStock SMALLINT NOT NULL,
buyPrice DOUBLE NOT NULL,
MSRP DOUBLE NOT NULL,
PRIMARY KEY (productCode)
);
O serviço pode simplesmente executar a consulta, passar o
conjunto de resultados para o construtor do adaptador, e retornar
a instância do adaptador:
@RPC(method="GET", path="products")
public ResultSetAdapter getProducts() throws SQLException {
Statement statement = getConnection().createStatement();
return new ResultSetAdapter(statement.executeQuery("SELECT * FROM
Products"));
}
A resposta produzida pelo método poderia ser algo como este,
onde cada objeto na matriz representa uma linha do conjunto de
resultados:
[
{
"productCode": "S10_1678",
"productName": "1969 Harley Davidson Ultimate Chopper",
"productLine": "Motorcycles",
"productScale": "1:10",
"productVendor": "Min Lin Diecast",
"productDescription": "This replica features working kickstand..."
,
"quantityInStock": 7932,
"buyPrice": 48.81,
"MSRP": 95.7
},
...
]
Com apenas algumas linhas de código, os resultados da consulta
são rápida e eficientemente retornado para o chamador, com o
quadro que garanta que os recursos de banco de dados
subjacentes forem correctamente eliminadas, uma vez a resposta
foi enviada.

Mais conteúdo relacionado

Mais procurados

Mule esb teste parte 2
Mule esb teste   parte 2Mule esb teste   parte 2
Mule esb teste parte 2Jeison Barros
 
Mule esb teste parte 1
Mule esb teste   parte 1Mule esb teste   parte 1
Mule esb teste parte 1Jeison Barros
 
Redes servidor web
Redes servidor webRedes servidor web
Redes servidor webMauro Duarte
 
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...Professor Samuel Ribeiro
 
Android - Consumindo Webservices
Android - Consumindo WebservicesAndroid - Consumindo Webservices
Android - Consumindo WebservicesArthur Emanuel
 
Principais duvidas sobre mule
Principais duvidas sobre mulePrincipais duvidas sobre mule
Principais duvidas sobre muleJeison Barros
 
Apache Camel
Apache CamelApache Camel
Apache CamelPT.JUG
 
Psdc - 2014/01
Psdc - 2014/01Psdc - 2014/01
Psdc - 2014/01Isa Prati
 
Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsEduardo Mendes
 

Mais procurados (10)

Mule esb teste parte 2
Mule esb teste   parte 2Mule esb teste   parte 2
Mule esb teste parte 2
 
Mule esb teste parte 1
Mule esb teste   parte 1Mule esb teste   parte 1
Mule esb teste parte 1
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Redes servidor web
Redes servidor webRedes servidor web
Redes servidor web
 
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...Introdução à programação para web com Java -  Módulo 03: Conceitos básicos de...
Introdução à programação para web com Java - Módulo 03: Conceitos básicos de...
 
Android - Consumindo Webservices
Android - Consumindo WebservicesAndroid - Consumindo Webservices
Android - Consumindo Webservices
 
Principais duvidas sobre mule
Principais duvidas sobre mulePrincipais duvidas sobre mule
Principais duvidas sobre mule
 
Apache Camel
Apache CamelApache Camel
Apache Camel
 
Psdc - 2014/01
Psdc - 2014/01Psdc - 2014/01
Psdc - 2014/01
 
Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e Taglibs
 

Destaque

veverka DE65 Opinion
veverka DE65 Opinionveverka DE65 Opinion
veverka DE65 OpinionWilliam Clair
 
Roofer westchester county ny
Roofer westchester county nyRoofer westchester county ny
Roofer westchester county nylakshmi durga
 
TEDxUCDavis SAV(vy) Orientation
TEDxUCDavis SAV(vy) OrientationTEDxUCDavis SAV(vy) Orientation
TEDxUCDavis SAV(vy) OrientationJenny Bounmivilay
 
Aprenentatge Basat en Projectes: Nivells i vies de transició.
Aprenentatge Basat en Projectes: Nivells i vies de transició.Aprenentatge Basat en Projectes: Nivells i vies de transició.
Aprenentatge Basat en Projectes: Nivells i vies de transició.jdomen44
 
Rúbricas Clásicos Escolares Tarea del Módulo 3
Rúbricas Clásicos Escolares Tarea del Módulo 3Rúbricas Clásicos Escolares Tarea del Módulo 3
Rúbricas Clásicos Escolares Tarea del Módulo 3tomasrodriguezreyes
 
Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.
Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.
Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.jdomen44
 
Katastatiko neognologikis
Katastatiko neognologikisKatastatiko neognologikis
Katastatiko neognologikispsaltakis
 
Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16
Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16
Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16tomasrodriguezreyes
 
Μαριάννα - Αυτόχθονες λαοί
Μαριάννα - Αυτόχθονες λαοίΜαριάννα - Αυτόχθονες λαοί
Μαριάννα - Αυτόχθονες λαοίpitm1
 
Introdução a RAML - parte 1
Introdução a RAML -  parte 1Introdução a RAML -  parte 1
Introdução a RAML - parte 1Jeison Barros
 
Service orchestration by using flows
Service orchestration by using flowsService orchestration by using flows
Service orchestration by using flowsSindhu VL
 

Destaque (20)

Ellos 20141021
Ellos 20141021Ellos 20141021
Ellos 20141021
 
Mule security - pgp
Mule  security - pgpMule  security - pgp
Mule security - pgp
 
veverka DE65 Opinion
veverka DE65 Opinionveverka DE65 Opinion
veverka DE65 Opinion
 
Mule saas
Mule  saasMule  saas
Mule saas
 
Roofer westchester county ny
Roofer westchester county nyRoofer westchester county ny
Roofer westchester county ny
 
Engage
EngageEngage
Engage
 
TEDxUCDavis SAV(vy) Orientation
TEDxUCDavis SAV(vy) OrientationTEDxUCDavis SAV(vy) Orientation
TEDxUCDavis SAV(vy) Orientation
 
How to make ... Smore
How to make ... SmoreHow to make ... Smore
How to make ... Smore
 
Aprenentatge Basat en Projectes: Nivells i vies de transició.
Aprenentatge Basat en Projectes: Nivells i vies de transició.Aprenentatge Basat en Projectes: Nivells i vies de transició.
Aprenentatge Basat en Projectes: Nivells i vies de transició.
 
Maven in Mule
Maven in MuleMaven in Mule
Maven in Mule
 
Rúbricas Clásicos Escolares Tarea del Módulo 3
Rúbricas Clásicos Escolares Tarea del Módulo 3Rúbricas Clásicos Escolares Tarea del Módulo 3
Rúbricas Clásicos Escolares Tarea del Módulo 3
 
Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.
Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.
Les controvèrsies com a contexts rellevants per a l'experimentació a les aules.
 
Kahoot questions
Kahoot questionsKahoot questions
Kahoot questions
 
Katastatiko neognologikis
Katastatiko neognologikisKatastatiko neognologikis
Katastatiko neognologikis
 
Estrategias para evitar reingresos
Estrategias para evitar reingresosEstrategias para evitar reingresos
Estrategias para evitar reingresos
 
Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16
Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16
Guía de lectura. los doce trabajos de hércules Clásicos Escolares 15/16
 
Μαριάννα - Αυτόχθονες λαοί
Μαριάννα - Αυτόχθονες λαοίΜαριάννα - Αυτόχθονες λαοί
Μαριάννα - Αυτόχθονες λαοί
 
λαπωνια
λαπωνιαλαπωνια
λαπωνια
 
Introdução a RAML - parte 1
Introdução a RAML -  parte 1Introdução a RAML -  parte 1
Introdução a RAML - parte 1
 
Service orchestration by using flows
Service orchestration by using flowsService orchestration by using flows
Service orchestration by using flows
 

Semelhante a Transformando resultados JDBC para JSON de forma eficiente

Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTMario Sergio
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
Apostila: Curso de java III
Apostila: Curso de java IIIApostila: Curso de java III
Apostila: Curso de java IIIVerônica Veiga
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Thyago Maia
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Thyago Maia
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationMario Sergio
 
Apontamentos psi m18
Apontamentos psi m18Apontamentos psi m18
Apontamentos psi m18tomascarol2
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no androidAlexandre Antunes
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPEduardo Cesar
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
Engenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoEngenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoGuilhermePetrosky
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 

Semelhante a Transformando resultados JDBC para JSON de forma eficiente (20)

Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service REST
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Apostila: Curso de java III
Apostila: Curso de java IIIApostila: Curso de java III
Apostila: Curso de java III
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
Desenvolvimento de Sistemas Web com PHP Frameworks - 2019.1 - Aula 1
 
Palestra Sobre REST
Palestra Sobre RESTPalestra Sobre REST
Palestra Sobre REST
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 
Apontamentos psi m18
Apontamentos psi m18Apontamentos psi m18
Apontamentos psi m18
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
Interagindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHPInteragindo com web services RPC, SOAP e REST utilizando PHP
Interagindo com web services RPC, SOAP e REST utilizando PHP
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Java13
Java13Java13
Java13
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 
CURSO JAVA 01
CURSO JAVA 01CURSO JAVA 01
CURSO JAVA 01
 
Engenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galoEngenharia da Computação: Resumo servlet + jsp br galo
Engenharia da Computação: Resumo servlet + jsp br galo
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Jdbc
JdbcJdbc
Jdbc
 

Mais de Jeison Barros

O básico do uso de rest vs soap
O básico do uso de rest vs soapO básico do uso de rest vs soap
O básico do uso de rest vs soapJeison Barros
 
Restful considerada prejudicial - parte 1
Restful considerada prejudicial -  parte 1Restful considerada prejudicial -  parte 1
Restful considerada prejudicial - parte 1Jeison Barros
 
Restful considerada prejudicial parte 2
Restful considerada prejudicial   parte 2Restful considerada prejudicial   parte 2
Restful considerada prejudicial parte 2Jeison Barros
 
Estratégia api e design
Estratégia api e designEstratégia api e design
Estratégia api e designJeison Barros
 
Como criar um http proxy dinamico com mule parte 3
Como criar um http proxy dinamico com mule   parte 3Como criar um http proxy dinamico com mule   parte 3
Como criar um http proxy dinamico com mule parte 3Jeison Barros
 
Como criar um http proxy dinamico com mule parte 1
Como criar um http proxy dinamico com mule   parte 1Como criar um http proxy dinamico com mule   parte 1
Como criar um http proxy dinamico com mule parte 1Jeison Barros
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcJeison Barros
 
Habilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosHabilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosJeison Barros
 
Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Jeison Barros
 
Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Jeison Barros
 
Consumindo soap wsdl
Consumindo soap wsdlConsumindo soap wsdl
Consumindo soap wsdlJeison Barros
 
Trabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do muleTrabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do muleJeison Barros
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e mavenJeison Barros
 
Estudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS ComumEstudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS ComumJeison Barros
 
Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Jeison Barros
 
Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Jeison Barros
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationJeison Barros
 
Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Jeison Barros
 

Mais de Jeison Barros (20)

Pdfteste
PdftestePdfteste
Pdfteste
 
O básico do uso de rest vs soap
O básico do uso de rest vs soapO básico do uso de rest vs soap
O básico do uso de rest vs soap
 
Restful considerada prejudicial - parte 1
Restful considerada prejudicial -  parte 1Restful considerada prejudicial -  parte 1
Restful considerada prejudicial - parte 1
 
Restful considerada prejudicial parte 2
Restful considerada prejudicial   parte 2Restful considerada prejudicial   parte 2
Restful considerada prejudicial parte 2
 
Estratégia api e design
Estratégia api e designEstratégia api e design
Estratégia api e design
 
Como criar um http proxy dinamico com mule parte 3
Como criar um http proxy dinamico com mule   parte 3Como criar um http proxy dinamico com mule   parte 3
Como criar um http proxy dinamico com mule parte 3
 
Como criar um http proxy dinamico com mule parte 1
Como criar um http proxy dinamico com mule   parte 1Como criar um http proxy dinamico com mule   parte 1
Como criar um http proxy dinamico com mule parte 1
 
Rest api vs SOAP
Rest api vs SOAPRest api vs SOAP
Rest api vs SOAP
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbc
 
Habilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosHabilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dados
 
Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2
 
Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1
 
Consumindo soap wsdl
Consumindo soap wsdlConsumindo soap wsdl
Consumindo soap wsdl
 
Trabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do muleTrabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do mule
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e maven
 
Estudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS ComumEstudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS Comum
 
Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1
 
Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplication
 
Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2
 

Transformando resultados JDBC para JSON de forma eficiente

  • 1. Transformando eficientemente resultados de uma consulta JDBC para JSON Vamos enfrentá-lo: JSON é o formato de saída dominante para os serviços mais RESTful. Então, o que é uma maneira fácil de converter seus resultados SQL para este formato popular? Leia mais para descobrir como. Um monte de dados da empresa são armazenados em bancos de dados relacionais e acessado através de consultas SQL. Muitos serviços web são pouco mais do que invólucros com base em HTTP em torno de tais consultas. Infelizmente, transformando os resultados da consulta para JSON para que ele possa ser consumido por um aplicativo cliente muitas vezes envolve numerosos passos ineficientes, tais como ligação cada linha para um objeto de dados e carregar todos os dados na memória antes de serialização-lo de volta para o chamador. Este tipo de abordagem tem um impacto negativo no desempenho e scalabilty. Cada linha requer múltiplas alocações de heap e invocações do construtor, aumentando a latência e carga da CPU. Pior, o chamador não receber uma resposta até que todo o conjunto de dados foi processada. Além disso, uma vez que cada resposta é carregado completamente na memória, aplicações de grande volume requerem uma grande quantidade de RAM, e só pode ser dimensionado através da adição de hardware mais física. Eventualmente, o coletor de lixo tem que correr, retardando todo o sistema. Uma abordagem muito mais eficiente é para transmitir dados de resposta. Em vez de copiar os resultados da consulta em uma estrutura de dados na memória antes de enviar a resposta, o serviço web pode escrever uma linha de dados para o fluxo de saída cada vez que uma linha é lida a partir do conjunto de resultados. Isto permite a um cliente para começar a receber os
  • 2. dados assim que ele estiver disponível, reduzindo significativamente a latência. Além disso, porque há estruturas de dados são criadas intermédias, CPU e memória de carga é reduzida, permitindo que cada servidor para lidar com maior número de pedidos simultâneos. Finalmente, porque menos alocações de heap são necessários, o coletor de lixo precisa ser executado com muito menos frequência, resultando em menos pausas do sistema. Introducing HTTP-RPC HTTP-RPC é um framework open-source para simplificar o desenvolvimento de aplicativos baseados em REST. Ele permite aos desenvolvedores criar e de acesso com base em HTTP serviços web usando uma RPC-como metáfora conveniente, preservando princípios fundamentais de REST como apatridia e acesso a recursos uniforme. O projeto atualmente inclui suporte para a implementação de serviços REST em Java e consumo de serviços em Java, Objective-C / Swift, ou JavaScript. serviços HTTP-RPC são acessados através da aplicação de um verbo HTTP como GET ou POST para um recurso de destino. Argumentos são fornecidos quer através da cadeia de consulta ou no corpo da solicitação, como um formulário HTML. Os resultados são geralmente retornado como JSON, apesar de as operações que não retornam um valor também são suportados. Por exemplo, a sequência do pedido pode recuperar a soma de dois números, cujos valores são especificados pelos argumentos a e b de consulta: GET /math/sum?a=2&b=4 O serviço iria retornar o valor 6 em resposta. WebService Class WebService é uma classe base abstrata para serviços web HTTP- RPC. operações de serviço são definidos pela adição de métodos públicos para a implementação do serviço concreto.
  • 3. A anotação @RPC é usado para marcar um método como acessível remotamente. Esta anotação associa um verbo HTTP e um caminho de recursos com o método. Todos os métodos públicos anotada automaticamente tornam-se disponíveis para a execução remota de quando o serviço é publicado. Por exemplo, a seguinte classe pode ser utilizada para implementar a operação de adição simples discutidos na secção anterior: public class MathService extends WebService { @RPC(method="GET", path="sum") public double getSum(double a, double b) { return a + b; } }  Argumentos pode ser qualquer tipo primitivo numérico, booleano, String, java.net.URL ou java.util.List. Argumentos de URL representam conteúdo binário e só pode ser usado com solicitações POST. os argumentos da lista pode ser usado com qualquer tipo de solicitação, mas os elementos da lista deve ser um tipo simples suportado; por exemplo. List <Double> orList <URL>.  Os métodos podem retornar qualquer tipo primitivo numérico, booleano, CharSequence, java.util.List ou java.util.Map. Os resultados são mapeados para os seus equivalentes JSON como se segue:numeric primitive: number  boolean: true/false  CharSequence: string  java.util.List: array  java.util.Map: object Métodos também pode retornar nulo para indicar que eles não produzem um valor. Lista e mapear tipos não são obrigados a apoiar o acesso aleatório; iteratividade é suficiente. Isso permite que implementações de serviço para transmitir dados de coleção em vez de buffer na memória antes de serem gravados. Além disso, tipos de coleção que implementam a interface AutoCloseable será fechado automaticamente após o seu conteúdo ter sido escrito para o fluxo de saída, garantindo que os recursos do sistema não são divulgados.
  • 4. ResultSetAdapter Class A classe ResultSetAdapter permite que o resultado de uma consulta SQL para ser eficientemente retornado de um método de serviço. Essa classe implementa a interface List e faz com que cada linha em um conjunto de resultados JDBC aparecer como uma instância de Mapa, tornando os dados adequados para serialização JSON. Também implementsAutoCloseable, para garantir que o conjunto de resultados subjacente é fechado uma vez que todos os dados de resposta foi escrito. Além disso, ResultSetAdapter é só para a frente de rolagem; seu conteúdo, não são acessíveis através do () métodos andsize get (). Isto permite que os resultados da consulta para ser devolvida ao chamador directamente, sem qualquer intermediário de tamponamento. Por exemplo, considere um serviço web que retorna o resultado de uma consulta SQL nesta mesa, tomadas a partir da base de dados exemplo BIRT: CREATE TABLE Products ( productCode VARCHAR(50) NOT NULL, productName VARCHAR(70) NOT NULL, productLine VARCHAR(50) NOT NULL, productScale VARCHAR(10) NOT NULL, productVendor VARCHAR(50) NOT NULL, productDescription TEXT NOT NULL, quantityInStock SMALLINT NOT NULL, buyPrice DOUBLE NOT NULL, MSRP DOUBLE NOT NULL, PRIMARY KEY (productCode) ); O serviço pode simplesmente executar a consulta, passar o conjunto de resultados para o construtor do adaptador, e retornar a instância do adaptador: @RPC(method="GET", path="products") public ResultSetAdapter getProducts() throws SQLException { Statement statement = getConnection().createStatement(); return new ResultSetAdapter(statement.executeQuery("SELECT * FROM Products")); }
  • 5. A resposta produzida pelo método poderia ser algo como este, onde cada objeto na matriz representa uma linha do conjunto de resultados: [ { "productCode": "S10_1678", "productName": "1969 Harley Davidson Ultimate Chopper", "productLine": "Motorcycles", "productScale": "1:10", "productVendor": "Min Lin Diecast", "productDescription": "This replica features working kickstand..." , "quantityInStock": 7932, "buyPrice": 48.81, "MSRP": 95.7 }, ... ] Com apenas algumas linhas de código, os resultados da consulta são rápida e eficientemente retornado para o chamador, com o quadro que garanta que os recursos de banco de dados subjacentes forem correctamente eliminadas, uma vez a resposta foi enviada.