Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Help! Java + WinServer 2008 = какая-то хрень / 10 сообщений из 10, страница 1 из 1
10.10.2012, 14:14:06
    #37991714
Shut_down
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
Создаем библиотеку MyLib в ней пакет Pack1 и в нем класс Class1 с методом static public void func1() . Дале создаем SE-проект MyApp (наследуем от JFrame) в нем вызываем Pack1.Class1.func1(). Все просто. Под XP все работает. Под WS2008 все тоже работает.

НО!

Добавляем в Class1 метод func2(), вызываем из MyApp и под WS2008 получаем NoSuchMethodError (под XP по прежнему все хорошо)!

Первая мысль - библиотека старая => добавляем в MyLib класс Class2 с переменной ver = номеру версии и метод getVer(), который будет ее возвращать (я знаю что это можно реализовать через manifest, но в данной ситуации этого было вполне достаточно). В MyApp проверяем версию библиотеки - все нормально (собственно само наличие Class2 уже говорит, что это новая). Ошибка по прежнему есть.

Очень удивляемся.

Методом научного тыка выясняем, что для решения нужно: либо переименовать класс Class1, либо перенести его в другой пакет, либо перенести метод func2() из класса Class1 в любой другой класс. По сути надо избавиться от строки : Pack1.Class1.func2() ;

Еще раз удивляемся.

Переименовываем Class1 в ClassХХХ => все работает.

В MyApp создаем окошко, в котором с помощью рефлексии выводим информацию о загруженных классах.

И что же мы видим под WS2008 (под XP все хорошо) ? Оказывается у нас сейчас есть Class1 (который мы переименовали) с методом func1() и БЕЗ метода func2() и класс ClassXXX с обоими методами!!!



Вопрос: что за фигня и как с ней бороться?!!



ЗЫ использовалось:

Java 1.7.0_07 32-бит
WS2008 SR2

разрабатывалось под
WinXP SR3
NetBeans 7.1.1
Java 1.7.0_07

ЗЫЫ было предположение, что JVM как-то кэширует - удаление кэша не помогло, удаление + перезагрузка - не помогло. Удаление 32-бит JVM и замена на 64-бит - не помогло.
...
Рейтинг: 0 / 0
10.10.2012, 14:23:29
    #37991733
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
используйте Class.getProtectionDomain().getCodeSource().getLocation() чтобы увидеть откуда ваши классы были загружены.
Версия Windows здесь, скорее всего, не при чем. Проблема в том как компилируется и запускается приложение.
...
Рейтинг: 0 / 0
10.10.2012, 14:26:47
    #37991739
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
Так как вы запускаете всё из NetBeans, то возможно это в нём какая-то бага.
В одном случае он распознал что класс был изменен и перекомпилировал его.
Во втором случае он не компилировал класс с новым методом а использовал тот что скомпилировал ранее.
Когда вы создали новый класс ClassXXX, NetBeans без проблем распознал что его надо скомпилировать.
Запустите "форсированую" перекомпиляцию всего и ошибка уйдёт.
...
Рейтинг: 0 / 0
10.10.2012, 14:50:04
    #37991790
Shut_down
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
Спасибо помощь и, отдельное, за Location() я подумал о чем-то подобном, но раньше ни когда не делал, а быстро нарыть не получилось.

По поводу NetBeans я подумал о таком раскладе и запускал приложение как из среды так и как отдельный jar-файл.

Проблему я решил, но вопрос остался!!!!

Собственно что оказалось: когда я описывал проблему я ее упростил. На самом деле у меня кроме моей библиотеки подключались библиотеки из LibraOffice 3.6 (java_uno.jar, juh.jar, jurt.jar, ridl.jar, unoil.jar, unoloader.jar) + библиотека MySQL. Так вот Location показал, что мои "старые" классы каким-то образом под Ws2008 попадают в библиотеку LibraOffice java_uno.jar. Заменил jar-файл - все заработало.

Но Холмс - КАК?!!!
...
Рейтинг: 0 / 0
10.10.2012, 14:53:53
    #37991801
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
Shut_downНо Холмс - КАК?!!!
Предлагаете угать процесс сборки и деплоймента проекта?
...
Рейтинг: 0 / 0
10.10.2012, 15:02:01
    #37991822
Shut_down
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
BlazkowiczShut_downНо Холмс - КАК?!!!
Предлагаете угать процесс сборки и деплоймента проекта?

Честно говоря не понял, что Вы имели ввиду под "сборкой" если компиляция в NetBeans, то с ней я думаю все в порядке т.к. изначально (при первом запуске) он работает. "Деплоймент" я тоже не понял - я тупо копирую файлы и запускаю командой "диск:\путь\java.exe -jar MyApp.jar".

Во всем этом меня интересует КАК (и зачем?) класс из моей библиотеки без моего ведома перекочевал в библиотеку LibraOffice java_uno.jar ?!
...
Рейтинг: 0 / 0
10.10.2012, 15:06:00
    #37991831
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
Shut_downВо всем этом меня интересует КАК (и зачем?) класс из моей библиотеки без моего ведома перекочевал в библиотеку LibraOffice java_uno.jar ?!
Возможно, что при работе с OpenOffice SDK, используются какие-то его собственные загрузчики
http://www.openoffice.org/api/docs/java/ref/com/sun/star/lib/unoloader/UnoClassLoader.html
которые добавляют ваши классы в ClassLoader, но при этом не верно указывают на java_uno.jar. Вы этот jar разворачивали, проверяли что класс физически там находится?
...
Рейтинг: 0 / 0
10.10.2012, 15:33:55
    #37991915
Shut_down
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
Blazkowicz Вы этот jar разворачивали, проверяли что класс физически там находится?

Честно говоря даже в голову не пришло. Посмотрел через Location. Посмотрел - размер библиотеки на Ws2008 отличался от размера библиотеки у меня. Поменял библиотеку LibraOffic'a. Все заработало.
...
Рейтинг: 0 / 0
10.10.2012, 15:38:00
    #37991929
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
Shut_downЧестно говоря даже в голову не пришло. Посмотрел через Location. Посмотрел - размер библиотеки на Ws2008 отличался от размера библиотеки у меня. Поменял библиотеку LibraOffic'a. Все заработало.
Возможно платформа LibreOffice и добавляет туда ваши классы. ХЗ что вы там вообще пишете. Дополнение может какое под офис?
...
Рейтинг: 0 / 0
10.10.2012, 17:07:42
    #37992163
Shut_down
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Help! Java + WinServer 2008 = какая-то хрень
BlazkowiczВозможно платформа LibreOffice и добавляет туда ваши классы. ХЗ что вы там вообще пишете. Дополнение может какое под офис?

Вроде ни чего криминального не пишу. Обычное приложение - работа с БД + вывод информации в OpenOffice..
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Help! Java + WinServer 2008 = какая-то хрень / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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