Utilizao de Micro servios Java em Nuvem com

  • Slides: 58
Download presentation
Utilização de Micro serviços Java em Nuvem com Oracle APEX Igor Augusto de Faria

Utilização de Micro serviços Java em Nuvem com Oracle APEX Igor Augusto de Faria Costa Auditor Federal de Finanças e Controle Fabio dos Santos Barbosa Auditor Federal de Finanças e Controle

Apresentação 1. Introdução 2. Stored Procedures em Java – Vantagens e Desvantagens 3. Micro

Apresentação 1. Introdução 2. Stored Procedures em Java – Vantagens e Desvantagens 3. Micro serviços 1. Arquitetura descentralizada e suas vantagens; 2. Criação de um micro serviço em Java; 3. Execução na nuvem 4. Integração no APEX com micro serviços: 1. Por meio do Plug-in Servitium; 2. Por meio do Micro: APP e Plug-in APEX. 3. Demonstração.

Introdução Oracle APEX Programação em PL/SQL

Introdução Oracle APEX Programação em PL/SQL

Introdução Oracle APEX Programação em PL/SQL

Introdução Oracle APEX Programação em PL/SQL

Introdução Processos Dynamic Actions PL/SQL Dynamic Regions Relatórios Plug-ins

Introdução Processos Dynamic Actions PL/SQL Dynamic Regions Relatórios Plug-ins

Introdução Processos Dynamic Actions PL/SQL Dynamic Regions Tem como. PL/SQL fazer de tudo? Relatórios

Introdução Processos Dynamic Actions PL/SQL Dynamic Regions Tem como. PL/SQL fazer de tudo? Relatórios Plug-ins

Introdução Possível PL/SQL • • • Cálculos Matemáticos Reorganização de dados Envio de E-mails

Introdução Possível PL/SQL • • • Cálculos Matemáticos Reorganização de dados Envio de E-mails Geração de HTML padronizado Integração com Web Services E infinitas outras coisas! Quase tudo. . . “Impossível” • Integração com SMTP; • Listar arquivos em um diretório;

Introdução PL/SQL Possível • • • Java Cálculos Matemáticos Reorganização de dados Envio de

Introdução PL/SQL Possível • • • Java Cálculos Matemáticos Reorganização de dados Envio de E-mails Geração de HTML padronizado Integração com Web Services E infinitas outras coisas! Quase tudo. . . “Impossível” • Integração com SMTP; • Listar arquivos em um diretório;

Introdução Java Stored Procedures Java PL/SQL

Introdução Java Stored Procedures Java PL/SQL

