JPA 2: о подготовке к экзамену Oracle
Коллеги, приветствую всех. В данной статье я хочу поделится своим опытом прохождения одной из Oracle сертификаций — Java EE Java Persistence API Developer Certified Expert (1Z0-898).
Oracle предлагает сертификации по многим темам. Среди тех, которые касаются разработки на Java, я бы выделил такой пакет:
1. Java SE 8 Programmer I | 1Z0-808;
2. Java SE 8 Programmer II | 1Z0-809;
3. Java EE 6 Java Persistence API Developer Certified Expert | 1Z0-898;
4. Java EE 6 Web Component Developer Certified Expert | 1Z0-899;
5. Java EE 6 Web Services Developer Certified Expert | 1Z0-897;
6. Java EE 6 JavaServer Faces Developer Certified Expert | 1Z0-896;
7. Java EE 6 Enterprise JavaBeans Developer Certified Expert | 1Z0-895;
8. Java EE 6 Enterprise Architect Certified Master | 1Z0-807.
По моему мнению, такой пакет максимально хорошо очерчивает набор знаний, требуемых для позиции Java разработчика. Конечно, это далеко не все необходимое, а лишь Oracle сертифицируемое подмножество — здесь нет Spring, Hibernate и многих других популярных не-Oracle областей знаний.
Конкретная последовательность сертификаций выбрана мной так же не случайно — экзамены связаны между собой. Удобно и хорошо, когда знания, полученные на одном из них, будут способствовать прохождению последующих сертификаций. Формальных требований или ограничений от Oracle, в какой последовательности нужно/можно проходить данные сертификации, я не обнаружил.
В данный момент я сдал первые три экзамена и готовлюсь к четвертому.
Первые две сертификации уже были описаны тут и тут. Дублировать информацию из них не буду, лишь поблагодарю авторов, статьи мне действительно пригодились.
Стоит обратить внимание на локацию центра сертификации, где вы собираетесь экзаменоваться, так как стоимость экзамена зависит от страны.
Для чего нужна сертификация
Сразу скажу, что вопрос мотивации глубоко субъективный. Я изначально признаю, что могут существовать альтернативные точки зрения, отличные от моей. Однако выделю следующие причины:
— Эффективное самообучение. Конкретная цель повышает эффективность любого процесса. Получать новые знания необходимо, и важно делать это эффективно. Экзамен даёт не только конкретную цель, но еще и пороговый критерий уровня знаний. Так вы, не привязываясь к конкретному проекту или задаче, понимаете, до какого уровня стоит прокачивать ту или иную область знаний и когда надо остановиться. Подготовка к данному экзамену — хороший пример развития экспертизы в ширину. Понятно, что на практике в рабочей обстановке требования к знаниям будут отличаться, и, скорее всего, потребуется более глубокое понимание более узкой тематики проекта, то есть доразвитие экспертизы в глубину. Однако всегда хорошо иметь некий фундамент, что позволит хотя бы исключить вопросы «а что это вообще такое» при встрече с базовыми Java технологиями вне технологической зоны комфорта, а также избежать фейспалама на собеседовании.
— Объективная оценка уровня знаний. Любое собеседование (явная оценка) или эффективное выполнение текущих задач (косвенная оценка) является субъективной, так как знания оценивается с позиции собеседующего или требований проекта. Недостаток такого подхода — другой собеседующий или новый проект могут оценить вас совсем иначе (и не факт, что новая оценка вас обрадует). Экзамен декларирует относительно равномерное покрытие в широком диапазоне экранируемой темы, где экзаменатором выступает абстрактное групповое мнение экспертов из Oracle, авторов данного экзамена (к примеру, моя личная степень доверия к таким экзаменующим — максимальна).
Важно понимать, что подготовка к сертификации — это лишь альтернативный (но весьма эффективный) способ получения теоретических знаний, но не замена опыту на рабочих или домашних пет-проектах. Однако знание теории повышает ваши шансы не умертвить очередной рабочий проект и избежать кровавых слез у коллег, которые будут ревьюить ваш очередной коммит.
Как лучше готовиться
Я читал книги, документацию, проходил онлайн курсы и мок-экзамены. Далее обо всем по порядку.
Книги
Непосредственно для подготовки я использовал две книги:
— Pro JPA 2 (Expert’s Voice in Java) 2nd Edition, by Mike Keith, Merrick Schincariol;
— Java Persistence with Hibernate 2nd Edition, by Christian Bauer, Gavin King, Gary Gregory.
Могу заявить, что этого вполне достаточно (с учетом остальных пунктов ниже) для подготовки к сертификаци, но надо признать, что это не единственные две книги, которые я когда-либо читал про JPA.
Документация (JSR спецификации)
Экзамен довольно внимателен к деталям, таким как названия аннотаций, классов, интерфейсов — то есть к справочным данным. А потому, чтение документации будет хорошим дополнением к чтению книг. Не стоит расстраиваться, прочитать документы из списка ниже оказалось не так сложно, как я предполагал изначально:
— JSR 338: Java Persistence API, Version 2.1 — 570 страниц, читается довольно легко, как обычная техническая книга;
— JSR-907: Java Transaction API, Version: 1.2 — 50 страниц, так что чтение много времени не займет, а вопросы о транзакциях довольно популярны на экзамене;
— JSR 345: Enterprise JavaBeans, Version 3.2 EJB Core Contracts and Requirements — в данном документе самой полезным для подготовки мне кажется глава 8 (Support for Transactions), а остальное можно пропустить. Замечу, что функциональность JPA в контексте транзакций в standalone (SE) приложения и в раках серверов приложений (EE) довольно разнится, а экзамен содержит много вопросов касательно обоих типов приложений — так что чтение данной спецификации будет далеко не лишним.
Online курсы
Также в процессе подготовки я использовал онлайн тренинги на платформе Udemy. По теме данной сертификации их там всего два:
— Java Persistence: Hibernate and JPA Fundamentals;
— Hibernate and Java Persistence API (JPA) Fundamentals.
Пройти оба курса не потребовало у меня больших временных и финансовых затрат.
Основная причина, для чего стоит использовать такие тренинги, понятна — это еще один источник теоретических знаний и практических навыков (выполнения заданий из курса) по теме сертификации. К тому же, как я осознал уже в процессе прохождения данных курсов, приобретается еще один полезный навык. Следуя инструкциям автора тренинга и создавая несколько небольших проектов-приложений, использующих JPA, вы набиваете руку в быстром создании локальной инфраструктуры для сборки и запуска приложений, работающих с базой данных. К примеру, файл конфигурации для build системы (ant/maven/gradle), deploy конфигурация, создание требуемой схемы в базе данных.
Вряд ли рабочие задачи условного программиста подразумевают такой навык быстрого построения инфраструктуры. Обычно (как в моем случае) на инфраструктурные задачи выделяются часы или дни, а возможно, что такими задачами вообще занимаются отдельные выделенные инженеры.
Почему это важно уметь делать это именно быстро? Подготовка к сертификации проверяет наличие знаний в относительно широком диапазоне — к примеру, mapping разных видов отношений сущностей в базе, enumerations и коллекций, простые/составные ключи, JPQL, Criteria API, транзакции и locking, мониторинг событий persistence сущностей. Зачастую некоторые сложные концепции мне были не до конца понятны без небольшого работающего примера, который можно было бы подебажить и уяснить себе все в деталях.
Но для каждого примера необходима соответствующая инфраструктура. Выполнять некоторое количество таких подготовительных действий для запуска 10 строк кода, чтобы уяснить одну деталь функционала бывает иногда лень, что приводит к недопонимаю темы -> ошибкам на экзамене -> уменьшению вероятности успешной сертификации. Но когда эти подготовительные (и реально boring) действия выполняются быстро и полуавтоматически, то шансы, что лень победит, минимальны.
Мне вначале казалось, что можно подготовить инфраструктуру один раз для всех тренировочных заданий и просто использовать ее постоянно. Но, как показала практика, весьма широкий диапазон прорабатываемых знаний (набор тем, что будут экзаменованы) требует построение некоторого количества приложений, весьма дистанцированных друг от друга по функциональности, а — соответственно — и по требованиям к инфраструктуре. То есть такую единственную инфраструктуру придётся постоянно допиливать (или пересоздавать) — если не под каждое приложение, то, как минимум, под каждую подобласть экзаменуемых знаний, которые вы хотите подкрепить примером тестового приложения.
Mock—экзамены
Внесу немного ясности: мок-экзамены — хорошо, а «дампы» — плохо.
Дампы — это списки реальных вопросов с экзамена, полученных нечистоплотным образом. Нивелируют пользу и саму идею экзамена как процесса получения знаний. Не комильфо.
Мок-экзамены — это набор вопросов, похожих на тое, что будут на экзамене, но отличающихся не только по сути, но и, зачастую, по уровню сложности.
Oracle также предлагает мок-экзамены как элементы подготовки к настоящей сертификации. Есть и сторонние вендоры, такие как enthuware.com, которыми я пользовался исключительно из экономических соображений — они просят меньше денег относительно Oracle за примерно соизмеримый набор моков. Надо отметить, что моки, которые я использовал, оказались ощутимо сложнее, нежели реальный экзамен (по
Нельзя объять необъятное, а также в одной статье изложить все аспекты даже одной сертификации. Я осознанно уклонился от публикации информации о том, как проходит процесс сертификации, начиная от регистрации до получения сертификата, так как об этом уже рассказано в двух упомянутых выше статьях. Хочется, чтобы моя статья была «add value» для украинского IT-комьюнити, не очередной публикацией КО.
Слава Украине, и да прибудут с вами сыры по 500 грн.