Como distribuir uma aplicação java com banco de dados?

Pessoal

Sempre trabalhei com WEB e mesmo em Java, nunca fiz uma aplicação desktop profisisonalmente.

Em WEB, publico a minha aplicação em um servidor, o qual já possui um banco de dados instalado e eu apenas conecto a ele.

Minha dúvida é: Como isto funciona em uma aplicação desktop?

Digamos que eu tenha um aplicativo feito em Swing, utilizando banco de dados MySQL ou PostgreeSQL. Como poderia fazer para distribui-lo? O computador que fosse executar este aplicativo, obrigatóriamente precisaria ter o MySQL Server ou PostgreeSQL Server, instalado?

Grato

Julio Romano

Boa tarde.

Funciona da mesma maneira.
Da mesma maneira que você conecta no seu banco pelo servidor web, você vai conectar no seu aplicativo desktop.
Porém vais ter que fazer isto manualmente digamos…
Vais ter que colocar as libs do mysql ou jdbc ou seja la oque for, no classpath do projeto e enviar junto com a aplicação.
Depois você pode fazer um singleton, para armazenar a conexão se você for deixar a mesma sempre aberta.
Eu sugiro sempre abrir uma conexão, buscar os dados e fechar a mesma.
Você só precisa dos jars conectores para cada banco.
Existem diversos exemplos de como abrir a conexão, inclusive no site do mysql.

Espero ter ajudado.

1 curtida

Pode usar um banco de dados embutido na aplicação. O Apache Derby é um que dá essa possibilidade.

[quote=insonix]Boa tarde.

Funciona da mesma maneira.
Da mesma maneira que você conecta no seu banco pelo servidor web, você vai conectar no seu aplicativo desktop.
Porém vais ter que fazer isto manualmente digamos…
Vais ter que colocar as libs do mysql ou jdbc ou seja la oque for, no classpath do projeto e enviar junto com a aplicação.
Depois você pode fazer um singleton, para armazenar a conexão se você for deixar a mesma sempre aberta.
Eu sugiro sempre abrir uma conexão, buscar os dados e fechar a mesma.
Você só precisa dos jars conectores para cada banco.
Existem diversos exemplos de como abrir a conexão, inclusive no site do mysql.

Espero ter ajudado.[/quote]
Boa Tarde, Diego

Primeiramente, obrigado pela atenção.

Na realidade, não era exatamente esta a minha dúvida.

Digamos que eu tenha feito toda uma aplicação na minha máquina, utilizando o banco de dados PostgreeSQL. Minha máquina tem o PostgreeSQL instalado, então, a aplicação roda normalmente.

Agora, gostaria de utilizar esta aplicação em outro computador, que não tenha o PostgreeSQL instalado. Isto é possível?

Seria como utilizar um .mdb do Access. Eu não preciso ter o Access instalado para rodar a aplicação.

Grato

Julio Romano

E com o MySQL ou PostgreeSQL, isto é possível?

Sim é possivel amigo o detalhe que essa segunda maquina precisa estar em rede com a sua assim ele ira se conextar ao banco via rede e abas trabalharao com o mesmo banco de dados … ou aplicativo servidor .

Ah, entendi!
Ai realmente eu não conheço, sempre acessava o banco via rede.
Uma alternativa legal também é salvar os objetos em XML e depois carregar.
Se tua aplicação não tiver integridade referêncial, for pequena, de estrutura simples, e tiver poucos dados, é de se pensar nisto.

Um abraço.

[quote=overkill]Sim é possivel amigo o detalhe que essa segunda maquina precisa estar em rede com a sua assim ele ira se conextar ao banco via rede e abas trabalharao com o mesmo banco de dados … ou aplicativo servidor .

[/quote]
Hmm

Mas se for outro computador, que não tenha um PostgreeSQL instalado, nem esteja em rede com algum que tenha, é possível gerar um arquivo daquele banco de dados, como por exemplo, o Access, que gera um .mdb, através do qual, eu posso utilizar o banco de dados, sem ter o Access instalado?

hahaha ta querendo milagre amigo … hehe

pode ser adotada uma solução semelhante a que o amigo insonix comentou com XML … ou mesmo usar bancos de dados embarcados como HSQLDB e depois gerar arquivos para fazer exportação e integracao na sua base principal … ou algo semelhante …

depende muito das funcionalidades e da realidade que vc esta vivendo …

Abraço

[quote=overkill]hahaha ta querendo milagre amigo … hehe

pode ser adotada uma solução semelhante a que o amigo insonix comentou com XML … ou mesmo usar bancos de dados embarcados como HSQLDB e depois gerar arquivos para fazer exportação e integracao na sua base principal … ou algo semelhante …

depende muito das funcionalidades e da realidade que vc esta vivendo …

Abraço[/quote]
Pois é… como eu disse, nunca fiz nada pra desktop…
Um colega meu, da faculdade, que trabalha com .NET disse que usa SQLServer e com ele, pode gerar um arquivo .mdx (ou algo do tipo), que pode ser distribuído junto com a aplicação. Este arquivo .mdx seria o banco de dados em si…
Queria saber se com o MySQL ou PostgreSQL, isto era possível.

