[RESOLVIDO] Conectar a um banco de dados via web com aplicação Java Web Start

Estou criando um sistema para o estágio que estou fazendo, utilizando Java Web Start.
Tenho implementado o sistema utilizando o banco de dados do meu próprio computador, na empresa.

O meu método de conexão ao banco de dados (Postgre) é:

 String url = "jdbc:postgresql://000.000.000.000:0000/NomeDoBanco";
 String usuario = "admin";
 String senha = "password";

 Class.forName("org.postgresql.Driver");
 con = DriverManager.getConnection(url, usuario, senha);

A questão é: como faço para que eu possa conectar ao banco de dados, da minha casa, por exemplo?
Como ficaria a string de conexão?
Preciso mudar alguma configuração do banco? A forma de conexão se torna diferente?

A aplicação roda normalmente em qualquer computador da rede interna da empresa, mas eu preciso fazer com que qualquer computador tenha acesso ao banco, via web.

Olá wellington, boa tarde.
Cara, seguinte, você tem q de alguma forma deixar o pc que está com o banco de dados acessível na internet, por exemplo, caso a conexão na sua empresa seja simples, sem firewall,
digamos que o pc na sua empresa se conecta diretamente a internet por um modem ADSL, seria só você fazer o encaminhamento de portas no modem para o pc que tem o BD, porem, se tiver um firewall no meio disto, você terá que fazer a liberação das portas, com esse detalhes resolvidos seu pc estará acessível pelo ip publico.

Espero ter ajudado.

Welligton, não sei se a maneira mais adquada de fazer isso fosse utilizar BD direto assim…

pq não utiliza Webservice!

Abraços!

Isso que você quer de liberar uma porta para a internet se chama: Port Forward
O que chegar na porta especificada é direcionado para um IP e Porta da rede.
Portanto no PC que estiver o banco o IP deve estar fixo, senão cada vez que mudar vai ter que reconfigurar o roteador.

Cada roteador tem sua forma de liberar portas.
Sugiro estes sites:
http://portforward.com
http://abusar.org/

Procure pelo modelo do seu roteador e boa sorte.

[quote=netdark3000]Isso que você quer de liberar uma porta para a internet se chama: Port Forward
O que chegar na porta especificada é direcionado para um IP e Porta da rede.
Portanto no PC que estiver o banco o IP deve estar fixo, senão cada vez que mudar vai ter que reconfigurar o roteador.

Cada roteador tem sua forma de liberar portas.
Sugiro estes sites:
http://portforward.com
http://abusar.org/

Procure pelo modelo do seu roteador e boa sorte.
[/quote]

Então, pelo que eu entendi, se o “ip externo” for 123.456.789.123 e o ip do meu PC, onde está o banco de dados for 192.168.0.1 (e porta 5000), então no roteador eu devo configurar para que quando alguém acesse o endereço 123.456.789.123:0001, digamos, ele seja redirecionado para o 192.168.0.1:5000. Dessa forma, a minha string de conexão ao banco de dados ficaria assim:

String url = "jdbc:postgresql://123.456.789.123:0001/NomeBanco";

É isso mesmo?


Obrigado a todos que responderam!
Estava difícil achar algo sobre isso no Google, pois os resultados estavam muito “aleatórios”.
Não sabia uma forma eficaz de fazer a pesquisa.

[quote=fabiobrotas]Welligton, não sei se a maneira mais adquada de fazer isso fosse utilizar BD direto assim…

pq não utiliza Webservice!

Abraços!
[/quote]

Não sei se seria realmente necessário utilizar um webservice.
O sistema que estou fazendo é para que os representantes de venda da empresa possam registrar as vendas.

Acho que raramente chegará a ter cinco acessos simultâneos ao banco.

Não sei no que implica não utilizar um webservice.

Abraço.

Dá uma olhada nesse passo-a-passo

http://www.informaticanaweb.com/reencaminhamento-de-portas-port-forward-e-virtual-server/
Isso tudo só resolve um problema interno.

Pode existir outro problema, caso seu IP externo for dinâmico.
Então terá que recorrer a serviços como http://www.noip.com/ etc…

Não sou especialista em rede, mas a muito tempo atrás fiz essas configurações com sucesso para montar um pequeno servidor de CS quando era proprietário de uma lan house.

Digita no google: liberando portas
Essa palavra-chave vai te dar muita informação sobre este assunto.

Opa, muito obrigado pelo link!

