sexta-feira, 11 de dezembro de 2020

Lendo conteúdo de uma URL no Java

       Nesse artigo vou mostrar como ler um conteúdo de uma URL via Java. Isso é útil para ler um XML ou JSON disponibilizado por um site um sistema externo por exemplo.


public void lerConteudoURL() {
       
        String noticia;
        try {
            URL url = new URL("endereço_web");

            HttpURLConnection.setFollowRedirects(true);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(3000);
            connection.setRequestProperty("Accept-Charset", "text/xml; charset=UTF-8");
            int codeMessage = connection.getResponseCode();


            if(HttpURLConnection.HTTP_OK == codeMessage) {
                InputStream buffer = new BufferedInputStream(connection.getInputStream());
                BufferedReader reader = new BufferedReader(new InputStreamReader(buffer, "UTF-8"));
                String line = reader.readLine();
               
                while (line !=null) {
                   
                    //conteúdo da linha
                    System.out.println(line);
                   
                    //pega a próxima linha
                    line = reader.readLine();
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

}

segunda-feira, 30 de novembro de 2020

Acessando Tabela Externa dentro do seu Banco de Dados

As vezes precisamos fazer a leitura de dados de um banco que não é o da nossa aplicação, seja um acesso permanente como uma integração ou uma leitura pontual para importação de dados, e é isso que vou mostrar aqui. Esse acesso pode ser feito inclusive para Bancos de Dados diferentes. 

 

Os passos são os seguintes: 

 

  1. 1 - Instalar uma extensão usando CREATE EXTENSION. 

  1. 2 - Criar um servidor externo, usando CREATE SERVER, para representar cada banco de dados remoto ao qual deseja se conectar. 

  1. 3 - Criar um mapeamento de usuário, usando CREATE USER MAPPING, para cada usuário do banco de dados que você deseja permitir o acesso para cada servidor externo. 

  1. 4 - Criar as tabelas externas, usando CREATE FOREIGN TABLE  

 

Para acessar outros bancos dentro do nosso, é preciso de plugins para isso. Os plugins já estão no Postgre e precisam ser “ativados”. Neste exemplo vou mostrar um banco PostgreSQL acessar outro banco PostgreSQL. 

 

Os comandos abaixo exibem os plugins (extensões) disponíveis (o segundo traz um breve comentário sobre o plugin): 

 

SELECT * FROM pg_available_extensions; 

Ou 

SELECT * FROM pg_available_extension_versions 

 

O plugin que vamos usar é o postgres_fdw. Esse comando a seguir vai ativar o plugin e deixá-lo disponível para uso: 

 

CREATE EXTENSION postgres_fdw 

    SCHEMA "public" 

    VERSION "1.0"; 

 

Como essa extensão trata de acesso a um banco de dados, precisamos de um passo a mais que é o de criar o wrapper que vai ficar fazendo a tradução da linguagem de um banco para o outro. 

 

CREATE FOREIGN DATA WRAPPER postgres_fdw 

    HANDLER postgres_fdw_handler 

    VALIDATOR postgres_fdw_validator 

    OPTIONS (); 

 

Caso o wrapper já tenha sido criado, precisamos ver se o handler e o validator foram especificados, caso não, precisamos atualizar. 

 

ALTER FOREIGN DATA WRAPPER postgres_fdw 

    HANDLER public.postgres_fdw_handler 

    VALIDATOR public.postgres_fdw_validator; 

 

Para criar o servidor, vamos precisar do nome do banco, endereço e porta. Para o servidor vamos fazer: 

 

CREATE SERVER nome_servidor 

    FOREIGN DATA WRAPPER postgres_fdw 

  OPTIONS (dbname 'nome_banco', host 'ip_banco', port 'porta'); 

 

Para o(s) usuário(s) 

 

CREATE USER MAPPING 

    FOR postgres 

    SERVER nome_servidor 

    OPTIONS (password 'senha', user 'usuario'); 

 

Agora basta criar as tabelas. Aconselho criar um schema separado para suas tabelas de servidores externos para não misturar com as tabelas internas. Se o usuário tiver permissão de escrita, os comandos de UPDATE, INSERT, e DELETE vão funcionar normalmente. 

 

CREATE FOREIGN TABLE seu_schema.sua_tabela ( 

    id bigserial, 

    nome varchar(70) NOT NULL, 

    dt_nascimento date 

) 

SERVER nome_servidor 

OPTIONS (schema_name 'nome_schema_externo', table_name 'nome_tabela_externa'); 

 

Pode ser necessário dar permissão de acesso no banco externo caso ele esteja restringindo por IP o acesso. Você verá o erro: no pg_hba.conf entry for host "ip_seu_banco", user "usuario_que vc definiu", database "nome_banco_que_quer_acessar". 

 

Pronto, basta usar as tabelas como se estivessem localmente. 

 

Links: