2011-12-10 6 views
0

Nous avons codé et exécuté une application Web dynamique à l'aide de MAPSERVER (Version 6.0.1) sur la plate-forme Windows à l'aide de la technologie Java. Maintenant, il est nécessaire de le déployer sur Ubuntu 11.10. Nous avons installé Apache Tomcat 6.0, Mapserver 6.0.1, Apache 2.0 et FWTools-2.0.1 (Comme ce paquet contient tous les outils requis pour mapserver si je ne me trompe pas, je n'ai pas senti d'autres outils à installer) . Nous avons déployé le fichier war (et mis l'application sans) dans le dossier Webapps d'Apache Tomcat. J'ai même eu la page d'index qui n'a pas de code lié à l'API de mapscript. Mais en allant chercher l'autre servlet avec mapscript nous obtenons l'erreur suivante ...UnsatisfiedLinkError et NoClassDefFoundError: exécution de Java Mapscript sous Ubuntu 11.10

java.lang.UnsatisfiedLinkError: no mapscript in java.library.path 
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681) 
java.lang.Runtime.loadLibrary0(Runtime.java:840) 
java.lang.System.loadLibrary(System.java:1047) 
edu.umn.gis.mapscript.mapscriptJNI.<clinit>(mapscriptJNI.java:23) 
edu.umn.gis.mapscript.mapObj.<init>(mapObj.java:283) 

Encore une fois tout en rechargeant la page du navigateur où l'erreur ci-dessus a été affiché, je suis arrivé un changement,

java.lang.NoClassDefFoundError: Could not initialize class  
edu.umn.gis.mapscript.mapscriptJNI 
edu.umn.gis.mapscript.mapObj.<init>(mapObj.java:283) 

Je cherchai sur le net sur le problème ci-dessus. Mais finalement vide. S'il vous plaît, donnez une idée du problème ci-dessus.

Répondre

0

Je vérifie les 2 éléments suivants:

  1. Le fichier est mapscript.jar sur Tomcat ou classpath au moins votre webapp? (NoClassDefFoundError est votre grand indice ici)
  2. Est-ce que le libmapscript.so est sur votre LD_LIBRARY_PATH ou -Djava.library.path? (UnsatisfiedLinkError depuis l'objet partagé ne peut être trouvé)

Essayez d'avoir un coup d'oeil à ce post, près de la section Exécution Java Mapscript (sous Linux).

Espérons que ça aide!

+0

que j'ai fait. Même j'ai fait le deuxième aussi, mais le problème est que, je n'ai trouvé aucun fichier avec le nom libmapscript.so n'importe où dans l'installation de mapserver et dans root (/ de ubuntu). Lors de l'actualisation du navigateur, UnsatisfiedLinkError a disparu et je ne reçois plus que NoClassDefFoundError. – Vish

+0

'libmapscript.so' aurait dû être créé lors de l'étape de compilation sur votre serveur Linux. Pourriez-vous poster vos options 'configure'? (Cf. http://trac.osgeo.org/mapserver/wiki/JavaMapscriptUsing#againstFwtools) – buruzaemon

+0

J'ai fait tout en fonction de ce post que vous avez partagé un lien comme article. Une seule chose que nous n'avons pas fait est de créer et de tester l'interface. Est-ce nécessaire? – Vish

2

Je ne vais pas vous expliquer pourquoi vous obtenez le UnsatisfiedLinkError, mais je vais expliquer pourquoi vous obtenez le NoClassDefFoundError lorsque vous rechargez la page.

Une erreur NoClassDefFoundError avec un message Could not initialize class ... est lancée par la machine virtuelle Java lorsqu'elle tente d'initialiser une classe qu'elle a déjà essayée et dont l'initialisation a échoué.

La première de vos deux stacktraces contient la ligne

 
edu.umn.gis.mapscript.mapscriptJNI.<clinit>(mapscriptJNI.java:23) 

Le nom de la méthode <clinit> désigne la statique initialiseur, de la classe mapscriptJNI. Ainsi, au moment où le UnsatisfiedLinkError a été lancé, la JVM essayait d'initialiser cette classe. En regardant le message d'erreur, il semble que cet initialiseur statique a essayé de charger la bibliothèque de code natif mapscript mais a échoué.

Cette UnsuppiedLinkError provoque l'échec de l'initialisation réussie de la classe mapscriptJNI. La JVM conserve un enregistrement de toutes les classes qui ne parviennent pas à s'initialiser, et si vous tentez d'initialiser à nouveau l'une de ces classes, vous obtiendrez une erreur NoClassDefFoundError avec un message indiquant qu'elle n'a pas pu initialiser cette classe.

Lorsque vous actualisez la page, vous finissez par provoquer la JVM à initialiser la classe mapscriptJNI une deuxième fois. Bien sûr, cette classe n'a pas pu s'initialiser la fois précédente. Votre deuxième stacktrace contient exactement l'erreur que j'ai décrite.

En bref, l'insatisfaitelErreur est la vraie erreur ici. Fixez cela et l'autre s'en ira.

+0

Une suggestion @Luke à propos de la configuration de mapserver et de l'obtention de 'libmapscript.so'? – Vish

+0

@Vish: autre que de suivre ce que buruzaemon dit, non. –

Questions connexes