Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / tomcat7 + JAX-WS на CentOS -- не стартует tomcat / 13 сообщений из 13, страница 1 из 1
23.01.2013, 18:52:25
    #38122105
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
Странная ситуация:
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
23.01.2013, 19:04:41
    #38122127
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
При чем тут память:? Дамп потоков сделайте.
...
Рейтинг: 0 / 0
23.01.2013, 19:43:06
    #38122188
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
Blazkowicz,

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

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

Почему нет?

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

Почему нет?

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

BlazkowiczЮрий ПетровПопутно возник интересный вопрос (прежде чем начнем весело править код, обходящий зависание):
В чем принципиальная разница между дефолтным конструктором класса веб-сервиса и методом init()?
Серверу может понадобится несколько экземпляров класса, при этом init будет вызван один раз.
Не очень верится, потому что init -- не статик-метод, и в каждом следующем экземпляре приватные переменные будут неинициализированными.
...
Рейтинг: 0 / 0
24.01.2013, 11:09:35
    #38122830
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
Юрий ПетровНе очень верится, потому что init -- не статик-метод, и в каждом следующем экземпляре приватные переменные будут неинициализированными.
А нечего заводить состояние в stateless классах.
...
Рейтинг: 0 / 0
24.01.2013, 11:44:17
    #38122898
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
Юрий ПетровНе очень верится, потому что init -- не статик-метод, и в каждом следующем экземпляре приватные переменные будут неинициализированными.
Но вообще, может вы и правы. Возможно так просто исторически сложилось со времен сервлетов, где в Init явно передаются параметры. А обязать юзер реализовать нужный конструктор в compile-time нельзя.
...
Рейтинг: 0 / 0
24.01.2013, 15:24:34
    #38123342
tomcat7 + JAX-WS на CentOS -- не стартует tomcat
Значит, докладываю результаты изысканий и исправлений кода :)
Ситуация: два 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
Форумы / Java [игнор отключен] [закрыт для гостей] / tomcat7 + JAX-WS на CentOS -- не стартует tomcat / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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