O IP aqui da empresa é estático.

Vou fazer alguns testes aqui. Depois posto o resultado.

Não consigo conectar ao banco.

A mensagem que recebo ao tentar fazer login na minha aplicação é : PSQLException: Conegão negada. Verifique se o nome da máquina e a porta estão corretos e se o postmaster está aceitando conexões TCP/IP.

Também tentei me conectar ao banco diretamente pelo Netbeans (para teste) através de serviços > banco de dados > nova conexão :

Mas recebo a mesma mensagem de conexão negada.


Pesquisando na internet sobre conexão negada, vi que o problema poderia ser nas permissões do Postgre, então fiz as alterações que indicavam fazer.

No meu arquivo pg_hba.conf está assim:
host all all 0.0.0.0/0 md5

No meu arquivo postgresql.conf :
listen_addresses = ‘*’

Porém, o erro persistiu.


O redirecionamento de porta no meu servidor de internet está assim:


Supondo que:

Meu IP externo: 123.456.789.99
Porta que desejo utilizar: 5432

O IP do meu computador (onde está o banco de dados): 192.168.0.01
Porta utilizada pelo banco de dados: 5432

Nome do banco: BancoDeTeste


O que estou errando?

Faz o seguinte, primeiro um teste local, faça o loguin no pc onde está o banco de dados.
depois um teste na rede, tente se conectar usando um pc que está na rede,
por último um pc externo.

Verifica as permissões do usuário no banco de dados.

E tenta esse chute:

Origem - deixa como esta.
Destino - (x) Especificar: 192.168.0.1
Porta(s): 5432

Redirecionar - deixa tudo em branco.

Minha recomendação - desista.

Conexão a bancos de dados via Web sempre darão problemas. Se não é no cliente (que tem um proxy que só deixa sair o protocolo http e https, não outros protocolos) é no servidor (que estará hospedado em algum lugar que não deixará abertas as portas onde normalmente os bancos de dados atendem, por motivos de segurança.).
Não dou alguns minutos para que um banco de dados hospedado na Internet seja atacado.
(Alguns provedores deixam bancos disponíveis, mas eles têm pessoas que sabem fazer isso, e sabem controlar todos os acessos para que não haja acessos indevidos, o que provavelmente não é nem de longe o seu caso, já que você é estagiário e ainda está aprendendo.).

O correto é criar algo como um web service, e deixar apenas o web container visível na Internet. O servidor do banco de dados deve ficar na rede interna.

[quote=netdark3000]Faz o seguinte, primeiro um teste local, faça o loguin no pc onde está o banco de dados.
depois um teste na rede, tente se conectar usando um pc que está na rede,
por último um pc externo.

Verifica as permissões do usuário no banco de dados.

E tenta esse chute:

Origem - deixa como esta.
Destino - (x) Especificar: 192.168.0.1
Porta(s): 5432

Redirecionar - deixa tudo em branco.
[/quote]

Se eu colocar no na string de url o endereço do meu computador (192.168.0.1:5432), eu consigo me conectar normalmente através do meu computador ou de qualquer outro computador na rede. Mas obviamente, computadores externos à rede não conseguem se conectar.

Porém, se eu deixar a url como 123.456.789.99:5432, não consigo me conectar de nenhum computador, nem mesmo do meu.


Não dá para deixar nenhum campo em branco nas configurações do redirecionamento.

:frowning:
Dá uma olhada nesse link então, talvez ache algum parecido com o seu router:
http://www.youtube.com/results?search_query=encaminhamento+de+porta&oq=encaminhamento+de+porta&gs_l=youtube-reduced.3…0l2.50341.54352.0.54545.23.10.0.13.13.1.199.1191.5j5.10.0…0.0…1ac.1.RT8AvfyLJ3w

[quote=entanglement]Minha recomendação - desista.

Conexão a bancos de dados via Web sempre darão problemas. Se não é no cliente (que tem um proxy que só deixa sair o protocolo http e https, não outros protocolos) é no servidor (que estará hospedado em algum lugar que não deixará abertas as portas onde normalmente os bancos de dados atendem, por motivos de segurança.).
Não dou alguns minutos para que um banco de dados hospedado na Internet seja atacado.
(Alguns provedores deixam bancos disponíveis, mas eles têm pessoas que sabem fazer isso, e sabem controlar todos os acessos para que não haja acessos indevidos, o que provavelmente não é nem de longe o seu caso, já que você é estagiário e ainda está aprendendo.).