Java Stored Procedures Java public class Hello. World { // Método estático que retorna

Java Stored Procedures Java public class Hello. World { // Método estático que retorna o texto do Hello World public static String get. Hello. World. Text() { return "Hello World all the folks from ODT 2017!"; } }

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures CREATE FUNCTION GET_HELLO_WORLD_TEXT RETURN VARCHAR 2 AS LANGUAGE JAVA NAME 'Hello.

Java Stored Procedures CREATE FUNCTION GET_HELLO_WORLD_TEXT RETURN VARCHAR 2 AS LANGUAGE JAVA NAME 'Hello. World. get. Hello. World. Text() return java. lang. String';

Java Stored Procedures

Java Stored Procedures

Java Stored Procedures Vantagens Desvantagens • Flexibilidade e organização do Java no PL/SQL ou

Java Stored Procedures Vantagens Desvantagens • Flexibilidade e organização do Java no PL/SQL ou APEX; • Bibliotecas; • SQLJ • Demora para atualizar as classes; • Dificuldade em incluir bibliotecas; • Dificuldades de migração na atualização do APEX ou do Oracle. • Executa direto no banco.

Micro serviços

Micro serviços

Micro Serviços • Arquitetura onde a aplicação é uma coleção de serviços com baixo

Micro Serviços • Arquitetura onde a aplicação é uma coleção de serviços com baixo acoplamento e que implementam capacidades de negócio. (Chris Richardson – Microservices. io) • Uma forma de projetar aplicações como conjuntos de serviços independentes publicáveis (Martin Fowler) Componentes SOA Web Services REST Containers

Micro Serviços - Características Arquitetura descentralizada Containers Escalabilidade Especificidades das linguagens Python Java C#

Micro Serviços - Características Arquitetura descentralizada Containers Escalabilidade Especificidades das linguagens Python Java C# PHP Organização e Otimização Baixo acoplamento e autônomos Manutenções do APEX independentes. Reutilizáveis.

Micro Serviços – Exemplo de paradigmas SISTEMA ABC Módulo cadastral em APEX ID as

Micro Serviços – Exemplo de paradigmas SISTEMA ABC Módulo cadastral em APEX ID as a Service candidatos Candidatos Apuração Login Múltiplas Instâncias Apuração

Micro Serviços – O que eu preciso • Monitoramento mínimo • Integração contínua •

Micro Serviços – O que eu preciso • Monitoramento mínimo • Integração contínua • Deploy Ágil • Cultura devops • Código compatível

Micro Serviços – The Twelve-Factor App • • • Codebase Dependencies Config Backing services

Micro Serviços – The Twelve-Factor App • • • Codebase Dependencies Config Backing services Build, release, run Processes Port binding Concurrency Disposability Dev/prod parity Logs Admin processes

Micro Serviços – Demo utilizando SPARK Demonstração.

Micro Serviços – Demo utilizando SPARK Demonstração.

Micro Serviços – Demo utilizando SPARK <dependencies> <!-- api de microserviços --> <dependency> <group.

Micro Serviços – Demo utilizando SPARK <dependencies> <!-- api de microserviços --> <dependency> <group. Id>com. sparkjava</group. Id> <artifact. Id>spark-core</artifact. Id> <version>2. 6. 0</version> </dependency> <!-- Biblioteca de log --> <!-- https: //mvnrepository. com/artifact/org. slf 4 j/slf 4 j-simple --> <dependency> <group. Id>org. slf 4 j</group. Id> <artifact. Id>slf 4 j-simple</artifact. Id> <version>1. 7. 25</version> </dependency> </dependencies>

Micro Serviços – Demo utilizando SPARK Build/plug-ins/plugin Group id: org. apache. maven. plug-ins artifact.

Micro Serviços – Demo utilizando SPARK Build/plug-ins/plugin Group id: org. apache. maven. plug-ins artifact. Id: maven-compiler-plugin version: 2. 3. 2 Configuration/Source e Configuration/Target: 1. 8 artifact. Id: maven-assembly-plugin executions/execution phase: package goals/goal: single configuration/descript. Refs/descriptor. Ref: jar-with-dependencies archive/manifest/main. Class: br. gov. tesouro. main. Main

Micro Serviços – Demo utilizando SPARK package br. gov. tesouro. main; import static spark.

Micro Serviços – Demo utilizando SPARK package br. gov. tesouro. main; import static spark. Spark. *; public class Main { public static void main(String[] args) { get("/hello", (req, res) -> "Hello World"); } }

Micro Serviços – Demo utilizando SPARK

Micro Serviços – Demo utilizando SPARK

Micro Serviços – Demo utilizando SPARK

Micro Serviços – Demo utilizando SPARK

Micro Serviços – Demo utilizando SPARK #DOCKERFILE FROM openjdk: 8 -jdk-alpine WORKDIR /opt/ ADD

Micro Serviços – Demo utilizando SPARK #DOCKERFILE FROM openjdk: 8 -jdk-alpine WORKDIR /opt/ ADD target/Hello. World-0. 0. 1 -SNAPSHOT-jar-with-dependencies. jar /opt/Hello. World-0. 0. 1 -SNAPSHOT-jar-with-dependencies. jar EXPOSE 4567 CMD ["java", "-jar", "/opt/Hello. World-0. 0. 1 -SNAPSHOT-jar-withdependencies. jar"]

Micro Serviços – Demo utilizando SPARK

Micro Serviços – Demo utilizando SPARK

Micro Serviços – Demo utilizando SPARK

Micro Serviços – Demo utilizando SPARK

Integração no Oracle APEX Servitium Micro Serviço Aplicação APEX Plug-in

Integração no Oracle APEX Servitium Micro Serviço Aplicação APEX Plug-in

Integração no Oracle APEX Servitium Micro Serviço Aplicação APEX Plug-in

Integração no Oracle APEX Servitium Micro Serviço Aplicação APEX Plug-in

Integração no Oracle APEX Servitium Plug-in do tipo “Processo” Conexão REST com serviços Interpreta

Integração no Oracle APEX Servitium Plug-in do tipo “Processo” Conexão REST com serviços Interpreta os resultados JSON e XML

Endereço do Serviço Método do Serviço (GET/POST/PUT/DELETE) Headers do Serviço Payload Onde será guardado

Endereço do Serviço Método do Serviço (GET/POST/PUT/DELETE) Headers do Serviço Payload Onde será guardado o resultado Num Item O texto inteiro

O resultado será guardado num Item O Item é P 90_VALOR Parseando XML Usando

O resultado será guardado num Item O Item é P 90_VALOR Parseando XML Usando este caminho

O resultado será guardado num Item O Item é P 90_VALOR Parseando JSON Usando

O resultado será guardado num Item O Item é P 90_VALOR Parseando JSON Usando este caminho

Tabela APEX_COLLECTIONS Nome Nulo? Tipo -------------COLLECTION_NAME NOT NULL VARCHAR 2(255) SEQ_ID NOT NULL NUMBER

Tabela APEX_COLLECTIONS Nome Nulo? Tipo -------------COLLECTION_NAME NOT NULL VARCHAR 2(255) SEQ_ID NOT NULL NUMBER C 001 VARCHAR 2(4000) C 002 VARCHAR 2(4000) C 003 VARCHAR 2(4000) C 004 VARCHAR 2(4000) C 005 VARCHAR 2(4000) C 006 VARCHAR 2(4000) C 007 VARCHAR 2(4000) C 008 VARCHAR 2(4000) C 009 VARCHAR 2(4000) C 010 VARCHAR 2(4000) C 011 VARCHAR 2(4000) C 012 VARCHAR 2(4000) C 013 VARCHAR 2(4000) C 014 VARCHAR 2(4000) C 015 VARCHAR 2(4000)

Resultado estará em Collection Na collection “MINHA_COLLECTION” O texto inteiro Ele vai colocar o

Resultado estará em Collection Na collection “MINHA_COLLECTION” O texto inteiro Ele vai colocar o resultado em uma linha da collection e na coluna c 001.

Resultado estará em Collection Na collection “MINHA_COLLECTION” Vai fazer parse do XML Usando este

Resultado estará em Collection Na collection “MINHA_COLLECTION” Vai fazer parse do XML Usando este caminho para loop E estes caminhos para os atributos

<turma> Para cada linha que se repetir com o caminho: <aluno> <nome>Arlindo</nome> /turma/aluno/ <sobrenome>da

<turma> Para cada linha que se repetir com o caminho: <aluno> <nome>Arlindo</nome> /turma/aluno/ <sobrenome>da Souza</sobrenome> <idade>12></idade> </aluno> Ele vai procurar esses 3 atributos: <aluno> <nome>João Pedro</nome> /aluno/nome/text(), /aluno/sobrenome/text(), /aluno/idade/text() <sobrenome>Barbosa</sobrenome> <idade>15></idade> </aluno> <nome>Fulano</nome> <sobrenome>de Tal</sobrenome> <idade>11></idade> /aluno/nome/text() c 001 </aluno> <nome>Ciclano</nome> /aluno/sobrenome/text() c 002 <sobrenome>de Tal</sobrenome> <idade>16></idade> </aluno> /aluno/idade/text() c 003 </turma> XML Collection

<turma> <aluno> <nome>Arlindo</nome> <sobrenome>da Souza</sobrenome> <idade>12></idade> </aluno> <nome>João Pedro</nome> <sobrenome>Barbosa</sobrenome> <idade>15></idade> </aluno> <nome>Fulano</nome> <sobrenome>de

<turma> <aluno> <nome>Arlindo</nome> <sobrenome>da Souza</sobrenome> <idade>12></idade> </aluno> <nome>João Pedro</nome> <sobrenome>Barbosa</sobrenome> <idade>15></idade> </aluno> <nome>Fulano</nome> <sobrenome>de Tal</sobrenome> <idade>11></idade> </aluno> <nome>Ciclano</nome> <sobrenome>de Tal</sobrenome> <idade>16></idade> </aluno> </turma> select COLLECTION_NAME, SEQ_ID, c 001, c 002, c 003 from apex_collections where collection_name = 'MINHA_COLLECTION' COLLECTION_NAME SEQ_ID C 001 C 002 C 003 MINHA_COLLECTION 1 Arlindo da Souza 12 MINHA_COLLECTION 2 João Pedro Barbosa 15 MINHA_COLLECTION 3 Fulano de Tal 11 MINHA_COLLECTION 4 Ciclano de Tal 16

Resultado estará em Collection Na collection “MINHA_COLLECTION” Vai fazer parse do JSON Usando este

Resultado estará em Collection Na collection “MINHA_COLLECTION” Vai fazer parse do JSON Usando este caminho para loop E estes caminhos para os atributos

Integração no Oracle APEX Micro Serviço Aplicação APEX Plug-in e App APEX

Integração no Oracle APEX Micro Serviço Aplicação APEX Plug-in e App APEX

Basta referenciar o serviço cadastrado no MICRO e o Método. É possível passar parâmetros,

Basta referenciar o serviço cadastrado no MICRO e o Método. É possível passar parâmetros, que são substituídos no header e no payload, onde eles estiverem. Por fim, define onde será gravado o resultado.

Também disponível para uso em PL/SQL: declare r_micro pkg_micro. t_micro; r_collections pkg_micro. t_table_collection; begin

Também disponível para uso em PL/SQL: declare r_micro pkg_micro. t_micro; r_collections pkg_micro. t_table_collection; begin r_micro : = pkg_micro. cria_servico(OBTEM_DADOS_TURMA', 'GET'); pkg_micro. add_parametro(r_dados_micro, 'ID-TURMA‘, 1); r_collections : = pkg_micro. get_table_collection_resultado(r_micro); for i in 1. . r_collections. count loop dbms_output. put_line(r_collections(i). c 001); end loop; end;

Micro Serviços – para saber mais • https: //martinfowler. com/articles/microservices. html • Microservices. io

Micro Serviços – para saber mais • https: //martinfowler. com/articles/microservices. html • Microservices. io • https: //12 factor. net/ • http: //sparkjava. com/ • https: //youtu. be/h. CMc. Qf. Gb 4 c. A

Plug-ins e Apps disponibilizados no SCIENTIA https: //sisweb. tesouro. gov. br/apex/f? p=SCIENTIA: 1: :

Plug-ins e Apps disponibilizados no SCIENTIA https: //sisweb. tesouro. gov. br/apex/f? p=SCIENTIA: 1: :

Obrigado! Igor Augusto de Faria Costa Fabio dos Santos Barbosa Auditor Federal de Finanças

Obrigado! Igor Augusto de Faria Costa Fabio dos Santos Barbosa Auditor Federal de Finanças e Controle igor. a. costa@tesouro. gov. br Auditor Federal de Finanças e Controle fabio. s. barbosa@tesouro. gov. br Agradecimentos à Equipe: Fabio Alexandre de Araújo Lima Gerente Gabriel Reis de Sousa Diego Carvalho Souza Auditor Federal de Finanças e Controle João Rodrigo Ferreira de Silva Sousa José Gabriel Hermes Cavalcanti Auditor Federal de Finanças e Controle Estagiário