у меня есть серверно-клиентское приложение, работающее на java 1.3; Я хочу перейти на java 1.6 шаг за шагом, то есть сначала несколько клиентов, чем остальные клиенты и, наконец, сервер ... Мне было интересно, не могли бы вы указать мне на некоторые общие проблемы, которые могут возникнуть, и о чем мне следует позаботиться?




Сверху я ищу имена enum и assert в полях и локальных переменных ... Эти слова стали ключевыми словами в java 1.4 и 5. Компилятор java 6 пометит их как ошибки компиляции, если увидит их.
Юваль = 8-)
Sun пытается поддерживать высокий уровень обратной совместимости, поэтому вы можете просто установить новую JVM и перезапустить с ней свое приложение.
Документ, описывающий обратную несовместимость Java 1.6 с более ранней версией, называется здесь. Этот документ также связывает документы совместимости для Java 1.5 и Java 1.4. Вероятно, вы захотите прочитать этот документ, чтобы узнать о возможных подводных камнях.
Java 1.5 и Java 1.6 представили новые форматы файлов классов. JVM также будет запускать старые файлы классов, но перекомпиляция вашего кода - особенно с JDK 1.6 - поможет новой JVM воспользоваться некоторыми изменениями, чтобы сделать ваше приложение быстрее. Так что вы можете подумать о перекомпиляции.
Кроме того, были введены некоторые новые ключевые слова, а именно assert (в 1.4) и enum (в 1.5) (как уже упоминал Юваль). Если вы используете эти слова в качестве идентификаторов, перекомпиляция не удастся, но старые файлы классов будут работать. Вы можете предоставить переключатель -source в javac, чтобы он компилировался: «javac -source 1.3» скомпилирует код без утверждать и перечислить в качестве ключевого слова.
Когда я перешел с 1.4.2 на 1.5 в небольшом апплете, над которым я работал, многие вещи сломались: обновление экрана стало неустойчивым, элементы перемещались и т. д.
Sun JRE не поддерживает обратную совместимость для все. Иногда, когда элементы устарели, они полностью исчезают через очень короткий промежуток времени.
Мы писали все на "стоковой" Java, в том числе с использованием библиотек Sun.
Я также видел несколько приложений, написанных на чистой Java, которые нормально работают на одной или двух платформах в одной и той же версии JRE, терпят неудачу на других с этой версией (продукт, с которым я работаю, теперь отлично работает в Windows, хорошо, в Mac OS X, неплохо для Linux, но не работает на Solaris - все с той же JRE).
Перенос версий - непростой шаг, если только приложение не очень маленькое.
Я никогда не слышал об удалении устаревшего метода. Некоторые устаревшие методы из 1.0.x все еще присутствуют в Java 6. Вы можете привести какие-нибудь примеры?
на данный момент, это не сходит с ума - я не касался Java с 1.4.2, но определенно были некоторые проблемы с попыткой использовать вызовы эпохи 1.2 в 1.4.2
Sun ведет список несовместимостей, которые появляются с каждой новой версией Java.
В последнем документе для 1.4.2 есть ссылки на примечания о совместимости с JDK 1.0.
Мой опыт показывает, что совместимость довольно высока. Я нашел только одно приложение, которое мне не удалось запустить в текущей версии. По какой-то причине (без исходного кода, поэтому я не стал вдаваться в подробности) одно приложение не запускалось ни на чем, кроме 1.4.2. Все остальное, с чем я когда-либо имел дело (некоторые из них довольно большие), отлично подошло до 1.6. Никаких модификаций не требуется.
YMMV, конечно, так что вам придется попробовать и посмотреть ...
Как правило, обратная совместимость JVM Sun очень хорошая, но не идеальная. Я видел, как три очень больших приложения мигрировали с 1.3 на 1.5 и столкнулись только с небольшим количеством проблем, самая большая из которых заключалась в том, что одна маска Swing перешла в бесконечный цикл обработки событий и зависла до версии 1.4.
Серверная часть вряд ли вызовет проблемы, но в Swing произошли довольно большие внутренние изменения, особенно между 1.3 и 1.4 - например, была полностью переписана подсистема фокуса.
По-прежнему возможно, что приложение будет работать без проблем, но вам определенно следует провести обширное тестирование.
По моему опыту, проблемы с обновлением экрана между версиями обычно возникают из-за неправильного использования API Swing, работа которых никогда не гарантировалась. Однако, безусловно, есть исключения из этого опыта. :)