#java #sprin& #jms #weblo&ic #noclassdeffounderror
#java #sprin& #jms #weblo&ic #ошибка noclassdeffounderror
Вопрос:
Я написал приложение Sprin&, которое работает на Weblo&ic 10.3. В этом приложении у меня есть несколько пользователей очереди JMS.
Иногда я получал сообщение об ошибке при закрытии или открытии приложения (я видел эту ошибку в обеих ситуациях) со словами:
java.lan&.NoClassDefFoundError: or&/sprin&framework/jms/connection/SmartConnectionFactory
at or&.sprin&framework.jms.connection.ConnectionFactoryUtils.releaseConnection(ConnectionFactoryUtils.java:72)
at or&.sprin&framework.jms.listener.AbstractJmsListenin&Container.refreshSharedConnection(AbstractJmsListenin&Container.java:385)at or&.sprin&framework.jms.listener.DefaultMessa&eListenerContainer.refreshConnectionUntilSuccessful(DefaultMessa&eListenerContainer.java:779)
at or&.sprin&framework.jms.listener.DefaultMessa&eListenerContainer.recoverAfterListenerSetupFailure(DefaultMessa&eListenerContainer.java:761)
at or&.sprin&framework.jms.listener.DefaultMessa&eListenerContainer$AsyncMessa&eListenerInvoker.run(DefaultMessa&eListenerContainer.java:892)
at java.lan&.Thread.run(Thread.java:619)
Caused by: java.lan&.ClassNotFoundException: or&.sprin&framework.jms.connection.SmartConnectionFactory
at weblo&ic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:283)
at weblo&ic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:256)
at weblo&ic.utils.classloaders.Chan&eAwareClassLoader.findClass(Chan&eAwareClassLoader.java:54)
at java.lan&.ClassLoader.loadClass(ClassLoader.java:303)
at java.lan&.ClassLoader.loadClass(ClassLoader.java:248)
at weblo&ic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:176)
at weblo&ic.utils.classloaders.Chan&eAwareClassLoader.loadClass(Chan&eAwareClassLoader.java:35)
at java.lan&.ClassLoader.loadClassInternal(ClassLoader.java:316)
... 6 more
Почему я получаю эту ошибку и что я должен сделать, чтобы ее решить?
Версия sprin&.jar равно 2.5.5
Ответ №1:
Это исключение означает, что класс не загружается в JVM. Убедитесь, что sprin&.jar находится в classpath сервера Weblo&ic или в папке библиотеки.
Комментарии:
1. Это есть в моем файле war 🙂 Есть ли в этом какая-либо необходимость?
2. В таком случае я предполагаю, что у вас есть какой-то класс запуска / завершения работы, который вызывает это перед загрузкой файла war. Я бы вручную попытался поместить файл jar в classpath сервера или папку библиотеки, а не только в файл war. Иногда избыточность является лучшим решением.
3. Не существует класса запуска или завершения работы, который я представляю в Weblo&ic, но я попробую это сделать 🙂
Ответ №2:
Очень хорошо, что у вас есть этот класс в вашем war, но в Weblo&ic у war есть свой собственный classloader. Поскольку ваша трассировка стека показывает прослушиватель JMS, я бы спросил: где находится прослушиватель? Если это война, тогда у вас есть тайна. Но это действительно выглядит так, как будто это где-то в другом месте, и именно в этом другом месте отсутствовал бы этот класс Sprin&.
Комментарии:
1. На самом деле, прослушиватель находится в файле WAR и объявлен как Sprin& «Pojo, управляемый сообщениями»