| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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, в котором собственно и выполняется вся загрузка при старте апликухи:
итак запускаем сервер, грузится Томкат, запускается метод contextInitialized, в этот момент клиент пишет серверу: "Привет", но сервер не может сразу что-то ответить, а отвечает через 20-30 секунд, соответсвенно клиент ждет, и потом по таймауту (на стороне клиента) говорит что идет в офлайн. Надо как-то заставить сервер сразу сказать клиенту, что я мол еще не готов, и никаких конекшинов делать нельзя. Тут как я понимаю клиент всетаки по сокету соединяется с сервером... может подскажите какие-то тулзы для мониторинга Томката, чтоб более подробно можно было посмотреть чего там грузится и что творится... Томкат - древний 5.0 ну и Java 1.4... короче ужас какой то |
| Автор: ming 23.11.2009, 17:01 |
| вынести инициализацию в отдельный thread, а в сервлете, на который клиент делает запрос (привет) проверять некий флаг, который фальшив пока идёт инициализация и истиннен после её окончания. Или архитектура иная, без сервлетов? |
| Автор: Andy_L20066 23.11.2009, 17:21 |
| ну архитектура на сервлетах, только вот инициализацию в отдельный тред - тяжеловато будет вынести, тут очень много кода, надо как-то проще сделать... может можна будет обойтись флагом, и проверять стартанул Томкат или нет Добавлено @ 17:27 только вот как я вижу сервлет этот на который приходят сообщение инициализируется только после того как апликуха окончательно поднимется... то есть после выполнения метода 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? |