Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Как заставить Томкат не делать конекшинов


Автор: Andy_L20066 23.11.2009, 15:27
Привет, есть вопрос, может чего посоветуете...

Есть клиент на С++ который конектится к серверу на джаве (апликуха под Томкатом); но апликуха долго стартует, поднимает базу, делает всякие там инициализации... соответсвенно клиент простаивает, и ждет ответа от сервера, а ответ не приходит пока сервер полностью не поднимет апликацию. Задача поставлена так что на клиенте ничего менять нельзя, нужно сделать изменение на сервере. У кого какие идеи на этот счет?

Автор: Egik2 23.11.2009, 16:19
В чем то вопрос собственно, не совсем понял.
Tomcat не должен соединяться с БД, или что?

Автор: Andy_L20066 23.11.2009, 16:27
вопрос в том как отфутболить клиента сразу, чтобы он не ждал кучу времени на риспонс, поскольку сервер долго поднимает апликуху..

Добавлено через 10 минут и 34 секунды
Решил более подробно описать проблему и свои мысли: серверная апликуха вмещает ApplicationContextListener, в котором собственно и выполняется вся загрузка при старте апликухи: 

Код

public class ApplicationContextListener
        implements ServletContextListener
{

    
    public void contextInitialized(ServletContextEvent event) {
        try {

итак запускаем сервер, грузится Томкат, запускается метод contextInitialized, в этот момент клиент пишет серверу: "Привет", но сервер не может сразу что-то ответить, а отвечает через 20-30 секунд, соответсвенно клиент ждет, и потом по таймауту (на стороне клиента) говорит что идет в офлайн. 
Надо как-то заставить сервер сразу сказать клиенту, что я мол еще не готов, и никаких конекшинов делать нельзя. Тут как я понимаю клиент всетаки по сокету соединяется с сервером...

может подскажите какие-то тулзы для мониторинга Томката, чтоб более подробно можно было посмотреть чего там грузится и что творится...

Томкат - древний 5.0 ну и Java 1.4... короче ужас какой то smile 

Автор: ming 23.11.2009, 17:01
вынести инициализацию в отдельный thread, а в сервлете, на который клиент делает запрос (привет) проверять некий флаг, который фальшив пока идёт инициализация и истиннен после её окончания. 
Или архитектура иная, без сервлетов?

Автор: Andy_L20066 23.11.2009, 17:21
ну архитектура на сервлетах, только вот инициализацию в отдельный тред - тяжеловато будет вынести, тут очень много кода, надо как-то проще сделать... может можна будет обойтись флагом, и проверять стартанул Томкат или нет

Добавлено @ 17:27
только вот как я вижу сервлет этот на который приходят сообщение инициализируется только после того как апликуха окончательно поднимется...  smile 

то есть после выполнения метода contextInitialized... иначе клиент просто ждет, посылает риквест - и ничего... ждет пока оно поднимется

Автор: COVD 23.11.2009, 18:37
Цитата

Есть клиент на С++ который конектится к серверу на джаве (апликуха под Томкатом); но апликуха долго стартует, поднимает базу, делает всякие там инициализации... 

Никакой изнурительной инициализации в приложении желательно не делать. Приложение должно уметь обработать http запрос, т.е. принять и отослать, т.е. распарсить http хедеры запроса, извлечь куки если нужно и обернуть ответ в http. И все. Готовить ответ может другое приложение. Если для формирования ответа на запрос нужно соединение с БД, которое долго инициализируется, то пусть это соединение обеспечивает или сам Томкат (его-то вы же не рестартуете всякий раз) или другое приложение (сервис), которому сервлет может послать запрос через RMI, например.      

Автор: Andy_L20066 23.11.2009, 18:43
согласен.... но не от меня зависит этот процес, тоесть никто мне не даст переписать все по другому

Добавлено через 8 минут и 45 секунд
я правильно понимаю: этот лисенер (ApplicationContextListener) прописан в конфигурации web.xml и пока вот этот метод contextInitialized не вернет значение, сервлеты не инициализируются (не считиваются из web.xml)?

так может както поменять возмножно либо написать еще один сервлет который бы грузился где-то до того как завершится contextInitialized?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)