Среда выполнения Java 5 в точке доступа Java 6

Есть ли способ запустить точку доступа Java 6 в среде выполнения Java 5? У меня есть код, который зависит от поведения более старых реализаций классов, но я бы хотел использовать более новую JVM. У меня есть планы перенести код на Java 6 (или, может быть, 7!), Но сейчас меня больше беспокоит, есть ли у меня проблема с JVM.


person David Ehrmann    schedule 01.03.2012    source источник
comment
Любопытно узнать, от каких старых реализаций вы зависите.   -  person Miserable Variable    schedule 01.03.2012
comment
Что ж, я надеюсь, что он не полагается на способность Java 5 кодировать символы NUL (EOF) в строки. Это вызывает бесконечное веселье (когда ваш драйвер БД не работает); Отладка eclipse покажет все символы до NUL, но если вы развернете, остальная часть String будет там. Вы можете редактировать / перебирать все символы в Java, но как только вы попытаетесь передать его где-нибудь еще ... угадайте, что?   -  person Stephen    schedule 01.03.2012
comment
Sun использовала Xalan (с некоторыми изменениями) в качестве своей реализации XSLT. Одно из 5 обновлений включало обновленный Xalan с ошибкой, из-за которой мои таблицы стилей не компилировались. Теперь, когда я подумал об этом, может быть, мне просто пересобрать rt.jar со старой версией Xalan и добавить его в каталог расширений.   -  person David Ehrmann    schedule 01.03.2012
comment
Вы нашли именно эту ошибку? Вы можете изолировать, какие классы вовлечены в эту ошибку, перекомпилировать их после ее исправления (декомпилировать или получить нужную версию с официального сайта) и, наконец, вставить эти обновленные .class (ы) в rt.jar (переопределив предыдущие).   -  person Jerome    schedule 01.03.2012
comment
Это где-то рядом с com.sun.org.apache.xalan.internal, но предполагается, что Xalan работает в паре с совместимой версией Xerces. Я мог бы пересобрать rt.jar, но extdir кажется более элегантным.   -  person David Ehrmann    schedule 01.03.2012


Ответы (3)


Я думаю, вам лучше выбрать одно из следующего:

  • Выясните, можете ли вы изменить код своего приложения, чтобы обойти ошибку XSLT в Java 6.

  • Узнайте, существует ли поддерживаемый Sun / Oracle патч для ошибки XSLT на Java 6.

  • Используйте Java 5 JRE.

  • Попробуйте установить последнюю версию Java 6 JRE, чтобы увидеть, исправлена ​​ли там ошибка XSLT.

  • Попробуйте установить последнюю версию Java 7 JRE, чтобы увидеть, исправлена ​​ли там ошибка XSLT.

Проблема с использованием Java 5 rt.jar на Java 6 JVM заключается в том, что существуют скрытые зависимости между базовыми классами в rt.jar и реализацией собственного кода JVM; т.е. java двоичные и связанные с ними собственные библиотеки. Они не задокументированы, и весьма вероятно (IMO), что некоторые из них изменились между Java 5 и Java 6.


Если между ними есть встроенная несовместимость, похоже, что мне осталось взять определенные классы, которые мне нужны, и либо заменить их в rt.jar, либо переопределить их с помощью extdir.

Взламывать Java подобным образом - не лучшая идея. Как минимум, вам придется повторять взлом каждый раз, когда вы загружаете и устанавливаете последнюю версию Java 6 JRE на платформе вашего приложения. (И если вы поставляете это приложение другим, то у ОНИ тоже есть проблема.)

И в моем оригинале все еще есть 2 альтернативы, которые вы могли бы использовать вместо этого: исправить приложение, чтобы решить проблему, и остаться с Java 5.


Ошибка существует в XSLT Java 7 и в последней версии Xalan.

Вы рассматривали возможность того, что это вообще не ошибка? Возможно, это исправление предыдущей ошибки или допустимое поведение в рамках соответствующих спецификаций, и ваш код виноват в зависимости от предыдущего (ошибочного?) Поведения.

Есть ли в базах данных ошибок Java / Xalan отчеты об этой ошибке? Что говорят сопровождающие? Предлагают ли они обходные пути? (Эти вопросы НЕОБХОДИМО задать ...)

person Stephen C    schedule 01.03.2012
comment
Ошибка существует в XSLT и Java 7 в последней версии Xalan. - person David Ehrmann; 01.03.2012
comment
Если между ними есть встроенная несовместимость, похоже, что мне осталось взять определенные классы, которые мне нужны, и либо заменить их в rt.jar, либо переопределить их с помощью extdir. - person David Ehrmann; 01.03.2012
comment
Я задокументировал это здесь (комментарий февраля 2012 г.): issues.apache.org/jira/browse/ XALANJ-2430 - person David Ehrmann; 02.03.2012

Он в основном обратно совместим, мы только что перенесли некоторый код 1.4.x в 1.6 (с перекомпиляцией и без, следовательно, двоичный и исходный), и это сработало.

Я предлагаю вам взглянуть на каждую крупную версию java-версии, поскольку всегда есть некоторые несовместимости. Посмотрите на совместимость Java 1.6 с 1.5, и если вы переносят некоторые старые версии исходного кода / двоичного кода, проверьте страницу всех основных версий java, чтобы узнать, не столкнулись ли вы с несовместимостью.

Изменить: в своем вопросе вы написали, что хотите, чтобы Hotspot 1.6 (JVM) работал с JRE 1.5? Вы знаете, что JRE включает JVM, уверены ли вы в том, о чем только что спросили?

person Jerome    schedule 01.03.2012
comment
Я думаю, что OP знает, как работает JVM, и не спрашивает о совместимости источника / API. Я понял вопрос, как желание сделать что-то вроде замены rt.jar в установке 1.6 на одну из 1.5 установки. - person millimoose; 01.03.2012
comment
@Inerdial О, это звучит не очень безопасно. Я надеюсь, что нет. Фактически в совместимость Java 1.6 с 1.5 (пункт 8) они заявляют: Java-приложения, которые указывают -Xbootclasspath: ‹путь к rt.jar› и запрашивают любые файлы ресурсов, потерпят неудачу, поскольку эти ресурсы теперь находятся в другом файле jar с именем resources.jar. - person Jerome; 01.03.2012
comment
Я думаю, что трансплантат предназначен для того, чтобы пойти другим путем, чем то, что означает эта документация. - person millimoose; 01.03.2012

Я не уверен, правильно ли я понял ваш вопрос, но если вы скомпилировали свой код с помощью компилятора java 5, то да, вы можете запустить его на виртуальной машине java 6 без проблем.

person pdeva    schedule 01.03.2012
comment
Я пытаюсь запустить свой код Java 5 с помощью Sun Java 5 runtime с версией Hotspot для Java 6. - person David Ehrmann; 01.03.2012
comment
хм не уверен, возможно ли это вообще. Насколько мне известно, точка доступа не распространяется как отдельная библиотека. это часть jvm - person pdeva; 01.03.2012