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

 


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 ?

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


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

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.

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

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...

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:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)