Access - Remoto. Usando java [problemas]

4 respostas
rollei

Estou tendo alguns problemas para usar um banco access pelo meu programa escrito em java. Inicialmente eu tava fazendo testes usando o driver que jah vem no jdk, o banco e a aplicacao estao na minha maquina, ta tudo funcionando normal, mas eu vou precisar colocar essa aplicacao em outra maquina e o banco em outra maquina distinta. resumo: minha aplicacao vai ficar rodando num servidor Linux e o banco vai ficar rodando num servidor Windows. A aplicacao precisa acessar remotamente o banco access e para isso eu estou tentanto usar RMIJDBC, baixei o zip do rmi coloquei no classpath da minha aplicacao e tentei rodar um exemplo LOCAL usando esse conexao, soh para teste.

ae vao as classes que to usando.

public final class BancoAccessRmi {
	private static final String forNameAccessRmi = "org.objectweb.rmijdbc.Driver";
	private static final String dbNameAccessRmi  = "PDTI";
	private static final String dbIpAccessRmi    = "//127.0.0.1";
	private static final String dbPortAccessRmi  = "1521";
	private static final String AccessUrlRmi     = "jdbc:odbc:" + dbNameAccessRmi;
	private static final String driverAccessRmi  = "jdbc:rmi:" + dbIpAccessRmi + ":" + dbPortAccessRmi +
												"/" + AccessUrlRmi;
	
	public static String getForNameAccessRmi() {
		return forNameAccessRmi;
	}
	public static String getDbNameAccessRmi() {
		return dbNameAccessRmi;
	}
	public static String getDbIpAccessRmi() {
		return dbIpAccessRmi;
	}
	public static String getDbPortAccessRmi() {
		return dbPortAccessRmi;
	}
	public static String getAccessUrlRmi() {
		return AccessUrlRmi;
	}
	public static String getDriverAccessRmi() {
		return driverAccessRmi;
	} 
}
public class ConnectionFactory {
	
	public static Connection getConnectionAccessRmi() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		Class.forName(BancoAccessRmi.getForNameAccessRmi()).newInstance();
		System.out.println(BancoAccessRmi.getForNameAccessRmi());
		System.out.println(BancoAccessRmi.getDriverAccessRmi());
		return DriverManager.getConnection(BancoAccessRmi.getDriverAccessRmi(), "", ""); 
	}
}
public class DAO {
	
	protected Connection connection;
	
	public Connection getConnection() {
		return connection;
	}
	
	public void connectionClose () throws SQLException {
		this.connection.close();
	}
}
public class AccessRmiDAO extends DAO{
	
	public AccessRmiDAO() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {
		this.connection = ConnectionFactory.getConnectionAccessRmi();
	}
	
}
public class Test {

	public static void main(String[] args) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException, UnknownHostException {
		Connection con = (Connection) new AccessRmiDAO();
	}

}

e o erro que ta dando eh esse:

java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
	java.net.ConnectException: Connection refused: connect
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
	at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
	at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
	at org.objectweb.rmijdbc.Driver.lookupDriver(Driver.java:130)
	at org.objectweb.rmijdbc.Driver.connect(Driver.java:199)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:185)
	at br.gov.ce.seplag.cadastroSistemas.jdbc.ConnectionFactory.getConnectionAccessRmi(ConnectionFactory.java:21)
	at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.AccessRmiDAO.<init>(AccessRmiDAO.java:12)
	at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.Test.main(Test.java:10)
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:519)
	at java.net.Socket.connect(Socket.java:469)
	at java.net.Socket.<init>(Socket.java:366)
	at java.net.Socket.<init>(Socket.java:179)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
	... 11 more
Exception in thread "main" java.sql.SQLException: Connection refused to host: 127.0.0.1; nested exception is: 
	java.net.ConnectException: Connection refused: connect
	at org.objectweb.rmijdbc.Driver.connect(Driver.java:206)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:185)
	at br.gov.ce.seplag.cadastroSistemas.jdbc.ConnectionFactory.getConnectionAccessRmi(ConnectionFactory.java:21)
	at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.AccessRmiDAO.<init>(AccessRmiDAO.java:12)
	at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.Test.main(Test.java:10)

eu jah criei o ODBC para o banco access que ta na minha maquina e jah to rodando o org.objectweb.rmijdbc.RJJdbcServer

alguem sabe me dizer qual o problema?

**edit**
soh para facilitar um pouco a leitura, ele ta fazendo isso no ConnectionFactory:

Class.forName("org.objectweb.rmijdbc.Driver").newInstance();
return DriverManager.getConnection("jdbc:rmi://127.0.0.1:1521/jdbc:odbc:PDTI", "", "");

PDTI eh o nome do ODBC que eu criei para o banco access na minha maquina

4 Respostas

rollei

olhei em outro forum que o RMI usa a porta padrao “1099” mudei a porta que eu tava usando para essa, quando eu mudo para essa porta o erro eh outro:

java.rmi.ServerError: Error occurred in server thread; nested exception is: java.lang.NoClassDefFoundError at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) at org.objectweb.rmijdbc.RJDriverServer_Stub.connect(Unknown Source) at org.objectweb.rmijdbc.RJConnection.<init>(RJConnection.java:51) at org.objectweb.rmijdbc.Driver.connect(Driver.java:199) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:207) at br.gov.ce.seplag.cadastroSistemas.jdbc.ConnectionFactory.getConnectionAccessRmi(ConnectionFactory.java:21) at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.AccessRmiDAO.<init>(AccessRmiDAO.java:10) at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.Test.main(Test.java:10) Caused by: java.lang.NoClassDefFoundError Exception in thread "main" java.sql.SQLException: Error occurred in server thread; nested exception is: java.lang.NoClassDefFoundError at org.objectweb.rmijdbc.Driver.connect(Driver.java:206) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:207) at br.gov.ce.seplag.cadastroSistemas.jdbc.ConnectionFactory.getConnectionAccessRmi(ConnectionFactory.java:21) at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.AccessRmiDAO.<init>(AccessRmiDAO.java:10) at br.gov.ce.seplag.cadastroSistemas.jdbc.DAO.Test.main(Test.java:10)

Alexandre_Saudate

Eu estou tendo o mesmo problema… pode avisar se encontrar a solução?

Obrigado!

rollei

Rapaz, descobri o porque. O oracle foi instalado aqui na maquina faz pouco tempo eu acho … e apesar de as variaveis no registro do windows de currentversion do java estarem setadas para 1.6 … ele tava pegando a versao 1.3 que era a que vinha com o oracle, eu coloquei o caminho do 1.6 mais a esquerda no path e ele pegou a versao mais nova, essa classe que ele nao tava achando soh foi introduzido na versao 1.4 (eu acho)

tenta dar um “java -version” no seu console.

T

Argh - eu odeio o instalador do Oracle Client. Ele bagunça tanto o PATH e CLASSPATH para fazer a versão do Java que ele usa funcionar, que faz com que as outras coisas em Java parem de funcionar. E é por isso que nunca ensino as pessoas a mexerem no PATH e CLASSPATH porque podem provocar esse tipo de problemas em outros lugares.

Criado 22 de abril de 2008
Ultima resposta 22 de abr. de 2008
Respostas 4
Participantes 3