15 марта я прочитал в «Аквариуме», что Дэн Аллен из JBoss добавил поддержку JBoss AS 5 и GlassFish в seam-gen . Я имел удовольствие встретиться с Дэном Алленом на Devoxx 2008 (мы провели BOFF на GlassFish и Seam), и там он уже упомянул, что думал добавить поддержку GlassFish в seam-gen. Сегодня вечером я скачал Seam 2.1.2-SNAPSHOT и опробовал поддержку GlassFish в seam-gen, которую недавно добавил Дэн.
Моя цель в этом тесте состояла в том, чтобы выяснить, как seam-gen можно использовать для создания проектов, которые обычно разрабатывает AMIS : веб-приложения, использующие базу данных Oracle. Только сейчас я хотел бы создать проект, который можно развернуть на GlassFish. Итак, я начал seam-gen:
$ ./seam-gen
Первая проверка: указание установочного каталога GlassFish
Называйте меня поспешным, плохим читателем, нетерпеливым или просто неудачником, но, прочитав статью в блоге Dans, у меня сложилось впечатление, что я могу указать каталог установки GlassFish в вопроснике, представленном seam-gen. Однако я был немного разочарован, узнав, что мне все еще нужно предоставить установочный каталог JBoss AS. Читая статью в блоге Dans, более тщательно предоставил мне информацию, которую я пропустил в первый раз: «Как и прежде, сборка проекта seam-gen по умолчанию поддерживает JBoss AS» … »Все цели, относящиеся к GlassFish, находятся в файле glassfish -build.xml в корне проекта « .OK, поэтому я должен указать дом JBoss AS во время создания шва, и я смогу развернуть его на GlassFish, как только я закончу генерацию? Это определенно круто и мне достаточно!
Следующая проверка: Hibernate-Gen
Одна из первых вещей, которые я проверил, состояла в том, есть ли еще неприятная ошибка в hibernate-gen. В процессе настройки вашего проекта seam-gen использует hibernate-gen: инструмент генерации Hibernate, который генерирует классы сущностей на основе параметров подключения к базе данных. Старая версия, которую я использовал несколько месяцев назад, не очень хорошо справлялась со схемами баз данных Oracle. Вместо того чтобы генерировать только классы сущностей для схемы предоставленного пользователя базы данных, он будет сканировать всю базу данных и пытаться сгенерировать классы сущностей для всех таблиц базы данных и представлений, с которыми он столкнулся. Обходным путем для этого было указать hibernate.default_schema в hibernate-console.properties, а затем сгенерировать классы Entity.
К счастью, даже без указания этого параметра hibernate теперь отлично справляется со своей задачей. Он просто сканирует схему базы данных для предоставленного пользователя и все. Превосходно!
Управление GlassFish изнутри муравья
Как можно прочитать в glassfish-readme.txt в домашнем проекте, GlassFish можно запустить, перезапустить и остановить с помощью ant. Кроме того, развертывание, повторное развертывание и развертывание проектов и определений источника данных могут быть выполнены с помощью ant. Довольно аккуратный Дэн! К сожалению, я не очень опытный пользователь ant, поэтому потребовалось некоторое время, прежде чем я узнал, что мне нужно было указать каталог glassfish.home в файле build.properties. После этого я мог без проблем запускать и останавливать GlassFish.
Несмотря на небольшие неприятности, описанные выше, я был * ОЧЕНЬ * очень впечатлен отличной работой, которую выполняет seam-gen! Помните: это программное обеспечение SNAPSHOT, и до сих пор оно проделало отличную работу! Никаких сбоев, никаких исключений, никаких следов стека, а только исчерпывающие сообщения на моем экране, когда что-то не настроено правильно. Итак, вот:
Финальный тест: развертывание моего проекта на GlassFish
Проект, который использует JPA, должен, по условиям GlassFish, быть развернут как EAR. Тем не менее, по стандартам Seam его можно развернуть как файл WAR. Итак, я следовал стандартам Seam и попробовал вариант WAS. Здесь я столкнулся с несколькими проблемами.
Позвольте мне начать с описания моих усилий по развертыванию взорванного архива: это без каких-либо проблем! Сценарий муравья полностью пинает задницу в этой задаче. Для этого не нужно сначала создавать разнесенный архив (задача: gf-stage) или развертывать источник данных (задача: gf-gf-deploy-datasource). Если это необходимо, он сделает это сам!
Однако развертывание файла WAR доставило мне немало головной боли. Первая ошибка, с которой я столкнулся
Deployment Error -- Could not resolve a persistence unit corresponding to the persistence-unit-ref-name [SeamGenTest/pu] in scope of the module called
[.../glassfish-v2ur2/domains/domain1/applications/j2ee-modules/SeamGenTest]. Please verify your application.
Как выясняется, сценарий build.xml удаляет файл persistence.xml в случае файла WAR. Тем не менее, развертывание развернутой WAR идет хорошо, поэтому это * HAS * файл persistence.xml. Это кажется противоречивым для меня.
Помимо этого мне пришлось заменить эти переменные в ресурсах / WEB-INF / component.xml
@debug@
@jndiPattern@
@seamEmfRef@
со значениями, которые я нашел в файле components.xml в разобранном каталоге war. Похоже, муравей не заменяет эти заполнители на правильные значения. Как только я это сделаю, WAR развернется без проблем.
Вывод
Поддержка GlassFish для seam-gen появляется и выглядит очень и очень многообещающе. Огромное спасибо Дэну Аллену за работу над этим! Я отправлю ему свои комментарии, и я надеюсь, что он сможет решить проблемы, которые я здесь упомянул.