O correto é criar algo como um web service, e deixar apenas o web container visível na Internet. O servidor do banco de dados deve ficar na rede interna. [/quote]

Nunca havia visto sobre o web service.

Para teste resolvi criar uma aplicação de demonstração, seguindo esse tutorial:

O meu web service ficou assim:

[code]
@WebService(serviceName = “Teste”)
public class Teste {

@WebMethod(operationName = "getNome")
public String getNome(@WebParam(name = "ID") String ID) {
    String retorno; 
    
    try {
        Connection con;
        String url = "jdbc:postgresql://192.168.0.1:5432/Teste";
        String usuario = "admin";
        String senha = "senha123";

        Class.forName("org.postgresql.Driver");
        con = DriverManager.getConnection(url, usuario, senha);


        String cmd = String.format("SELECT Nome "
                + "FROM public.Funcionarios "
                + "WHERE ID = '%s'", ID);

        ResultSet rs;
        Statement st;
        st = con.createStatement();
        rs = st.executeQuery(cmd);
        rs.next();

        retorno = rs.getString(1);

    } catch (SQLException e) {
        retorno = e.toString();
    } catch (ClassNotFoundException e) {
        retorno = e.toString()+"1";
    }

    return retorno;
}

}[/code]

O cliente do web service ficou assim:

[code]public class Demo2 {

public static void main(String[] args) {
    
    Scanner scan = new Scanner(System.in);
    String id = scan.nextLine();
    
    services.Teste_Service service = new services.Teste_Service();
    services.Teste port = service.getTestePort();

    java.lang.String resultado = port.getNome(id);
    System.out.println("Result = " + resultado);
    
}

}[/code]

No meu computador funcionou normalmente, mas em outro computador não vai funcionar, porque a URL de busca pelo web service (que está “hospedado” no Glass Fish, rodando no meu computador), gerada pelo Netbeans, aponta para http://localhost.

Caí no mesmo problema, com um personagem diferente.
Agora minha dúvida é:

Como acessar um web service que seja externo a rede?
Como fazer para que qualquer computador tenha acesso ao web service, pela internet?

O que quero fazer é “dizer” ao Glass Fish: Olha, tá vendo esse web service aqui? Não quero que o acesso a ele fique restrito ao usuário do próprio computador em que ele está hospedado. Quero que qualquer pessoa tenha acesso a ele, através da internet, digitando o endereço xxx.xxx.xxx.xxx.
Como posso fazer isso?

[quote=netdark3000] :frowning:
Dá uma olhada nesse link então, talvez ache algum parecido com o seu router:
http://www.youtube.com/results?search_query=encaminhamento+de+porta&oq=encaminhamento+de+porta&gs_l=youtube-reduced.3…0l2.50341.54352.0.54545.23.10.0.13.13.1.199.1191.5j5.10.0…0.0…1ac.1.RT8AvfyLJ3w[/quote]

Eu estou tentando fazer o redirecionamento através do "servidor de acesso a internet" utilizado aqui na empresa.
Funciona assim: computador do usuário > roteador > computador rodando o servidor de internet > modem.

Esse tal "servidor de internet" é um software que serve para gerenciamento/monitoramento de acesso.
Segundo a distribuidora do software é possível fazer o redirecionamento de portas através desse software. Tanto é que tem a opção lá.


Acho que vou tentar fazer uma aplicação para teste lá em casa, pois lá a conexão ocorre de forma mais simples. Simplesmente tem o meu computador e o modem.
Vou tentar redirecionar a porta por lá.
Se der tudo certo, saberei que o problema possivelmente está nesse software para gerenciamento de internet que rodamos aqui na empresa.

Consegui resolver o problema de conexão com o banco via internet.

Ao tentar conectar a minha rede de dentro da minha própria rede, um conflito era gerado, por isso dava erro de conexão.

Como a minha string de conexão ao banco é “jdbc:postgresql://123.456.789.99:5432/IntegraDB” eu só posso conectar ao banco através de um computador QUE NÃO ESTEJA no IP 123.456.789.99.


É claro, para que isso funcione todos os passos citados anteriormente (redirecionamento de porta, liberação de conexões do postgre, etc) precisam ser feitas.


Muito obrigado aos que me ajudaram e desculpa por ter demorado para “perceber” um problema tão simples e estender o tópico que já poderia estar resolvido.