2009-03-26 9 views
1

détails: J'essaye d'utiliser le framework Jalapeno pour connecter mon application RCP avec la base de données Cache. Une fois la connexion établie, je suis en train d'obtenir toutes les données de la table exactement comme dans le manuel Jalapeno:Eclipse RCP: ClassNotFoundException ou Comment charger un autre paquet ma classe

if (objManager==null) return; 
DBClass cortege = null; 
try { 
Iterator terms = objManager.openByQuery(DBClass.class, null, null); 
System.out.println("terms ok"); 
while (terms.hasNext()){ 
    System.out.println("has next"); 
    cortege = (DBClass)terms.next(); 
} 

cette compilation de code, en cours d'exécution et trowing exception

java.lang.RuntimeException: myPluginId.views.DBClass 
at com.intersys.objects.POJOIterator.next(POJOIterator.java:75) 
    ...skip... 
    Caused by: java.lang.ClassNotFoundException: myPlugin.views.DBClass 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Unknown Source) 
    at com.jalapeno.runtime.ObjectCopierToPojo.detach(ObjectCopierToPojo.java:76) 
    at com.jalapeno.runtime.ObjectCopierToPojo.findPojo(ObjectCopierToPojo.java:472) 
    at com.intersys.classes.CacheRootObject.detach(CacheRootObject.java:255) 
    at com.intersys.classes.Persistent.detach(Persistent.java:567) 
    at com.intersys.objects.POJOIterator.next(POJOIterator.java:59) 

à terms.next(); Je n'arrive pas à l'obtenir ... instance de la classe DBClass a été créée, mais la classe ne peut pas être chargée. alors j'ai essayé de placer ce code dans une application java simple (pas eclipse rcp) et tout s'est bien passé. donc je pense que le chargement des classes de blocage des pièces Eclipse.

J'ai également essayé de charger la classe avant d'appeler terms.next();

Bundle b = Platform.getBundle("myPluginId"); 
try { 
b.loadClass("DBClass"); 
} catch (ClassNotFoundException e) { 
System.out.println("no class"); 
e.printStackTrace(); 
} 

et la même erreur. La classe ne peut pas être chargée. alors, est-ce que c'est un problème connu? Y a-t-il une solution? ========================================== après quelques recherches mettant à jour la question: Comment faire Jalapeno plugin pour charger la classe de Mon plugin?

+0

dans l'éclipse google group trouvé, que J alapeno plugin et ma classe doit être chargée par le même chargeur de classe ... je ne sais pas comment faire cela. – Imaskar

+0

c'est ce dont j'ai besoin? http://wiki.eclipse.org/index.php/BundleProxyClassLoader_recipe si oui, comment l'utiliser? – Imaskar

+0

jetez un oeil à ma réponse ci-dessous, mais oui, je crois que vous avez besoin de chargement de classe buddy. – nstehr

Répondre

3

Vous pourriez vouloir essayer classloading buddy. Pour plus d'informations sur la classification par classes Eclipse, Alex Blewitt a écrit un excellent aperçu du système de chargement de classes dans Eclipse here. Il a quelques années, mais pour la plupart, il est toujours pertinent.

Le jist de classloading buddy est ceci:

  • un plugin déclare qu'il a besoin de cours d'aide de chargement. Elle le fait en déclarant son « plugin ami »

  • le plugin ami déclare sa politique de jumelage

  • en cas d'échec du mécanisme de chargement régulier, Eclipse tente d'utiliser les politiques de chargement de classes de contact que vous avez spécifié.

Donc dans votre cas, essayez de mettre:

Eclipse-BuddyPolicy: registered 

dans votre fichier manifest.mf de plugin Jalapeno

et mettre:

Eclipse-RegisterBuddy: id.of.jalepeno.plugin 

dans le MANIFEST.MF votre plugin

+0

merci! Ça m'a aidé! Juste une chose: existe-t-il un moyen d'améliorer les performances, d'ignorer le mécanisme régulier (je suppose qu'il itère toutes les classes du plugin Jalapeno) et d'utiliser d'abord le buddy (seulement dans les endroits prévus ... je veux dire où ça se passe)? – Imaskar

+0

content que ça a aidé! Mais pour la deuxième question, je ne peux penser à aucun moyen de savoir comment améliorer la performance. – nstehr

+0

ok, merci. que ce soit comme ça – Imaskar

0

Je ne suis pas sûr, mais peut-être que vous devez exporter le paquet dans lequel les classes mentent.

Sélectionnez dans le MANIFESTE « Runtime » et ajoutez tous les paquets

+0

essayé. ne fonctionne toujours pas. – Imaskar

Questions connexes