|
Dernière réponse | |
---|---|
Sujet : [Java-RMI-Oracle] Passer un objet OracleDataSource | |
Wons | Hummm, skeleton foireux... J'vois pas trop comment si je compiles, rmic et exécute dans la foulée...
Ou alors, c'est une des compilations qui déconne ? |
Aperçu |
---|
Vue Rapide de la discussion |
---|
Wons | Hummm, skeleton foireux... J'vois pas trop comment si je compiles, rmic et exécute dans la foulée...
Ou alors, c'est une des compilations qui déconne ? |
darklord22 | alors c tes skeleton qui sont foireux c'est bien ce que je dis ... |
Wons |
:??: Euhh, atta.
|
darklord22 | je veux bien moi mais si tu as un marshall c'est que tu as invoqués qqch non?
Si il te fait ca a l'init (sans que ton client fasse quoi que ce soit) c'est tes skeletons qui sont mauvais. |
Wons |
:) Vi vi, ça j'imagine, mais bon, pour l'instant, si je pouvais faire fonctionner le serveur, je serais content... |
darklord22 | tu comprends bien sur que ton client doit avoir les classes oracles installées. SInon il va avoir dur à comprendre ce qu'est un objet OracleDataSource
:D c'est fait ca? |
Wons | Oui c'est ce que je m'étais dit au départ.
Mais, même en recompilant tout, ça foire... En gros, je fais : export CLASSPATH=/usr/java/lib/classes12.zip:. javac test_interf/testInterf.java jar cvf testInterf.jar test_interf/*.class mv testInterf.jar /usr/test/ export CLASSPATH=/usr/java/lib/classes12.zip:/usr/test/testInterf.jar:. javac test_oracle/testOracle.java rmic -d . test_oracle.testOracle unset CLASSPATH rmiregistry & export CLASSPATH=/usr/java/lib/classes12.zip:/usr/test/testInterf.jar:. java test_oracle.testOracle Et ça merde... :( Franchement, je vois pas où ça merde... M'est avis que ça bugge du coté d'Oracle : si je vire l'objet OracleDataSource, évidemment, ça fonctionne :/ Mais je veux passer un objet de type Connection à mon client RMI :cry: |
darklord22 | ton skeleton n'est pas à la bonne version. Tu as des vieux skeleton d'une ancienne version. Tu dois les virer et relancer rmic |
Wons | Ce que je comprends encore moins, ce que si je le relance un 2ème fois juste derrière, il plante différemment :
testOracle exception : java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.io.InvalidClassException: test_oracle.testOracle_Stub; Local class not compatible: stream classdesc serialVersionUID=2 local class serialVersionUID=0 java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.io.InvalidClassException: test_oracle.testOracle_Stub; Local class not compatible: stream classdesc serialVersionUID=2 local class serialVersionUID=0 java.io.InvalidClassException: test_oracle.testOracle_Stub; Local class not compatible: stream classdesc serialVersionUID=2 local class serialVersionUID=0 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) Et alors là, je comprends plus du tout :cry: |
Wons | Bah si elles y sont :(
En gros, je fais : unset CLASSPATH rmiregistry & export CLASSPATH=/usr/java/lib/classes12.zip:/usr/test/testInterf.jar:. java test_oracle.testOracle Avec : classes12.zip : les classes Oracle (driver thin 8.1.7) testInterf.jar : l'interface :cry: |
darklord22 | bin les classes oracles sont pas dans ton classpath tout simplement. Faut les ajouter |
Wons | 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 :cry: Si qqun a une idée :jap: |