Como conecatar um applet ao banco de dados?

Olá pessoal!
Estou tentando criar um applet que consiga conectar ao sqlserver express 2005. Porém, toda vez que rodo o applet me daparo com o seguinte erro:

Erro ao carregar o driver!
java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver

Exception in thread “AWT-EventQueue-4” java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.1)

andei procurando na internet um modo de solucionar. Vi que precisava criar um .policy e habilitá-lo no java.security. Mas mesmo assim assim o applet nao consegue se conectar. Pensei que poderia ser o driver, entao criei um aplicativo bem simples para testar a conexao e funcionou!

Ja me disseram que a melhor maneira seria criar um servlet para intermediar o bd e o applet, mas eu sou teimoso e inicialmente quero aprender a fazer desse jeito.

entao, como faço para o meu applet se conectar ao bd?

estarei grato por qualquer ajuda =D

Lembre-se que o applet só pode abrir conexão com o mesmo IP de onde ele foi baixado. Se o servidor do applet e o do banco de dados não estiverem na mesma máquina isso não vai funcionar.

Mexer no .police não vai resolver a não ser que você utilize um applet assinado.

Note que você tem um erro de falha de segurança. Não é de admirar que ele só ocorra no applet onde a segurança é mais crítica.

estou acessando o applet de fora, mas sim, o applet e o bd estão na mesma maquina.

Você quer dizer que o BD e o servidor WEB estão na mesma máquina, certo? Não o BD e o browser.

Bem, nesse caso, eu já vi também a forma de escrever a URL de acesso ao banco de dados causar problema simplesmente porque caiu em uma endereço diferente do servidor. http://java.sun.com/sfaq/#socket

Talvez seja um problema na forma como você empacotou o jar do driver JDBC e do Applet. Notei na sua mensagem que ele está dando o erro na carga do Driver. Note que você tem que empacotar o driver junto com o Applet, ok?

ahhh

certamente eh este o problema!
o driver não está no mesmo pacote

vou arrumar e testar

ola!

volto para dizer que o applet funcionou perfeitamente!

Para fazer funcionar eu coloquei o driver junto com o applet como marcos.macedo disse. Descompactei o .jar do driver. Cooquei o driver descompactado mais o arquivo .policy junto com os componentes do applet num mesmo arquivo .jar.

Infelizmente meu infortunio nao acabou… o applet funciona perfeitamente somente quando acessado de dentro do servidor.

quando tento acessar da minha maquina, ele teima na questão de segurança.

O que pode estar errado? Será alguma opção do browser?

Agradeço novamente aos que me ajudarem =D

edit
-Parte do erro no console

java.security.AccessControlException: access denied (java.util.PropertyPermission java.io.tmpdir read)

Vamos a próxima parte então. Deixa eu ver se eu entendi. Você tem uma maquina servidora onde está o applet. Vou chama-la de ms.
Ai você esta acessando uma pagina que tem a applet como: http://ms.org/minhapagina.html

A URL que tem no driver JDBC deve ser exatamente igual, ou seja ms.org Veja o exemplo que eu coloquei no post seguinte.
Se você estiver acessando o banco de dados em localhost isto não vai funcionar mesmo.

Veja se ajudei ou descreba melhor o problema. Talvez mandando o trecho do código que faz a conexão pra gente dar uma olhada.

exatamente, estou acessando a página assim: http://ignis/luna/cadastro_usuario.htm
cadastro_usuario carrega o applet.

aqui está o calsse de conexao com o bd:

import java.sql.*;

public class ConectaBD{
	private final static String driver = "net.sourceforge.jtds.jdbc.Driver";
	private final static String url = "jdbc:jtds:sqlserver://ignis:1433/luna;user=sa;password=******";
	
	public Connection con;
	public Statement stmt;
	public ResultSet rs;
	
