Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1621 connectés 

  FORUM HardWare.fr
  Programmation

  [Java-RMI-Oracle] Passer un objet OracleDataSource

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java-RMI-Oracle] Passer un objet OracleDataSource

n°101785
Wons
Ga Bu Zo Me
Posté le 18-02-2002 à 12:29:36  profilanswer
 

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:

mood
Publicité
Posté le 18-02-2002 à 12:29:36  profilanswer
 

n°101790
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 18-02-2002 à 12:34:59  profilanswer
 

bin les classes oracles sont pas dans ton classpath tout simplement. Faut les ajouter


---------------
What is popular is not always right, what is right is not always popular :D
n°101793
Wons
Ga Bu Zo Me
Posté le 18-02-2002 à 12:42:20  profilanswer
 

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:

n°101794
Wons
Ga Bu Zo Me
Posté le 18-02-2002 à 12:49:04  profilanswer
 

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:

n°101797
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 18-02-2002 à 12:54:34  profilanswer
 

ton skeleton n'est pas à la bonne version. Tu as des vieux skeleton d'une ancienne version. Tu dois les virer et relancer rmic


---------------
What is popular is not always right, what is right is not always popular :D
n°101798
Wons
Ga Bu Zo Me
Posté le 18-02-2002 à 13:07:12  profilanswer
 

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:

n°101802
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 18-02-2002 à 13:21:53  profilanswer
 

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?


---------------
What is popular is not always right, what is right is not always popular :D
n°101826
Wons
Ga Bu Zo Me
Posté le 18-02-2002 à 14:02:50  profilanswer
 

darklord22 a écrit a écrit :

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?


:) Vi vi, ça j'imagine, mais bon, pour l'instant, si je pouvais faire fonctionner le serveur, je serais content...

n°101830
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 18-02-2002 à 14:06:17  profilanswer
 

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.


---------------
What is popular is not always right, what is right is not always popular :D
n°101836
Wons
Ga Bu Zo Me
Posté le 18-02-2002 à 14:10:45  profilanswer
 

darklord22 a écrit a écrit :

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.  



:??: Euhh, atta.
En gros, moi, tout ce que je fait, c'est instancier un objet du type de mon serveur pour le binder après dans rmi.
En gros, c'est l'instruction Naming.rebind(mon_url, mon_objet); qui merde.
Donc à partir de là, le serveur ne se lance pas. Donc, mon client peut pas trop y accéder.

mood
Publicité
Posté le 18-02-2002 à 14:10:45  profilanswer
 

n°101840
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 18-02-2002 à 14:12:13  profilanswer
 

alors c tes skeleton qui sont foireux c'est bien ce que je dis ...


---------------
What is popular is not always right, what is right is not always popular :D
n°101855
Wons
Ga Bu Zo Me
Posté le 18-02-2002 à 14:31:32  profilanswer
 

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 ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Java-RMI-Oracle] Passer un objet OracleDataSource

 

Sujets relatifs
[Java] fichier properties corrompu ?objet CStdioFile
[JAVA] JLAbel[JAVA] code natif en C ou comment je suis trop dans la merde!
[Java] - Swing et les conventions[JAVA] Images dans les applications
(JAVA]Empêcher la saisie de lettres dans un TextField[Java] Applet afficher des messages pendant l'init
[JAVA] Probleme de surcharge CPU[java][servlet] Pb de compil (je sais, c'est con)
Plus de sujets relatifs à : [Java-RMI-Oracle] Passer un objet OracleDataSource


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR