Falha na conexão entre Applet & MySQL

0 respostas
R

Boa tarde,

Há bastante tempo acompanho o GUJ, sempre me ajudou bastante, aprendi muito aqui, mas geralmente encontro todas as respostas em tópicos existentes, então nunca precisei postar. Hoje não teve solução, tive que abrir um tópico aqui, há horas estou quebrando a cabeça e não saí do lugar. Eis o meu problema: estou desenvolvendo um applet para gerenciamento financeiro comercial que trabalha com um banco de dados MySQL (por enquanto ainda local). Eu não tenho muita experiência com bancos de dados em applets, mas fui seguindo com o projeto no Eclipse e tudo roda perfeitamente. Todavia, quando fui testar o applet rodando no browser, não consigo acessar o banco de dados (embora consiga quando executo diretamente no Eclipse). Um problema imediato é o gerenciamento de usuários, que acessa uma table do MySQL, da seguinte forma:

public boolean verificaLogin() {
		String url = "jdbc:mysql://" + ip + ":3306/accounts";
		java.sql.Connection link;
		try {
			link = java.sql.DriverManager.getConnection(url, "ma", null);
		} catch (Exception ex) {
			ex.printStackTrace();
			return false;
		}
		try {
			java.sql.Statement cmd = link.createStatement();
			String info = "SELECT * FROM `default` WHERE `user` LIKE '"
					+ this.user.getText() + "'";
			java.sql.ResultSet rst = cmd.executeQuery(info);
			while (rst.next()) {
				if (this.pwd.getText().equals(rst.getString("pwd")))
					return true;
			}
			rst.close();
			cmd.close();
			link.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		try {
			link.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return false;
	}

Os parâmetros de conexão estão corretos (até porque a conexão funciona direito no Eclipse)... O IP por enquanto é sempre localhost (tentei também 127.0.0.1, mas não obtive sucesso), porta 3306 (o telnet responde devidamente), banco de dados - accounts, usuário para acesso ma, senha vazia. Tudo ocorre perfeitamente quando rodo o applet pelo Eclipse, mas quando vou para o browser, o applet roda, mas não consegue acessar o MySQL da forma indicada. Quando tento via terminal pelo appletviewer *.html, também não funciona. Eis a minha exceção:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2334)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2371)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2163)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:794)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:378)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
	at java.sql.DriverManager.getConnection(DriverManager.java:579)
	at java.sql.DriverManager.getConnection(DriverManager.java:221)
	at formLogin.verificaLogin(formLogin.java:124)
	at formLogin$1.actionPerformed(formLogin.java:66)
	at java.awt.Button.processActionEvent(Button.java:409)
	at java.awt.Button.processEvent(Button.java:377)
	at java.awt.Component.dispatchEventImpl(Component.java:4860)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.net.SocketException: java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:3306" "connect,resolve")
	at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:405)
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:266)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)
	... 38 more

Meu applet está em um JAR digitally signed, bem como o driver (adicionei como JAR externo nas Libraries do projeto do Eclipse e mantenho os dois JARs na mesma pasta do *.html). Segue meu arquivo de página que uso para os testes:

<Html>
<Head>
<Title>Mundo Animal</Title>
</Head>
<Body>
<br>
T3
<br>
by Ricardo F. G.
<br>
<br>
<Applet ARCHIVE="mysql-connector-java-5.1.14-bin.jar, package_MA.jar" CODE="appletMA.class" width=600 Height=400>
</Applet>
</Body>
</Html>

Imagino que tenha algo a ver com o driver do conector, sobre o qual eu não entendo muito, apenas segui o exemplo de utilização do meu professor para ver como faz a conexão. Trata-se do mysql-connector-java-5.1.14-bin.jar, também na mesma pasta do applet/*.html/demais arquivos. Peço desculpas por talvez ter me estendido demais, mas quis deixar claro todo o contexto e o que já tentei até agora. Alguém sabe como me ajudar?

Desde já grato,
Ricardo Gonçalves.

Criado 22 de outubro de 2011
Respostas 0
Participantes 1