Com mysql e postgresql acredito que não … mas de uma olhada no HSQLDB … talvez resolva o que quer … ele é bem poderoso e roda enbarcado a aplicação.

Abraço

[quote=julioromano]Pessoal

Sempre trabalhei com WEB e mesmo em Java, nunca fiz uma aplicação desktop profisisonalmente.

Em WEB, publico a minha aplicação em um servidor, o qual já possui um banco de dados instalado e eu apenas conecto a ele.

Minha dúvida é: Como isto funciona em uma aplicação desktop?

Digamos que eu tenha um aplicativo feito em Swing, utilizando banco de dados MySQL ou PostgreeSQL. Como poderia fazer para distribui-lo? O computador que fosse executar este aplicativo, obrigatóriamente precisaria ter o MySQL Server ou PostgreeSQL Server, instalado?
[/quote]

Depende. Se o seu programa funciona apenas para uma máquina (tipo word) o banco tem que ir junto do programa e cada programa tem o seu banco. Agora, se vc quer um sistema que só tem um banco mas tem multiplos programas descktop acessando é outra historia.

Se vc quiser o primeiro tipo então isso não é um sistema distribuido. Essa configuração é chamada standalone ( “está sózinho” )
Se v quiser o segundo tipo existem 2 opções

A primeira opção é fazer cada programa cliente no desktop se comunicar directamente com o banco de dados. Isso é conhecido como arquitetura cliente-servidor.
A segunda opção é fazer cada programa cliente se comunicar com um programa servidor. E esse servidor comunica com o banco. Só ele comunica com o banco. Isto é conhecido como arquitura 3-tier ou n-tier e é a mais semlahante a web. A diferença é que o cliente não é um browser, é um programa feito por vc.

O cliente-servidor está meio obsoleto. Ele tem graves problemas para controle de concurrencia e processo centralizados (robots temporizados por exemplo). Mas funciona e vale a pena em sistemas pequenos que nunca irão crescer .
A n-tier é o padrão. Foi para isso que se criaram os EJB, mas tem riscos elevandos para um iniciante. Vc tem que criar uma boa arquitura , provavelmente utilizar cache ou criar componentes hibridos que leem do banco mas escrevem pelo servidor centrar.
hoje em dia EJB pode ser usado para isso, mas existem outras formas como serilização + HTTP ou REST. Nenhuma é perfeita a virtude está em pegar o melhor de cada. É mais moderno que cliente-servidor, mais seguro, mas mais complexo.

Sistemas desktop distribuidos são naturalmente mais complexos que web, portanto não pense que vai conseguir da primeira um sistema perfeito. Estude bem padrões de projeto e arquitetura e modelos como o EJB para ter um ideia do que está em causa.

Não entendi bem a sua duvida e talvez alguem jah tenha respondido melhor (não li todos os posts),
mas vamos lá:

Bom, para a aplicação rodar você vai precisar ter o banco de dados ‘visível’ para ela, o banco de dados
pode estar na mesma máquina ou em máquinas diferentes. Inclusive em empresas grandes é bem comum
ter os bancos de dados rodam em máquinas e mesmo plataformas diferentes, neste caso você acessa
via rede (seja GUI ou WEB), a única diferente é que em aplicações WEB (jsp, pex) o seu cliente precisa
‘enxergar’ diretamente somente o servidor J2EE (tomcat pex) e este (o servidor de páginas) tem que
enxergar o servidor de banco de dados; em programas GUI, o programa tem que enxergar o banco
de dados (seja ele local ou em uma máquina remota).

GUI -> JDBC -> BD (O BD pode estar na mesma máquina ou não, mas tem q ser visível para a máquina virtual que roda o programa GUI).
WEB -> Tomcat -> Jdbc -> BD (O BD pode estar na mesma máquina ou não, mas tem q ser visível para a máquina virtual que roda o Tomcat).

Ou seja a máquina virtual precisa enxergar o servidor de banco de dados (que pode estar na mesma máquina ou não) via JDBC (geralmente). O que acontece (e facilita um bocado dependendo do seu projeto) é que você pode
usar um servidor ‘embutido’, eu gosto bastante do Derby, mas há várias opções. Em geral ele é uma boa
alternativa para bases pequenas (mais ou menos do porte do Access pex). Servidores ‘embutidos’ praticamente
não demandam instalação (você coloca só um jar na sua aplicação e vai usando). Dependendo do seu uso, você
pode precisar de um BD ‘de verdade’, mas ai é mais provável também que você precisará usar uma máquina
separada só para o BD, e faria a conexão mais ou menos assim jdbc://nomedamaquina/servicobd/bd:usuario:senha, e para conexoes locais: jdbc://localhost/servicobd/bd:usuario:senha.

No caso vc poderia se for o caso de banco embutido o derby pode ser util ou de uma olhada no firebird

Este é um tópico que ficou parado desde 2008 heheh não vamos ressuscitar os mortos .

foi mau nem vi a data, é que eu estava fazendo algumas pesquisas e vi o post fui na empolgacao e respondi