	public void openDB(){
		try{
			
			Class.forName(driver);
			con=DriverManager.getConnection(url);
			stmt=con.createStatement();
			System.out.println("\nConexao estabelecida com sucesso!");
		}catch(ClassNotFoundException e){
			
			System.out.println("\nErro ao carregar o driver!\n"+e+"\n");
			System.exit(1);
			
		}catch(SQLException e){
			System.out.println("\nNao foi possivel estabelecer conexao!\n"+e+"\n");
		}
	}
	
	public void closeDB(){
		try{
			con.close();	
		}catch(SQLException e){
			System.out.println("\nNao foi possivel fechar a conexao!");
		}
	}
}

aqui está o erro exibido no console:

volto a frisar que o applet funciona perfeitamente no lado do servidor.
O estranho eh que a aplicação e o bd estão no mesmo servidor e eu nao menciono nenhuma outra maquina, logo deveria funcionar, pois o applet pode se comunicar com o servidor de origem, nao eh isso?

Será que vou ter que assinar o applet?

Meu objetivo nesse projetinho é criar um chat, onde as pessoas se cadastram e acessam o servidor.
Nao vejo outro meio de fazer isso sem o uso de applets. O que eu poderia fazer, seria criar um servlet para intermediar a conexao com o bd, mas eu ainda nao sei usar servlet e jsp =(

Cara eu trabalhei com Applet durante 1 ano e meio, apesar de seu erro não esta falando sobre assinatura,
eu aconselho a vc a fazer isso, e outra coisa, a porta do seu banco esta liberada, o usuario tem permissão de acesso a essa base?
reveja isso.

abraço

Pelo que eu entendi do projeto dele, assinar o applet não é viável.

Eu nunca aceitaria navegar em uma página que me pede para aceitar um applet assinado. Além do mais ele precisa de uma entidade certificadora para validar a assinatura dele.

Mas o código parece certo. E não parece ser problema de acesso no servidor, geralmente dá um erro diferente neste caso.

Dá pra mandar o trecho de html onde coloca o applet dentro da página? È só um palpite, mas quem sabe, né?

Mas confere as configurações do banco de dados, se ele tá permitindo acesso remoto, mas duvido que seja isso.

sim sim, a porta está liberada. Eu criei uma aplicação swing para testar a conexao com o banco. Funcionou.

Eu acabei de criar uma assinatura para o meu applet. Agora que ele está assiando, funciona perfeitamente. Mas não deveria precisar de permissao para rodar, pois o applet nao acessa qualquer coisa no cliente.

Não gostei da assinatura, alguns usuarios ficarão com medo disso e não aceitarão. =(

aqui está o htm:

<html>
<head>
	<title>:: Luna ::</title>
</head>
<body>

<applet code="CadastroUsuario.class" archive="luna.jar" width="450" height="200"></applet>

</body>
</html>

Isso realmente será um problema!

[quote=superRuiz]sim sim, a porta está liberada. Eu criei uma aplicação swing para testar a conexao com o banco. Funcionou.

Eu acabei de criar uma assinatura para o meu applet. Agora que ele está assiando, funciona perfeitamente. Mas não deveria precisar de permissao para rodar, pois o applet nao acessa qualquer coisa no cliente.

Não gostei da assinatura, alguns usuarios ficarão com medo disso e não aceitarão. =(
[/quote]

O applet acessa a internet do cliente. Isso porque ele está supondo que ele não está na mesma máquina do servidor.

Tente utilizar o endereço numericamente. Eu vi essa dica em algum lugar. Parece que há um problema com o driver do SQLServer.

Lembrando que essa solução é ruim mesmo por uma série de motivos.

  1. Se o usuário tiver um firewall na máquina dele (comum em ambiente windows) o sistema vai bloquear o acesso do applet.
  2. Sua base de dados foi esposta ao publico te tornando alvo de hackers que vão executar comandos sql quaisquer na sua base.

Recomendaria:
a) use um servlet ou RMI para acessar seus dados e deixe a consulta do lado do servidor.
b) ao invés de applet use uma api leve baseda em AJAX. Mais performance, mais bonito, mais fácil de programar e não tem os limites que você tá enfrentando ai. Nesse caso posso recomendar o Apache Wicket http://wicket.apache.org/

muito obrigado pela ajuda =D

estou fazendo esse mini projeto com intuito de praticar,
enquanto meu curso de jsp e servlets não começa, vou continuar a fuçar em applets e ver outras apis.

e espero nao criar muitos topcos de ajuda =D

Ruiz,
Esteja a vontade para criar quantos tópicos interessante de ajuda sentir necessidade. O GUJ é pra isso,

Fica a minha sugestão de olhar frameworks mais simples para iniciantes, como o Apache Wicket. É bem mais fácil que applet e não precisa aprender JSP ou Servlet.

E aí pessoal

Tô apanhando também tentando conecetar só q com base de dados mysql

Galera eu tenho uma hospedagem na locaweb e nos serviços adcionais tem a opção de contratar o serviço de JVM Dedicado, mas eu tenho uma duvida, eu tenho interesse a principio de trabalhar com applets com banco de dados mysql, gostaria de saber se contratando o serviço de JVM Dedicado ainda sim é necessário ter um certificado digital ou não há necessidade.

Fiz uns applets com base de dados, na rede local funciona beleza, mas quando coloco pra uma base q tá na net não funciona.

Parece q precisa de assinatura digital, uma obtenção de certificado digital.

Minha duvida é se eu contratar o serviço de JVM Dedicado ainda vou precisar de certificado digital?

Vi que fazendo o contrato lá já tem várias bibliotecas padrões inclusive a do mysql.

Valew galera!

Boa noite a todos.

Como o próprio Andredeivid sugeriu, você terá que criar uma assinatura, para que o Applet possa acessar o seu servidor.

Não adianta nada você liberar portas, firewall e etc, se o que está impedindo possa ser o “Modelo de Segurança de Caixa de Areia - The Sandbox Model em inglês”, que funciona internamente dentro dos Browsers de internet. A origem do nome se prende ao fato de que tal sistema faz com que as applets ao serem executadas, seja monitoradas por um gerenciador de segurança chamado Applet Security Manager - Gerenciador de Segurança de Applet, que lança uma interrupção do tipo SecurityException, caso a applet viole qualquer regra de segurança imposta, e a idéia de caixa de areia surgiu de que elas servem para amortecer qualquer impacto de um desastre.

As tarefas que as applets podem executar sem nenhum tipo de restrição, são: exibir imagens, executar sons, processar o acionamento do teclado, do mouse e se comunicar com o computador host de onde foram carregadas. Por outro lado, applets não podem executar programas localmente instalados, não podem se comunicar com outros hosts exceto de onde ela foi carregada, não podem ler e escrever no sistema de arquivos local, não podem escrever nada no host de onde foi carregada e não podem obter informações do sistema em que operam, exceto sobre a JVM, por isso não basta criar somente o Policy, crie também uma assinatura, e você pode fazer isto através do recurso chamado Web Start.

Eu não lembro agora das linhas de comando de como se aciona Web Start, até porque estou digitando isto no computador do meu filho, e não tenho o NetBeans aqui, contudo sugiro que você dê uma lida sobre o conceito Web Start.

[quote=discorpio]Boa noite a todos.

Como o próprio Andredeivid sugeriu, você terá que criar uma assinatura, para que o Applet possa acessar o seu servidor.

Não adianta nada você liberar portas, firewall e etc, se o que está impedindo possa ser o “Modelo de Segurança de Caixa de Areia - The Sandbox Model em inglês”, que funciona internamente dentro dos Browsers de internet. A origem do nome se prende ao fato de que tal sistema faz com que as applets ao serem executadas, seja monitoradas por um gerenciador de segurança chamado Applet Security Manager - Gerenciador de Segurança de Applet, que lança uma interrupção do tipo SecurityException, caso a applet viole qualquer regra de segurança imposta, e a idéia de caixa de areia surgiu de que elas servem para amortecer qualquer impacto de um desastre.

As tarefas que as applets podem executar sem nenhum tipo de restrição, são: exibir imagens, executar sons, processar o acionamento do teclado, do mouse e se comunicar com o computador host de onde foram carregadas. Por outro lado, applets não podem executar programas localmente instalados, não podem se comunicar com outros hosts exceto de onde ela foi carregada, não podem ler e escrever no sistema de arquivos local, não podem escrever nada no host de onde foi carregada e não podem obter informações do sistema em que operam, exceto sobre a JVM, por isso não basta criar somente o Policy, crie também uma assinatura, e você pode fazer isto através do recurso chamado Web Start.

Eu não lembro agora das linhas de comando de como se aciona Web Start, até porque estou digitando isto no computador do meu filho, e não tenho o NetBeans aqui, contudo sugiro que você dê uma lida sobre o conceito Web Start.[/quote]

discorpio,

Mesmo q eu contrate um jvm dedicado e hospede lá meus applets sendo q a base de dados se encontra no mesmo host, ainda sim vou precisar de uma assinatura? Pelo q pesquisei com uma assinatura não tenho necessidade de ter um plano JVM dedicado.

[quote=danillorc]E aí pessoal

Tô apanhando também tentando conecetar só q com base de dados mysql

Galera eu tenho uma hospedagem na locaweb e nos serviços adcionais tem a opção de contratar o serviço de JVM Dedicado, mas eu tenho uma duvida, eu tenho interesse a principio de trabalhar com applets com banco de dados mysql, gostaria de saber se contratando o serviço de JVM Dedicado ainda sim é necessário ter um certificado digital ou não há necessidade.

Fiz uns applets com base de dados, na rede local funciona beleza, mas quando coloco pra uma base q tá na net não funciona.

Parece q precisa de assinatura digital, uma obtenção de certificado digital.

Minha duvida é se eu contratar o serviço de JVM Dedicado ainda vou precisar de certificado digital?

Vi que fazendo o contrato lá já tem várias bibliotecas padrões inclusive a do mysql.

Valew galera![/quote]
Você precisa usar applets mesmo? O Deploy e a manutenção de Applets é algo que sempre dá problema. Como foi sugerido, procure por Java Web Start.

[quote=matheuslmota][quote=danillorc]E aí pessoal

Tô apanhando também tentando conecetar só q com base de dados mysql

Galera eu tenho uma hospedagem na locaweb e nos serviços adcionais tem a opção de contratar o serviço de JVM Dedicado, mas eu tenho uma duvida, eu tenho interesse a principio de trabalhar com applets com banco de dados mysql, gostaria de saber se contratando o serviço de JVM Dedicado ainda sim é necessário ter um certificado digital ou não há necessidade.

Fiz uns applets com base de dados, na rede local funciona beleza, mas quando coloco pra uma base q tá na net não funciona.

Parece q precisa de assinatura digital, uma obtenção de certificado digital.

Minha duvida é se eu contratar o serviço de JVM Dedicado ainda vou precisar de certificado digital?

Vi que fazendo o contrato lá já tem várias bibliotecas padrões inclusive a do mysql.

Valew galera![/quote]
Você precisa usar applets mesmo? O Deploy e a manutenção de Applets é algo que sempre dá problema. Como foi sugerido, procure por Java Web Start.[/quote]

matheuslmota,

O problema é q eu não quero nenhum acesso a máquina do cliente, no caso de Java Web Start ele baixa e executa aplicações o que eu também não quero, eu só quero que um applet no browser abra uma base de dados.

Eu fazendo um jar ele abre blz minha base dedos online, q nesse caso só precisa do java instalado, nenhuma outra configuração necessária.
Se eu fosse rodar esse jar online eu teria que ter o java (JRE) na máquina do cliente e ainda o Java Web Start instalado, acho q seria mais trabalho.

Meu interesse é só saber se contratar o serviço JVM Dedicado os meus applets vão se conectar a base de dados da propria hospedagem ou se ainda vou precisar fazer uma assinatura digital.