Bonjour,
Je développe actuelement une application OSGi avec equinox.
Configuration:
Serveur :
BundleA : une classe A (serializable). Cette classe n'est pas exportée.
BundleX : une classe qui gere la communication avec le client. Ce bundle ne connait pas A (n'importe pas A).
Client :
BundleA : le même bundle que celui du serveur.
BundleY : une classe de callback qui vont être appelés par le serveur. Ce bundle ne connait pas A.
BundleZ : gère les instances de A sérialisées par le serveur.
Code dans bundle X :
Code dans BundleY :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // Le BundleX manipule instanceA comme étant un type Object. // il veut envoyer cet objet au client getClient().callback((Object)instanceA)
A l'exécution j'ai ce style d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void callback(Object o) { myBundleZObject.handleObject(o); }
...java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: bundleA.A
En regardant plus en détail la StackTrace je vois qu'un certain RMIClassLoader essaye de me charger la classe A,
mais il ne la trouve pas.
Par contre si j'exporte A et que j'importe cette classe dans les BundleX et BundleY çà fonctionne.
Je voudrais garder une certaine indépendance entre mes bundles. Les bundle X et Y ne veulent pas savoir quel type d'objet ils manipulent.
Ils ne font que les transmettre à d'autres bundles qui eux sauront quoi en faire comme le bundle Z.
Je ne sais pas si vous avez le temps de m'éclairer sur ce problème.
Je vous remercie par avance.
Cordialement,
Webskin.
Partager