Пользователь
0,0
рейтинг
16 августа 2010 в 12:39

Разработка → Став хозяином Java, Oracle невольно сломал Eclipse перевод

В этом месяце (пост от 28 июля — прим. пер.), компания Oracle выпустила новую версия Java, 1.6.0_21 (она же 6u21). К сожалению, пользователями Eclipse было быстро обнаружено, что это версия несовместима с Eclipse и программами Eclipse Rich Client Platform (RCP).

Бага 319514 из эклипсовосой багтрекинг системы cодержала описание этой проблемы с принтскрином шелла, в котором было видно, что Oracle изменили имя компании в параметрах файла java.exe с “Sun Microsystems, Inc” на “Oracle”. Это изменение не вошло в официальный release notes. По иронии судьбы, Eclipse с 2007 был завязан на данный параметр, для решения другой проблемы, связанной с малым значением параметра “MaxPermSize”, устанавливаемого Sun, из-за чего эклипс просто не запускался. А вот когда окружение изменилось, то и этот фикс так же перестал работать, и многие получили проблемы с “PermGen”.

На это Oracle в понедельник ответил обновлением версии 6u21, в которой вернули прежнее значение. Кроме того, было ясно сказано, что в JDK 7 в поле компании будет опять указано “Oracle”. Вот что пишет один из разработчиков:
Одним из этапов ребрендинга всех продуктов Sun’а в продукты Oracle’а, состоял в том что надо было изменить значение параметра Company Name для файла java.exe, что и было сделано в Java SE 6u21.

После того, как новая версия была выложена на сайтеjava.sun.com, мы получили много заявлений о том, что новые изменения повлияли на работу пользователей Eclipse под Windows. Все данные и workaround проблемы были тут же отмечены на сайте Eclipse, но лавинообразное распространение новой версии затрагивало все новых и новых пользователей. Понимая это, а так же учитывая пожелания Eclipse и многих тысяч пользователей Oracle восстановил значения параметра Company Name на “Sun Microsystems”.

Изменения затронули только версия для Windows, в то время как версии для Solaris и Linux работали исправно. Ради того, чтобы этот все заработало и в Windows, был выпущен новый билд, в котором версия была изменена с 6u21-b06 на 6u21-b07. Под Solaris and Linux по-прежнему поставлялся билд 6u21-b06.

Отдел инжиниринга при этом отмечает, что: в Java значения параметром java.vendor и java.vm.vendor не изменятся ни в одном из релизов jdk6 и будут по-прежнему иметь вид “Sun Microsystems, Inc.”. Было выяснено, что имя поставщика критически влияет на работоспособность целого ряда программ. А в Windows проблемой явилось явно указываемое для exe/dll поле “COMPANY”, которое и явилось источником проблемы. Вообще, для нас это стало большим сюрпризом, что кто-то вообще завязывается на подобные параметры. Учитывая это, для релизов jdk6 поле COMPANY было восстановлено. Но в релизах jdk7 произойдет окончательное изменение всех параметров, указывающих на имя компании, в том числе java.vendor и java.vm.vendor.

Этим утром, я убедился, что на официальной странице загрузки выложена версия, работающая с Eclipse. Вот что будет выдано на экран в командной строке при вызове java -version:

C:\> java -version
java version “1.6.0_21″
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)


