Jnlp e Mysql

10 respostas
ditorelo

Fala galera…
Tenho uma aplicativo que faz consultas ao mysql…
Preciso que esse aplicativo seja disponibilizado para outras máquinas da minha rede, além do servidor mysql.
Fiz um jar e disponibilizei usando jnlp, assinadinho e tudo mais…
O aplicativo chama e inicia a carregar e de repente dá a msg de problema no driver do banco de dados… Ele não consegue conectar com o mysql…
Peguei o .jar (mysql-connector-java-3.0.14-production-bin.jar) do conector mysql (que fica no $JAVA_HOMEjrelibext) e empacotei junto e nada…

A minha String de conexão com o bd é essa:

new String("jdbc:mysql://localhost:3306/banco?user=user&password=12345");

e pego o driver com

Class.forName("com.mysql.jdbc.Driver");

e aí ele cai no exception quando rodo o aplicativo…
alguma idéia de como faço pra isso funcionar?!?

Um grande abraço!

10 Respostas

pcalcado

Oi,

Uhm… pro qeu conectar suas aplicações ao MySQL? Assim no mínimo você vai conseguir um belo problema de acesso concorrente ao banco.

Faça um programa servidor para seus clietnes se conectarem e deixe este servidor responsável pelo banco :wink:

[]s

T

Só uma perguntinha boba…

new String("jdbc:mysql://localhost:3306/banco?user=user&password=12345");

Onde é que está o banco? Ele existe em cada cliente ou só no servidor?

Você provavelmente deve alterar para:

"jdbc:mysql://" + enderecoServidor + ":3306/banco?user=user&password=12345"

onde enderecoServidor é o hostname desse servidor (pode ser numérico, como 123.45.67.89, se o seu servidor de DNS não for muito bom…)

T

Não sei até hoje porque muita gente escreve código como

String s = new String("literal");

