Spring/RMI ошибка сервера

У нас есть веб-приложение Spring MVC (WAR), развертываемое в Tomcat (6.0.35), которое запускает поток внутри отдельной JVM во время развертывания (не спрашивайте почему - не мой дизайн), а затем связывается с этим потоком через RMI через порт 8888.

Несмотря на полную нерешительность, до вчерашнего дня это работало совершенно нормально, а теперь поток запускается с ошибкой при запуске, и, несмотря на все наши усилия по добавлению входа в систему, мы попали в стену. Это единственное исключение, которое мы можем найти в журналах:

Jun 12, 2012 3:11:36 AM com.ourapp.ImageController destroy
SEVERE: Shutdown Error: Lookup of RMI stub failed; nested exception is      java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
    java.net.ConnectException: Connection refused
Jun 12, 2012 3:11:37 AM org.apache.catalina.core.StandardContext listenerStop
SEVERE: Exception sending context destroyed event to listener instance of class    org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: org/springframework/web/context/ContextCleanupListener
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:80)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3973)
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4577)
    at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1165)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1271)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:296)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.ContextCleanupListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    ... 12 more

ImageController это весна MVC Controller это ответственно за запуск этого демона / порожденного потока RMI. Основываясь на подробностях этой ошибки, кто-нибудь имеет представление о том, что может быть причиной этой ошибки "отказано в соединении"?

Запуск netstat -an | grep 8888 (это машина Linux) не выдает никаких результатов, что означает, что на этом порту ничего не прослушивается. Заранее спасибо за любые идеи / предложения, которые приводят к исправлению.

Редактировать: вот еще ConnectionException мы видим:

Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
    ... 74 more

2 ответа

Решение

Я перенесу свои комментарии к этому ответу.

Все в ваших журналах говорит о том, что проблема на другом компьютере, к которому вы подключаетесь через порт 8888. netstat результаты доказывают, что процесс не прослушивает этот порт - следовательно, ошибки подключения в ваших журналах.

Следующий шаг, который я хотел бы сделать, это проверить, работает ли приложение на другом компьютере (или в другой JVM) вообще (например, ps ax|grep java). И если это произойдет - проверьте свои журналы на наличие подсказок, почему он не смог запустить службу RMI, или если это не так - запустите его.

Обычно, если приложение не может открыть сокет, это связано с тем, что какое-то другое приложение уже использует порт. Это не так в вашей ситуации. Это может быть случай, когда два экземпляра одного и того же приложения были запущены: первое приложение заняло 8888 портов, второе приложение не смогло взять 8888 и завершилось сбоем, а затем первое приложение было закрыто. В конце концов, никто не слушает порт.

Кто-нибудь есть какие-либо идеи, что может быть причиной этой ошибки "отказано в соединении"?

Это прямо в трассировке стека:

java.lang.NoClassDefFoundError: org/springframework/web/context/ContextCleanupListener

В вашем развертывании отсутствует этот класс, то есть файл JAR, в который он входит.

Другие вопросы по тегам