Если вы скачали Java под 32-х или 64-х версию Windows, убедитесь, что эта версия называется 1.6.0_21-b07, а не b06.
Перевод: Ed Burnette
Андрей Ребров @mythmaker
карма
152,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (70)

  • НЛО прилетело и опубликовало эту надпись здесь
    • +32
      Комент туповат.
      • НЛО прилетело и опубликовало эту надпись здесь
    • +16
      Это не самый большой недостаток для новости, которую уже месяц назад успели обсудить :)
  • НЛО прилетело и опубликовало эту надпись здесь
    • +5
      Как выяснилось не только эклипс. На месте Оракла, я бы ничего не стал менять. Всё равно никто не денется с подводной лодки.

      Правильное решение: выпустить патч, который ставит оптимальное значение `MaxPermSize`. Плюс добавить ключик -defaultParams, который бы возвращал полезную инфу о параметрах, необходимую для запуска
      • +12
        Как выяснилось не только эклипс

        Это никак не оправдывает Eclipse. К Oracle странно иметь претензии, ребрендинг вполне логичен.
        • +3
          Я не оправдываю Эклипс — у него очень много кривых моментов.

          Странно, что Oracle откатил изменения. Я считаю, кривость кода, дошедшую до такой степени, нужно выбивать насильно. Иначе году в 2020 мы получим платформу полную костылей из-за тех, кто эти костыли не хочет чинить у себя.

          • +2
            Так как бы уже. В java охрененная обратная совместимость — со всеми костылями прошлых версий :)
      • –3
        угу, купить Sun за много много зелёных бумажек и не надеть на себя корону? ну ну ))
    • +2
      На какую только хрень не приходится завязываться in the wild :)

      У меня были ситуации, когда для получения какой-нибудь информации приходилось как раз парсить вот такие текстовые описательные поля, как бы глупо это не выглядело — просто иногда нет ничего более доступного.
  • +5
    Мда, каких только костылей не бывает :)
  • НЛО прилетело и опубликовало эту надпись здесь
  • +4
    Завязать код на строку копирайта — это жесть…
    • +24
      Ага, и коммент ещё рядом:
      //not really hardcode, as this will never change!
      • –4
        где это?
        • +1
          Не обращайте внимания, это был юмор, просто читайте дальше
    • 0
      Ага, и коммент ещё рядом:
      // No hardcode in fact, as this will never, ever change!
      • 0
        упс :)
      • +3
        Как говорится «Блажен, кто верует» :)
  • –13
    Это как яркий пример качество кода производимого индусами.
  • –7
    Оракл! Эклипипс мне запили! Быстра блять!
  • 0
    Я думаю, что разработчики, а также многие менеджеры не раз сталкивались с похожими проблемами при ребрендинге компании и, соответственно, кода.
    То в ресурсах такое творится, что потом выкопаться нельзя, то в использовании различного рода сторонних библиотек.
    Думаю, достаточно показательный пример того факта, что при разработке многие думают о масштабировании системы, а достаточно простые вещи упускаются из вида например такое как смена имени, логотипа и других атрибутов.
  • –20
    Оракал это же вроде пленка самоклеющаяся? :)
  • –10
    1. Завязать работоспособность эклипса на имени вендора — это круто и хороший юмор от Sun!
    2. Обращаем внимание, что данная проблема актуальна только под виндой, так что писать метаданные в экзешник — это неверно в плане архитектуры, имхо.
    • +4
      Винда виновата?
      • –12
        Я не против винды, просто приятно смотреть, что бага не затрагивает Unix-подобные системы.
        • +8
          Логика на уровне первого класа: Двери — это зло, ведь ними можно пальцы себе защемить. Вот будет у меня дом — не будет в нем дверей, чтоб никто себе пальцев не защемил.
          • +17


            Uploaded with ImageShack.us
          • –7
            Двери как раз есть. Я имел в виду, что мой Eclipse под линухом не задет заменой Sun на Oracle. Могу я хотя бы тут не восхищаться майкрософтом?
            • +6
              Sun JVM выделяет недостаточно памяти для Eclipse по умолчанию — и здесь майкрософт виноват?
            • 0
              а вы пользуетесь OpenJDK или Sun?
            • 0
              Майкрософт к этой проблеме аж ну никак не причастна, все претензии к разработчикам эклипса
          • НЛО прилетело и опубликовало эту надпись здесь
  • +2
    Мораль — костыли должны быть костылями, а не постоянным решением. Не надо их оставлять в коде навечно. Рефакторинг — наше всё.
  • –6
    Мне становится страшновато… Oracle стал еще большим монстром, возможно даже более влиятельным чем Google. Теперь у Oracle в конкурентах по СУБД только PostgreSQL, и его могут купить тоже.
    • +3
      А как же MS SQL Server и IBM DB2? :)
      • –5
        Я же сказал именно про конкурентов, а не вообще про СУБД =))
        • +3
          Вот как раз MS SQL Server и IBM DB2 и являются конкурентами Oracle. В отличии от.
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Не, не купят, ибо Linux не принадлежит какой-то одной компании.
        • +2
          Спасибо, Кэп!
  • НЛО прилетело и опубликовало эту надпись здесь
  • –1
    Это печально…
  • –1
    Интел, кстати, развлекался в свое время подобными вещами: определенные компиляторы создавали код привязанный к имени процессора, который на процессорах Интела выполнялся быстрее чем на других.
    • +1
      Тут две большие разницы, как говорят в Одессе. Одно дело — Интел, умышленно изменяющая код компилятора, а другое дело — разработчики Eclipse, понадеявшиеся на авось.
      • +7
        Как часто Sun продается Oracle?
        • +1
          Я понимаю, что первый порыв — защищать Eclipse до последнего :)
          Но костыль есть костыль, писавший вышеупомянутый коммент знал об этом, но ничего для исправления костыля за 3 года(!) не сделал. Не сделал и узнав, что Sun таки продалась Oracle.
          Обижаться тут не на что, и оправдываться не стоит. Просто, думаю, пример этот станет хрестоматийным примером о том, как можно облажаться даже в самом серьёзном продукте.
          Качество Eclipse я ни в коей мере не подвергаю сомнению, иначе бы она не была любимым инструментом разработки для огромной армии Java-кодеров.
          • +6
            Я не считаю это костылем, просто другого способа отличить одну JVM от другой не было (а может быть и сейчас нет). Вина в данном случае скорее лежит на разработчиках SUN, не предусмотревших стандартного параметра для изменения размера MaxPermSize. Вероятность же того, что название JVM изменится была крайне невелика, однако иногда происходят и события с крайне малой вероятностью.
            • 0
              Да, простите, не прочитал. Ссылку ниже полностью. Видимо, действительно, вина лежит на разработчиках SUN. Плохо только, что за 3 года проблему так и не решили полноценно(если надо — с привлечением Sun), довольствуясь тем, что есть. Получается «Пока гром не грянет — мужик не перекрестится...».
              • +4
                В том то и дело, что три года проблемы не было, SUN не меняла название своей JVM. Уверен, что если бы Oracle предупредила об изменении метаданных заранее, Eclipse-коммиттеры нашли бы способ решить данную проблемы.

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

                З.Ы. «Проблема» решается на уровне файла конфигурации прописыванием одной строчки.
                • 0
                  >Уверен, что если бы Oracle предупредила об изменении метаданных заранее, Eclipse-коммиттеры нашли бы способ решить данную проблемы.
                  Вот это и есть корень зла :) Хотя наверное правильнее считать, что произошло роковое стечение обстоятельств. К счастью, менее критичное, чем, например, в Чернобыле.
                  • +1
                    Мне вот интересно сколько пользователей Eclipse из-за данной ситуации откажутся от него в пользу другой IDE.
                    • 0
                      ерунда. я первым делом подумал на JRE, а не на среду разработки. сразу скачал свежий JRE и все стало нормально.
                    • 0
                      у меня на 21. Несколько программ глючить начало. Я даже не думал, что в эклипсе и другом софте косяк, пока на javalobby не прочитал.
                    • 0
                      Я вообще пропустил это обновление. Отпуск ^_^
            • 0
              >Я не считаю это костылем, просто другого способа отличить одну JVM от другой не было (а может быть и сейчас нет).

              А как насчет системных property, например, java.vendor? Не могу сказать, менялись ли они в упомянутом апдейте, но по-моему куда более правильно завязываться на стандартные свойства, чем на строку копирайта.
              • 0
                определять вендора надо на этапе работы нативного лаунчера (eclipse.exe в windows)
                • 0
                  Ну и дергали бы метод перед запуском. Не очень эффективно, но надежно. Впрочем, об этом всем написано в посте и баге.
            • 0
              По моему, параметр -XX:MaxPermSize=xxx Появился довольно давно, ну года три точно есть в HotSpot…
              • 0
                В том то и дело, что параметры, начинающиеся на XX: — специфичны для SUN JVM. Соответственно, нужно как-то проверить, что у нас SUN JVM и мы имеем право подсунуть ей этот параметр.
    • 0
      может потому, что компиляторы интел лучше знаю как оптимизировать код под свои процессоры?
      • 0
        Нет. Оптимизатор проверяет имя производителя процессора и оптимизирует код только для интелов.
        www.agner.org/optimize/blog/read.php?i=49
  • +3
    Всем хомякам, воющим про то, что Eclipse во всем виноват два вопроса:
    1. Каким приложением уровня Eclipse можете похвастаться?
    2. Читали ли вы вот это: njbartlett.name/2010/07/29/eclipse-java6u21-blame-game.html
    • 0
      Правильно, сначала добейся
  • +4
    партизаны Sun ликуют )
  • –2
    Ну как всегда, или хрен пополам или манда вдребезги
    Простите, не выдержал(
  • +1
    Какой смысл писать об этой проблеме через несколько недель после того как она была исправлена? Еще и с таким желтым загловком не соответсвующем действительности.
    • –4
      Заголовок взят из оригинала, причем уже изменен, чтобы не искажать реальность.

      Смысл писать о проблеме — у некоторых до сих пор что-то не работает.
    • –1
      а вы на ник топикстартера посмотрите ;)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.