![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| apogif |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.1.2008 Репутация: нет Всего: нет |
Есть приложение 'untitled': один main класс 'bla' и класс-хендлер запросов
мейн класс выглядит так:
Хендлер выглядит вот так: 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 |
|||
|
||||
| le_chat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
Добрый день.
Точный ответ я дать вряд ли смогу - с mina'й не работал. Но могу предположить что она чего-то не находит. При получении запроса внутри мины происходит эксцепшен, который она глотает и дело до обработчика даже не доходит - но это легко проверить вроде log4j - если его прикрутить то будет проще. Такое может быть, например, из-за того что один .jar (внешнюю библиотеку) поместили в другой jar, а используемый ClassLoader из джара грузить не умеет.. ну или пути относительные и запуск идет из неправильной директории. по поводу варианта 2b - насколько помню при этом варианте все библиотеки должны прописываться в манифесте запускаемого джара, указаный classpath jvm проигнорирует. это одна из причин, по которой чаще используют вариат 2a. собственно говоря чем... |
|||
|
||||
| apogif |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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" выдавались... Дело в том, что указанный мной код - это сокращеная версия исходного проекта, в котором обнаружилась трабла, а исправлена она была в исходном проекте. Если еще раз проверю на указанной сокращенной версии - напишу сюда. Потому как результат странный, может кому пригодится |
|||
|
||||
| le_chat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
сори, логгера не заметил.. выглядит немного странно,
могу я попросить провести такой эксперемент - папку jar, в которой как я понял лежат либы переименовать во что нить другое - например в lib и попробовать поработать с этим? |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |