Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Деплоймент приложения с http хендлером, 2 рабочих деплоймента работают поразному 
V
    Опции темы
apogif
Дата 13.1.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



Есть приложение 'untitled': один main класс 'bla' и класс-хендлер запросов
мейн класс выглядит так:
Код

import org.apache.mina.common.DefaultIoFilterChainBuilder;
import org.apache.mina.common.IoAcceptor;
import org.apache.mina.common.IoAcceptorConfig;
import org.apache.mina.transport.socket.nio.SocketAcceptor;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
import java.net.InetSocketAddress;

public class bla {
    public static void main(String a[]) {
        try {
            System.out.println("not yet listening");
            IoAcceptor acceptor = new SocketAcceptor();
            IoAcceptorConfig config = new SocketAcceptorConfig();
            DefaultIoFilterChainBuilder chain = config.getFilterChain();
            HttpProtocolHandler http = new HttpProtocolHandler();
            InetSocketAddress sa = new InetSocketAddress(8888);
            acceptor.bind(sa, http, config);
            System.out.println("listening");
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}


Хендлер выглядит вот так: http://www.koders.com/java/fid1E071C1265C0...7699AB01FA.aspx
Он просто получает запрос и в ответ присылает html табличку с информацией о запросе.

Работать приложение должно так: мэйн класс вешает хендлер, тот принимает запросы и что-то отвечает. Очень просто.

Пробую два варианта деплоймента
1. запустить мэйн класс из папки со скомпилированными классами D:\deployment\untitled - там лежат файты, разархивированные из самого untitled.jar.
Такой старт - почти копия того как это делает intelliJ Idea, выглядит это так:
java -classpath "untitled;jar\commons-logging.jar;jar\mina.jar;jar\log4j-1.2.15.jar;jar\slf4j-jcl.jar" bla 
Результат: запускается, вешает хендлер на порт, пишет listening, на запросы отвечает
2. запустить из jar файла
a) java -classpath "untitled.jar;jar\commons-logging.jar;jar\mina.jar;jar\log4j-1.2.15.jar;jar\slf4j-jcl.jar" bla
или
b) java -classpath "jar\commons-logging.jar;jar\mina.jar;jar\log4j-1.2.15.jar;jar\slf4j-jcl.jar" -jar untitled.jar
Результат: запускается, вешает хендлер, но на запросы не отвечает: просто висит на порту и все.
Причем браузер спкойно ждет ответа до тех пор, пока я не остановлю процесс.
Вопрос: Почему? Как сделать так, чтобы можно было запускать приложение в jar файле как в варианте 2b?

Причем во всех случаях класс хендлер найден - я пробовал в обоих случаях удалять его (из папки и из jar файла). И в обоих случаях с ним все работает, без него - class def not found. Но с джар файлом хендлер не срабатывает: он конструируется, что было видно по распечатке в консоль, но метод run внутреннего класса worker не срабатывает.

ps В untitled и untitled.jar в корне лежат bla.class, HttpProtocolHandler.class, HttpProtocolHandler$Worker.class и META-INF, в которой манифест:
Manifest-Version: 1.0
Class-Path: jar/backport-util-concurrent.jar jar/CacheDB.jar jar/commo
 ns-logging.jar jar/joda-time.jar jar/log4j-1.2.15.jar jar/mina.jar ja
 r/mysqlconnectorj.jar jar/nlog.jar jar/proxool.jar jar/quartz.jar jar
 /slf4j-jcl.jar jar/ta-lib.jar jar/tl-netty2.jar jar/xFunction.jar
Created-By: IntelliJ IDEA
Main-Class: bla


PM MAIL   Вверх
le_chat
Дата 14.1.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 26.10.2006

Репутация: нет
Всего: нет



Добрый день.

Точный ответ я дать вряд ли смогу - с mina'й не работал. Но могу предположить что она чего-то не находит. При получении запроса внутри мины происходит эксцепшен, который она глотает и дело
до обработчика даже не доходит - но это легко проверить smile и у нее наверняка есть какой нить логгер
вроде log4j - если его прикрутить то будет проще.

Такое может быть, например, из-за того что один .jar (внешнюю библиотеку) поместили в другой jar, а используемый ClassLoader из джара грузить не умеет.. ну или пути относительные и запуск идет из неправильной директории.

по поводу варианта 2b - насколько помню при этом варианте все библиотеки должны прописываться 
в манифесте запускаемого джара, указаный classpath jvm проигнорирует. 
это одна из причин, по которой чаще используют вариат 2a.
собственно говоря чем...
PM MAIL   Вверх
apogif
Дата 14.1.2008, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



Путем многочисленных извращений таки разобрался с проблемой. Ниже - описание.

log4j был в проекте, это log4j-1.2.15.jar
Уже не помню точно, что и где работало и не работало по пути дальнейшего выяснения траблы, но решилось все следующим образом.

Нужно было либо переименовать log4j-1.2.15.jar в log4j.jar (например).
Либо, к моему полному удивлению, связать проект (в манифесте то бишь) не с файлом "log4j-1.2.15.jar", а с файлом "og4j-1.2.15.jar", а сам файл не переименовывать... Я несколько раз проверил, добавлял и удалял символ 'l' и в получаемом jar, соответственно, то работал хендлер, то нет.
Почему нельзя назвать файл "log4j-1.2.15.jar" - не знаю, видимо ответ кроется  в референсе по джарам, в кой-нибудь конвенции по именованию, что ли.

И все же я не понимаю, почему если это влияет на работу хендлера, то логгер все равно работал - ведь при запуске сервера даже если хендлер молчал, сообщения "listening" выдавались... Дело в том, что указанный мной код - это сокращеная версия исходного проекта, в котором обнаружилась трабла, а исправлена она была в исходном проекте. Если еще раз проверю на указанной сокращенной версии - напишу сюда. Потому как результат странный, может кому пригодится smile
PM MAIL   Вверх
le_chat
Дата 14.1.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 26.10.2006

Репутация: нет
Всего: нет



сори, логгера не заметил.. выглядит немного странно, 
могу я попросить провести такой эксперемент - папку jar, в которой как я понял лежат
либы переименовать во что нить другое - например в lib и попробовать поработать с этим?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.