Não sei qual é a razão. Se fosse uma std::string do C++, ou uma string do VB, eu até entenderia, mas em Java (e no seu filho bastardo o C#) eu simplesmente não entendo, porque Strings em Java são imutáveis.
Deve ser alguma receita de bolo que alguém inventou e passou para todo mundo, e ninguém questiona, porque leu em algum “textbook”.
Isso na verdade não é muito relevante - hoje em dia isso não é o que “pega” na sua aplicação; é mais importante usar um “design pattern” correto e usar as ferramentas adequadas, em vez de se preocupar se eu tenho de definir um StringBuffer só para fazer quatro concatenações de Strings - mas é aquele tipo de “cisco no olho” que incomoda.

pcalcado

Pois é, muita gente não sabe da imutabildiade da String. para uma bela leitura, recomendo o Effective Java, do Bloch. A Bani tem um excelente resumo dele em português.

Mas se concentre em camadas, isto de vários clientes acessando um banco é da época do VB…

[]s

T

Nem o VB é mais assim, hoje em dia todo mundo quer usar Web Services, e VB.NET também pode usar o tal de Web Services.
Se você não sabe o que está querendo da vida, ponha um Web Service na jogada e tudo se resolve…
Falando sério: hoje em dia realmente alguns serviços, como o Tesouro Direto (coisa que mexe com dinheiro…) , usam Web Services. Veja o manual de integração em http://www.cblc.com.br/tesourodireto/ e também http://www.tesouro.fazenda.gov.br/tesouro_direto/ download/regulamento_tesourodireto.pdf

ditorelo

Fala Galera…
Quanto ao new String é mania, nada mais… não sabia dos detalhes envolvendo tal coisa, pois sou novo no mundo java! De qquer forma ficarei mais atento! Obrigado pela dica!

Respondendo o thingol, tá localhost pq tô realizando testes na minha máquina… agora que chegamos nessa fase do projeto eu vou mudar pra máquina que ficará com o servidor. Mas preciso fazer ele se comunicar de dentro do .jar com o bd primeiro! :?

Esse é um software de estudo galera… eu não sabia nada de java até 3 meses atrás… até q tô me virando bem… Só uma explicação talvez fútil: meu grupo está mais focado em pesquisar interface gráfica e jdbc. Já pensamos em usar Servlet para controlar isso, mas esse é um assunto de outro grupo, e não é desejo do professor que passemos para um assunto alheio ao nosso. Já estamos ultrapassando já, querendo que o cliente não precise ter o JSDK instalado pra rodar o aplicativo…

Quanto ao problema, eu não tenho um problema eminente de acesso concorrente no bd pelo aplicativo… como disse é um software de estudo… tô só descobrindo como fazer jnlps e acessar bds através dele… Mesmo que antigo, existe a possibilidade de se fazer isso da forma que quero? Se não, existe alguma outra forma a não ser usando servlet?

Valeu pela ajuda! :stuck_out_tongue:

pcalcado

“thingol”:

Falando sério: hoje em dia realmente alguns serviços, como o Tesouro Direto (coisa que mexe com dinheiro…) , usam Web Services. Veja o manual de integração em http://www.cblc.com.br/tesourodireto/ e também http://www.tesouro.fazenda.gov.br/tesouro_direto/ download/regulamento_tesourodireto.pdf

Não vou conseguir responder or esto por não conhecer muito de JNPL, mas vou falar sobre integração.

WebServices [na verdade, SOAP/JAX-RPC/XML-RPC, visto que WebServices é algo mais complexo]são bem legais… quando você tem um ambiente heterogêneo. Se seu ambietne é Java x Java, RMI/IIOP é bem melhor :wink:

[]s

Luca

Olá

Ditorelo, jnlp não tem absolutanente nada a ver com acesso a banco de dados, a menos que você guarde na base de dados o endereço no servidor onde ficam os jars.

Leia com atenção o texto acima onde nas entrelinhas digo que só há vantagens em usar JavaWebStart, isto é, jnlp quando os jars ficam em um servidor. Neste caso se pode fazer uma atualização de versão e o cliente recebe a nova instalação automaticamente.

O seu código de 2 linhas tem um erro gravíssimo. Você está hardcodeando os parâmetros de acesso ao banco. No dia em que sair dos testes na sua própria máquina e acessar o banco no servidor necessitará alterar seu código e recompilar. Use no mínimo um arquivo de properties.

Outro problema a vista, desta vez nada grave, é a colocação do driver no diretório $JAVA_HOME/jre/lib/ext. Para fazer isto em máquinas novas você precisará copiar estes arquivos de um servidor para este diretório. Isto é perfeitamente possível e viável. Mas uma outra alternativa seria embutir o driver na aplicação e como vantagem possibilitaria mudar de base de dados sem ficar aquele driver esquecido lá no cliente.

Sobre os problemas que está passando sinto falta de mais dados para poder opinar.

[]s
Luca

ditorelo

Fala Luca!

É exatamente isso que preciso fazer: embutir o jar do driver mysql na aplicação!!! é tudo que eu preciso! Feito isso, morreu… Pretendo usar o JNLP pra não ter q ficar atualizando coisas nas máquinas clientes, como vc mesmo disse! :smiley:
Como faço isso? Como ficariam as linhas de conexão com o banco de dados uma vez embutido o jar do driver mysql junto com o jar do aplicativo?!?

Quanto ao código, eu não conhecia esses problemas… como eu disse, sou novo em java, e fico perdido com tantas coisas às vezes!
O bom de fóruns é isso… se aprende o que os livros não dizem! Obrigado pelas dicas! :wink:

Luca

Olá

A gente aqui não costuma colocar código que acesse banco de dados em aplicações que rodem no cliente. Tudo o que represente o negócio propriamente dito fica no servidor. No cliente colocamos somente o que é necessário para interagir com telas.

Crie um servlet para receber as solicitações dos clientes que vão acessar à base de dados. Também não coloque código de acesso à base de dados dentro do servlet pois este é apenas um intermediário. Separe o que veio do cliente como um post e passe para as classes que vão resolver o problema. O cliente acessa o servlet usando URLConnection (e com ajuda de commons-HTTPClient)

Comece Java programando Java, não importe modelos de VB ou Delphi para o Java.

Para saber quais linhas de código deve usar veja no site do driver que geralmente lá tem dicas.

[]s
Luca

Criado 17 de agosto de 2004
Ultima resposta 18 de ago. de 2004
Respostas 10
Participantes 4