2010-01-06 5 views
2

J'ai écrit une application Spring qui fonctionne sur Weblogic 10.3. Dans cette application, j'ai des consommateurs de la file d'attente JMS.NoClassDefFoundError au printemps

Parfois j'ai eu une erreur lors de l'application de fermeture ou ouverture (je l'ai vu cette erreur dans les deux cas) en disant:

java.lang.NoClassDefFoundError: org/springframework/jms/connection/SmartConnectionFactory 
     at org.springframework.jms.connection.ConnectionFactoryUtils.releaseConnection(ConnectionFactoryUtils.java:72) 
     at org.springframework.jms.listener.AbstractJmsListeningContainer.refreshSharedConnection(AbstractJmsListeningContainer.java:385)at org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:779) 
     at org.springframework.jms.listener.DefaultMessageListenerContainer.recoverAfterListenerSetupFailure(DefaultMessageListenerContainer.java:761) 
     at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:892) 
     at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.ClassNotFoundException: org.springframework.jms.connection.SmartConnectionFactory 
     at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:283) 
     at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:256) 
     at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:54) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:303) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:176) 
     at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:35) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 
     ... 6 more 

Pourquoi puis-je obtenir cette erreur et que dois-je faire pour le résoudre? La version de spring.jar est 2.5.5

Répondre

2

Cette exception signifie que la classe n'est pas chargée dans la JVM. Assurez-vous que spring.jar se trouve dans le dossier classpath ou library du serveur Weblogic.

+0

Il est dans mon fichier de guerre :) Y at-il un besoin pour cela? –

+0

Dans ce cas, j'imagine que vous avez une sorte de classe de démarrage/arrêt qui appelle cela avant que le fichier war soit chargé. J'essayerais manuellement de placer le fichier jar dans le dossier classpath ou library du serveur et pas seulement dans le fichier war. Parfois, la redondance est la meilleure solution. – Poindexter

+0

Il n'y a aucune classe de démarrage ou d'arrêt que je présente à Weblogic, mais je vais donner un coup de feu :) –

0

C'est très bien que vous ayez cette classe dans votre guerre, mais dans Weblogic, la guerre a son propre classloader. Puisque votre trace de pile montre un écouteur JMS, je demanderais: où est l'écouteur? Si c'est dans la guerre, alors vous avez un mystère. Mais ça a l'air d'être ailleurs, et c'est un autre endroit qui manquerait cette classe de printemps.

+0

En fait, l'écouteur est dans le fichier WAR et déclaré comme Spring "Message Driven Pojo" –