`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Андрей Зубинский

А ведь уже Java 7 EE, пока вы тут...

+99
голосов

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

Медленно, но верно, явилась нам платформа Java EE 7. Буквально на днях. И раз никто упорно не пишет об этом, то я вот попробую.

Итак, Java EE 7, или, ласково, - седьмая жаба ииии-ииии :) (звуки "ииии"  должны напоминать писк мышки перед величием действительно больших технологий).

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

И вот со вчера, стало быть, воюю с ней. Точнее, с open source реализацией её, с GlassFish 4.0 и новой NetBeans. По мере своего разумения и возможностей, я же не профессионально практикующий программист, так что если что не так будет - извините.

Тут, наверное, надо немного сказать тем, кто "не в теме". Даже программистам, кстати. Даже им, - в первую очередь. Хоть это и относится вовсе не к Java EE, а всё больше - к Java SE, но я пока делаю отступление, так что я не о том.

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

после 30-ти дней интенсивной разработки...

Программисты? Аууу? После 30-ти дней интенсивной разработки человек "выкатывает" альфа-версию офисного пакета - кросс-платформенного, состоящего из четырёх фундаментальных приложений (текстовый процессор, электронные таблицы, презентации и пользовательская СУБД с интерфейсами ко всему, скромный аналог Microsoft Access). 

Для усиления эффекта ещё раз повторю - за 30 дней (!) один человек (!) написал фактически работающий "костяк" того, без чего ни одна пользовательская платформа не считается сколь-нибудь пригодной к называнию её "пользовательской платформой". Причём, "костяк", совместимый по форматам данных с законодателем мод в сегменте офисных пакетов - с Microsoft, конечно же.

Кстати, приложения пакета весьма пристойной выглядят (что может удивить многих - по классике Swing, набор виджетов графического интерфейса Java, весьма, так сказать, каноничен).

Да что я распыляюсь - скачайте и попробуйте, оно даже работает, и не так часто страдает "падучей", как могло бы быть.

Я это к тому, что в среде "продвинутых программистов" стало модно считать Java этакой инкарнацией Cobol в 2010-х годах - дескать, сделать на ней ничего внятного нельзя, а всё, что можно, - хорошо оплачиваемыми бурлаками волочить когда-то написанный legacy-код, то ли дело - Haskell, например, или Scala, вот где экзистенция... И вот очень хочется мне увидеть Haskell-программиста, за 30 дней создавшего что-то подобное. Или Scala-программиста, кстати.

Покажите мне его. Поднимите мне веки ©

Не покажете. Потому что, понимаете, да, скучный инструмент инженерии - он не такой вычурный, как экспериментальные приборы. Да, им забивают гвозди, закручивают гайки и скрепляют компоненты. Вы на этом всём ужасно скучном ездите, вообще-то, живёте в нём и по нему, невыносимо скучному,  вам подводится электричество, газ, вода, и от вас отводятся продукты жизнедеятельности и программирования :)

Так что, господа программисты (не погроммисты, только не они!), - не списывайте Java в утиль. И никого не слушайте. Haskell - это, конечно, чертовски интересно, и любой настоящий до психоза профессионал должен в это погрузиться. Экспириенс такой профессиональный. Кастанеда и Haskell. Но. Перефразируя прозорливого (в смысле специфики нашего рынка квалифицированной рабочей силы) Паниковского, - "Java ещё вас всех продаст, купит и снова продаст, но уже дороже".

(Вообще, как никто ещё не додумался в странах, где основа IT-бизнесов - аутсорсинг, до такого простого слогана? Скорблю. Можете использовать, дарю)

Ну а теперь, собственно, Java EE 7.

Что мне лично очень понравилось и что смог ухватить сразу - красивый механизм конвертации POJO в как бы это лучше сказать, - в обработчики WebSocket.

Для тех, кто далёк от Java и прочего - не пугайтесь и не убегайте. Всё, что  будет дальше, вам хоть и не поможет, но и не повредит.

POJO -  чудовищная аббревиатура, да, побочный продукт бурной деятельности программистов, которые сначала выдумывают дикой сложности конструкции, потом уходят в отпуск, и, возвратившись загорелыми, насмерть пугаются сделанного (для любопытных история даже сохранила имена авторов аббревиатуры, кстати). От чего в ужасе возвращают всё к самому простому, но обиду затаивают. И для компенсации выдумывают страшную аббревиатуру, которой самое простое и обзывают. Чтобы никто не догадался. Plain Old Java Object (POJO) - старый добрый заурядный объект, какой бы объектный язык вы не учили, в нём такие объекты непременно есть - они являются овеществлением просто грамотно спроектированного класса. Любого. В идеале, у POJO должен обязательно быть конструктор без параметров (у любого грамотно спроектированного класса такой должен быть, я считаю) и две стайки методов, как я их называю, собачек - потому что в одной стайке - всё сеттеры, а во второй - таинственной породы геттеры :) Эти  собачки - просто методы (функции-члены) доступа к закрытым полям данных объекта. Они охраняют нежные  внутренности тельца объекта от немытых грязных ручищ погроммистов, которые по недосмотру властей и в связи с кризисом карательной психиатрии объект могут использовать. А вот такой идеальный POJO (с некоторыми мелкими нюансами, не касающимися сути) в Java называют NetBean - это чтобы было совсем непонятно непосвящённым.  

Так вот, в Java EE 7 самые заурядные объекты, без какой-либо модификации кода, только с помощью механизма аннотаций Java, превращаются в обработчики протокола WebSocket, - того самого главного счастья, без которого немыслим весь этот прекрасный вебдванольный интернет с его манящей возможностью быстро слепить на коленке что-то остро социальное и ужжасно популярное, продать его за Много Денег Глупому Капиталисту и потом Вообще Ничего Не Делать И Жить Богато :)

Теперь, раз уж опять непонятные слова, - механизм аннотаций. К сожалению, на невиртуализированной языковой платформе, у которой "внизу" нет мощной крайне гибкой виртуальной машины, такой механизм даже по идее не доступен. Ко второму сожалению, механизм аннотаций так заумно объясняется (посредством метаданных, которые есть данные о данных, и потому сами требуют пояснения, а дальше почти рекурсивно, до полного непонимания), что я уже не могу бросить смельчака, дочитавшего до этого момента, на амбразуру википедии. Воспользуюсь здесь уместной и допустимой аналогией - есть такая группа языков, Lisp-подобных, в которых программа в исходных текстах самая является и данными. Потому что состоит из множества фактически одного типа данных - из списков. А уж интерпретатор (или компилятор) этого всего дела на основании некоторых условностей принимает решение - что из списка на входе является именем функции, например, а что - параметрами. Это существенно облегчает разработку интерперетатора и даёт программисту возможность на одинаковом уровне и писать код программы, и обрабатывать его же таким же кодом, считая данными. То есть, не надо погружаться в дебри машинных команд, например, - весь код, который написан человеком, может быть человеком же и обработан с помощью написанного им же кода. Ужасно звучит. На деле - очень гибкий механизм, даже изысканный, и позволяет писать совершенно замечательные программы, которые никто не может прочесть :)  Механизм аннотаций Java - это как бы добавление главной идеи Lisp (код на уровне исходного текста - это данные) к очень строгому и консервативному объектно-ориентированному языку. Без задействования сугубо языковых средств. И с автоматической (не всегда, конечно, но для кем-то, в данном случае - Oracle, - сделанных аннотаций, - всегда)  генерацией нужного кода, реализующего дополняющую семантику аннотаций.

Теперь соберём всё в кучку.

Вот, например, шаблон для материализации POJO одного очень серьёзного секретного класса BlahBlahBlah:

public class BlahBlahBlah {

     ....

    public void verySeriousMethod01() {...} ;

    public void verySeriousMethod02() {...} ;

    public void verySeriousMethod03() {...} ;

}

У объектов этого класса - 3 метода. Очень серьёзных. И вот мы пишем этот класс, и мучаем его как хотим. Как нам нравится. Тестируем, например, до изнеможения. Локально.

А потом, когда мы убедились, что класс - действительно очень серьёзный, добавляем аннотации:

@ServerEndpoint("унифицированный_идентификатор_ресурса_ сокета")

public class BlahBlahBlah {

     ....

    @OnMessage   

    public void verySeriousMethod01() {...} ;

    @OnOpen

    public void verySeriousMethod02() {...} ;

    @OnClose

    public void verySeriousMethod03() {...} ;

}

И наш класс превращается в кальку для содания POJO, которые асинхронно реагируют на протокол WebSocket. Всё. Точка. Больше - ничего. Ни одной модификации кода совершенно обычного класса.

Это называется аннотируемыми ммм, даже не знаю как бы красиво перевести, я бы назвал "аннотируемыми адаптерами", в оригинальной документации - annotated endpoints (раздел 18.4 руководства), каюсь, сразу именно туда полез копошиться, потому как очень уж милый, полностью разгружающий программиста механизм, насколько понимаю, - ожидавшийся многими.

Естественно, есть и более мощный механизм, основанный на наследовании класса Endpoint.

Ещё из нового, радующего в HTML5-вебдванолье, конечно же, - работа с JSON. Де-факто стандартный формат, всё-таки, для превращения структурированных данных в последовательность грубо говоря байтов (сериализация) и для восстанолвения из этой последовательности исходной структуры (десериализация). Мне лично нравится, как всё это реализовано (раздел 19 руководства). В детали вдаваться не буду, потому что там всё очень внятно и даже по меркам Java изящно.

Ну и, конечно, Facelets - декларативный язык описания шаблонов  пользовательских "морд" web-приложений, теперь "понимает" разметку HTML5. Без этого - никак. Время такое потому что.

Это, кажется, самое главное из нового.

Есть ещё два новых пункта.

Разработанный в IBM механизм пакетных заданий для всяких "тяжёлых" что в вычислительном смысле, что в объёмах данных, приложений, подозрительно похожий на реализацию модной map-reduce архитектуры (которая, на деле, модификация традиционной "разделяй, властвуй" до "разделяй, властвуй, собирай").

И, наконец, очень важное и, пожалуй, самое сложное для понимания нововведение - улучшенный и упрощённый API и спрятанные под ним механизмы, совершенствующие работу с потоками на уровне компонентов Java EE. Это требует отдельного очень серьёзного изучения, я ещё не добрался, да и времени оно отнимет кучу, чувствую. Но на уровне обзора, мягко сказать, - достаточно упомянуть что Concurrency Utilities for Java EE 1.0 - это очень важно, возможно, даже более важно, чем всё остальное.

 

Ффух.

Теперь в качестве компенсации надо что-нибудь забавное или хотя бы приземлённо полезное.

Ах, ну да. Так как копошение с Java EE требует некоторых мелких полезных штучек, то вот, например, очень милая вещь, нужная, правда, далеко не всем - Tincr. Подозреваю, что web-программисты, кто её не знал, скажут спасибо её автору.

Ну и, конечно. Если кто пользуется браузером Chrome и любит как я открывать стопетьдесяттысячмиллионов окон - очень советую Tabs Outliner, прекрасное расширение, и оно ещё "помнит" всю историю аварийно закрытых сессий. Огромное спасибо, Владислав Воловик (кажется так правильно, Vladislav Volovyk), за отличную разработку.

А ведь уже Java 7 EE, пока вы тут...

 

Ну, теперь можно и откланяться.

+99
голосов

Напечатать Отправить другу

Читайте также

Не перевелась талантами земля русская. Вот http://code.google.com/p/elalang/ что парень из России делает в одиночку...

Автор, почитайте про .NET Framework - восторга от его возможностей будет еще больше.
А насчет "офиса" - я видел подобные проекты написанные на Delphi 7 примерно за такие же сроки еще много лет назад.

спасибо, непременно воспользуюсь вашим полезнейшим советом, даже и не знаю как вас благодарить, а то, понимаете, вы мне просто открыли глаза - действительно, такая прелесть, как же ж это я... дожил до 2013-го года и первый раз о таком от вас услышал.

ещё раз спасибо.
восхищён вашим советом.

буду учиться и учиться, настоящим образом, как завещал Ленин, да.

...интересно было-бы про жабку почирикать, а Вас на хабре нет почитать???

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT