powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / tomcat7 + JAX-WS на CentOS -- не стартует tomcat
13 сообщений из 13, страница 1 из 1
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122105
Странная ситуация:
tomcat 7.0.35(34) на CentOS 6.3
java -- любая 1.6.0_34/1.7.0_11
собираю web-service с metro-ws, деплоится через web-интерфейс нормально, прекрасно запускается и работает.
Но виснет tomcat при загрузке:
Последние сообщения в логах tomcat:
Jan 23, 2013 5:46:33 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /usr/share/apache-tomcat-7.0.35/webapps/EntitlementServices.war
Jan 23, 2013 5:46:35 AM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
INFO: WSSERVLET12: JAX-WS context listener initializing
И дальше молчание...

На CentOS память после деплоя:
Memory Pool Type Initial Total Maximum Used
CMS Old Gen Heap memory 700.00 MB 700.00 MB 1700.00 MB 9.22 MB (0%)
Par Eden Space Heap memory 250.00 MB 250.00 MB 400.00 MB 102.73 MB (25%)
Par Survivor Space Heap memory 125.00 MB 125.00 MB 200.00 MB 89.62 MB (44%)
CMS Perm Gen Non-heap memory 512.00 MB 512.00 MB 768.00 MB 77.91 MB (10%)
Code Cache Non-heap memory 2.43 MB 8.06 MB 48.00 MB 7.95 MB (16%)

На Windows и MacOS tomcat стартует без проблем.
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122127
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При чем тут память:? Дамп потоков сделайте.
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122188
Blazkowicz,

спасибо.
Вроде разобрался, но есть вопрос. Этот веб-сервис зависит от другого веб-сервиса, который висит на том же томкате. Можно сделать отложенный старт приложения? Или указать порядок загрузки приложений томката?
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122220
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q27
Но, лучше сделать "отложеный старт". Что именно и от чего у вас зависит и почему стартует при депломенте, а не позже?
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122222
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать подписаться на события в JMX томката и ловить событие когда все сервер полность стартанул и по нему производить инициализацию.
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122258
Blazkowicz, еще раз спасибо.

Дальше то уже начинаются частности реализации, которые вряд ли будут интересны всем.
Попутно возник интересный вопрос (прежде чем начнем весело править код, обходящий зависание):
В чем принципиальная разница между дефолтным конструктором класса веб-сервиса и методом init()?
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122264
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий ПетровВ чем принципиальная разница между дефолтным конструктором класса веб-сервиса и методом init()?В чём принципиальная разница между конструктором и методом?
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122302
Basil A. SidorovЮрий ПетровВ чем принципиальная разница между дефолтным конструктором класса веб-сервиса и методом init()?В чём принципиальная разница между конструктором и методом?
А вот есть такая догадка, что конструктор класса веб-сервиса в томкате исполняется в synchronized контексте (видимо, по каким-то внутренним причинам), а метод init() -- нет.
Иначе какой смысл городить обязательно вызываемый метод вместо использования конструктора?
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122308
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий ПетровДальше то уже начинаются частности реализации, которые вряд ли будут интересны всем.

Почему нет?

Юрий ПетровПопутно возник интересный вопрос (прежде чем начнем весело править код, обходящий зависание):
В чем принципиальная разница между дефолтным конструктором класса веб-сервиса и методом init()?
Серверу может понадобится несколько экземпляров класса, при этом init будет вызван один раз.
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122475
BlazkowiczЮрий ПетровДальше то уже начинаются частности реализации, которые вряд ли будут интересны всем.

Почему нет?

Да не вопрос. В этом сервисе, который зависал, вся инициализация была написана в конструкторе вместо init, а в этой самой инициализации -- обращение к другому веб-сервису, где встречается synchronized-код. В этом месте все и вставало колом. Странно, что это никак не проявлялось на macos и win.

