Имеет ли значение, с помощью какого поставщика JDK вы строите?

Если я выполняю развертывание на серверах с WebSphere 6.1 (Java 1.5), должен ли я использовать JDK IBM в своем блоке сборки? Или Sun JDK будет компилироваться в тот же двоичный файл?

Если я должен использовать IBM, где я могу получить версию Windows x64?


person Mike Schall    schedule 22.09.2008    source источник


Ответы (8)


Я бы постарался максимально приблизить разработку к производству. JDK от IBM и Sun, безусловно, удовлетворяют сертификации SDK, но они ни в коем случае не идентичны. Их инструментарий и управление памятью, по крайней мере, немного отличаются. По крайней мере, ошибки в JDK будут другими, и ваш код может споткнуться только в одном сценарии по сравнению с другим. Это также, вероятно, произойдет только в 4 часа утра и при полной луне, особенно когда у вас будет компания.

Я не могу сказать вам, где взять JDK от IBM, но если у вас есть лицензия на websphere в вашей компании, у вас должен быть контакт в IBM, чтобы получить ссылку на этот JDK.

Удачи и всегда старайтесь минимизировать различия, где это возможно.

person Nathan Feger    schedule 22.09.2008

Это не должно иметь никакого значения. Вероятно, это будет не совсем тот же двоичный файл, но совместимый на 100%. Я предполагаю, что вы в любом случае используете внешние библиотеки, такие как log4j или, может быть, спящий режим или что-то еще, и они не созданы с использованием IBM JDK.

Однако в JRE есть различия. Например, я помню, что когда я перечислял методы или поля класса с помощью отражения, IBM JRE давала их мне в другом порядке, чем в Sun.

person entzik    schedule 22.09.2008

Я бы использовал тот же JDK для сборки, который будет использоваться при развертывании приложения (если у вас есть контроль над этим).

Двоичные файлы могут быть разными, если компилятор другой, но они должны быть семантически идентичными. Я не знаю, написала ли IBM свой собственный компилятор. JRockit JDK на самом деле использует компилятор Sun, но JVM отличаются. Так что с JRockit бинарники идентичны.

Если приложение используется с разными JDK во время выполнения, я бы все равно построил с тем, который, по вашему мнению, будет использоваться во время развертывания большую часть времени, и провел некоторое тестирование во время выполнения с разными JDK.

person David G    schedule 22.09.2008

IBM JDK поставляется с виртуальной машиной J9, а SUN JDK работает на виртуальной машине Hotspot, которая имеет разные алгоритмы работы. Ваше приложение может не работать так же, если вы развернете и настроите SUN JDK, а ваше производство использует IBM JDK для WAS. Свяжитесь с продавцами и откройте тикет, дайте нам знать, как все идет.

person jkat    schedule 25.10.2011

Компиляция с помощью любого JDK не должна вызывать проблем, если только вы не ссылаетесь на классы вне пакетов java.* и javax.* (чего быть не должно). Конечно, всегда есть вероятность несоответствия между JDK данного поставщика и spec, которые могут вызвать некоторые действительно странные ошибки во время выполнения, которые трудно отследить, но я никогда раньше не видел этого в своем опыте.

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

person Mike Deck    schedule 22.09.2008

JDK компилируют ваш код в байт-код, а не напрямую в машинный код. Ожидается, что компиляторы разных производителей будут генерировать кросс-вендорный совместимый код. Например, компилятор IBM для JDK1.5 создаст код, который работает на JDK 1.5 и более поздних версиях SUN без каких-либо проблем.

Другой вопрос, как компиляторы оптимизируют байт-код, у меня нет информации, что некоторые компиляторы выполняют оптимизацию лучше, чем другие. Большая часть оптимизации выполняется JVM во время выполнения (например, стратегии JIT (точно в срок) или AOT (с опережением времени)).

person Andreas Bakurov    schedule 22.09.2008

Поскольку мы долгое время работали с WebSphere, версия JDK очень важна. WebSphere 6.1 поставляется с IBM JDK 1.5 (или это 5). Когда вы устанавливаете патчи для WebSphere, для JDK также существуют эквивалентные патчи. Хотя это может работать с другой версией JDK (даже от другого поставщика), я сомневаюсь, что вы получите большую поддержку от IBM, если что-то пойдет не так.

Если вам нужна 64-битная JVM, я бы предположил, что, вероятно, существует 64-битная сборка, хотя я не могу конкретно комментировать окна, но могу сказать вам, что существует 64-битная сборка WebSphere 6.1 как для AIX, так и для Linux.

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

person mransley    schedule 26.09.2008

Они должны компилироваться в соответствии с одной и той же спецификацией байт-кода, хотя они могут компилировать разные байт-коды (так же, как разные компиляторы C генерируют разные машинные коды). Я не думаю, что возникнут проблемы с запуском полученного кода - я скомпилировал Java 1.4 на Mac, а затем без проблем развернул его на IBM J9, работающем на PocketPC (это было до того, как J9 мог обрабатывать байт-код Java 5) .

Несмотря на это, я бы определенно сделал вашу платформу компиляции маркером в вашем файле readme, чтобы ваш клиент мог видеть, является ли это проблемой.

В качестве альтернативы вы можете создавать и развертывать с помощью ANT и использовать Sun JDK с ANT.

person JeeBee    schedule 22.09.2008