Bon voilà, au départ, je voulais passer un objet de type Connection entre un client et un serveur avec du RMI. Manque de bol, c'est pas serialisable, et ça me jette.
Après quelques recherches, je remarque qu'Oracle a implémenté une classe qui permet de balancer une Connection chez le client, grâce à la classe OracleDataSource.
Manque de bol, j'ai une erreur que je ne comprends pas...
Mon code :
L'interface :
package test_interf;
import java.rmi.Remote;
import java.rmi.RemoteException;
import oracle.jdbc.pool.*;
public interface testInterf extends Remote {
OracleDataSource retourneConn() throws RemoteException;
}
Le serveur :
package test_oracle;
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.*;
import java.rmi.*;
import java.rmi.server.*;
import test_interf.*;
public class testOracle extends UnicastRemoteObject implements testInterf {
public OracleDataSource cacheOracle;
public testOracle() throws RemoteException {
super();
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
cacheOracle = new OracleDataSource();
cacheOracle.setDriverType("thin" );
cacheOracle.setServerName("mon_serveur" );
cacheOracle.setDatabaseName("ma_base" );
cacheOracle.setPortNumber(mon_port);
cacheOracle.setUser("mon_user" );
cacheOracle.setPassword("mon_passe" );
} catch (Exception e) {
System.err.println("testOracle() exception:" );
e.printStackTrace();
}
}
public OracleDataSource retourneConn() throws RemoteException{
return cacheOracle;
}
static void main(String[] args) {
java.sql.Connection hop;
String url = "//linux/test_oracle";
try {
testOracle obj = new testOracle();
Naming.rebind(url, obj);
} catch (Exception e) {
System.err.println("testOracle exception :" );
e.printStackTrace();
}
}
}
Les compilations passent bien, je lance "rmiregistry", et quand je lance le serveur, il me lance :
testOracle exception :
java.rmi.ServerError: Error occurred in server thread; nested exception is:
java.lang.NoClassDefFoundError: oracle/jdbc/pool/OracleDataSource
java.lang.NoClassDefFoundError: oracle/jdbc/pool/OracleDataSource
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:245)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:220)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:354)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at test_oracle.testOracle.main(testOracle.java:45)
[i]
Je comprends pas
Si qqun a une idée