BlazkowiczЮрий ПетровПопутно возник интересный вопрос (прежде чем начнем весело править код, обходящий зависание):
В чем принципиальная разница между дефолтным конструктором класса веб-сервиса и методом init()?
Серверу может понадобится несколько экземпляров класса, при этом init будет вызван один раз.
Не очень верится, потому что init -- не статик-метод, и в каждом следующем экземпляре приватные переменные будут неинициализированными.
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122830
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий ПетровНе очень верится, потому что init -- не статик-метод, и в каждом следующем экземпляре приватные переменные будут неинициализированными.
А нечего заводить состояние в stateless классах.
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38122898
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрий ПетровНе очень верится, потому что init -- не статик-метод, и в каждом следующем экземпляре приватные переменные будут неинициализированными.
Но вообще, может вы и правы. Возможно так просто исторически сложилось со времен сервлетов, где в Init явно передаются параметры. А обязать юзер реализовать нужный конструктор в compile-time нельзя.
...
Рейтинг: 0 / 0
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
    #38123342
Значит, докладываю результаты изысканий и исправлений кода :)
Ситуация: два web-service на metro, один (ScriptService) требует наличия другого (AdminService)
Проблема: полное зависание tomcat во время старта на ScriptService.init(). Проблема проявляется только на linux-подобных JVM, тестирование на MacOS и Win-7 не приводит к зависанию.

Было:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
@WebService(…)
public class ScriptService {
    public static AdminService asrv = null;
    public static AdminServiceSoap soap = null;
    
    @PostConstruct
    public void init() {
        …….
        String adminServiceWSDL = null;
        synchronized(this) {
            try {
                 if( soap == null ) {
                    adminServiceWSDL = Configuration.GetRootParameter("adminServiceWSDL");
                    // ===================== виснет здесь: ============================
                    asrv = new AdminService(new URL(adminServiceWSDL));
                    soap = asrv.getAdminServiceSoap();
                    Logger.getLogger(ScriptService.class.getName()).log(Level.INFO, "ScriptService.init() complete for URL='" + adminServiceWSDL + "'");
                 }
             } catch (MalformedURLException ex) {
                Logger.getLogger(ScriptService.class.getName()).log(Level.SEVERE, null, ex);
                Logger.getLogger(ScriptService.class.getName()).log(Level.SEVERE, "Service.init() adminServiceWSDL endpoint problem for URL='" +  adminServiceWSDL + "'");
            } catch(Exception ex2) {
                Logger.getLogger(ScriptService.class.getName()).log(Level.SEVERE, null, ex2);
            }
        }
    }

    @WebMethod
    public int SomeMethod() {
        if( soap == null ) {
             return -1;
        }
        soap.AdminServiceMethod(…);
    }



Стало:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
@WebService(…)
public class ScriptService {
    private static AdminService asrv = null;
    private static AdminServiceSoap soap = null;
    
    @PostConstruct
    public void init() {
        …….
    }

    private void initsoap()
        String adminServiceWSDL = null;
        synchronized(this) {
            try {
                 if( soap == null ) {
                    adminServiceWSDL = Configuration.GetRootParameter("adminServiceWSDL");
                    // ===================== виснет здесь: ============================
                    asrv = new AdminService(new URL(adminServiceWSDL));
                    soap = asrv.getAdminServiceSoap();
                    Logger.getLogger(ScriptService.class.getName()).log(Level.INFO, "initsoap() complete for URL='" + adminServiceWSDL + "'");
                 }
             } catch (MalformedURLException ex) {
                Logger.getLogger(ScriptService.class.getName()).log(Level.SEVERE, null, ex);
                Logger.getLogger(ScriptService.class.getName()).log(Level.SEVERE, "initsoap() adminServiceWSDL endpoint problem for URL='" +  adminServiceWSDL + "'");
            } catch(Exception ex2) {
                Logger.getLogger(ScriptService.class.getName()).log(Level.SEVERE, null, ex2);
            }
        }
    }

    @WebMethod
    public int SomeMethod() {
        initsoap();
        if( soap == null ) {
             return -1;
        }
        



Все прекрасно заработало.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / tomcat7 + JAX-WS на CentOS -- не стартует tomcat
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]