Одна из основных целей, которую я преследовал в течение нескольких месяцев, — это интеграция Grails с Flex 4. Мне нужно переделать административный бэкэнд ConferenceGuide, чтобы сделать его более эргономичным, чтобы мы могли охватить больше событий, и с тех пор, как я обнаружил Flex 4 тонкости , я не мог думать об этом с чем-либо еще. Проблема в том, что ни один из существующих плагинов не удовлетворял моим потребностям.
Все они охватывают только Flex 3, некоторые представляют большую сложность для генерации CRUD, некоторые используют GraniteDS вместо BlazeDS, а самый простой плагин, grails-flex , никогда не выходил за пределы экспериментальной стадии. Я провел много экспериментов, много говорил об этом в списках рассылки Grails, пока Томас Лин не любезно объяснил мне, что, возможно, я подхожу к этому неправильно. Я хотел плагин, который бы устанавливал полную среду для разработки Flex прямо в середине моего приложения Grails.
И я хотел этого, потому что хотел избежать использования Flash Builder (вы знаете … Eclipse … ierk!), Главным образом потому, что единственным преимуществом Flex Builder 3 перед IntelliJ Idea был визуальный дизайнер. Но он был прав, я был неправ. Flash Builder 4 действительно меняет все. Он включает в себя множество очень интересных функций, которые значительно повышают производительность разработки Flex, особенно когда речь идет об интеграции с внутренними технологиями. И для этих функций, я могу только признать, что IntelliJ еще не на высоте. Я все еще собираюсь использовать его для части Grails, но Flash Builder будет моей средой выбора для Flex 4.
Итак, как только я узнал больше о Flex 4, BlazeDS 4 и Flash Builder 4 beta 2, пришло время пересмотреть мой подход и разработать гораздо более простой плагин Grails, чтобы любое приложение Grails можно было использовать в сочетании с Flash Builder. Я только что выпустил плагин Grails-Blazeds, чтобы сделать это. Вот как это работает:
- Установите плагин Grails-Blazeds: «Grails Install-плагин Blazeds». Этот плагин копирует пару файлов конфигурации в ваше приложение и импортирует все необходимые библиотеки, включая BlazeDS 4 и Spring-BlazeDS Integration 1.5 , обе в ночных версиях снимков, так как они еще не были официально выпущены
- Создайте службу, доступную для вашего приложения Flex через AMF, или выберите существующую.
- Добавьте аннотацию @RemotingDestination к своему классу обслуживания и аннотацию @RemotingInclude для всех методов в этом сервисе, которые вы хотите предоставить
- Отредактируйте web-app / WEB-INF / flex-servlet.xml (созданный при установке плагина): раскомментируйте элемент context: component-scan и установите базовый пакет, соответствующий вашему классу обслуживания
- Убедитесь, что ваши открытые методы обслуживания не используют классы Groovy в качестве аргументов или возвращаемых типов. Это известное ограничение, над которым я все еще работаю, но если здесь есть некоторые классы Groovy, Flash Builder не удается сгенерировать аналоги ActionScript.
- Запустите приложение Grails, используя «grails run-war» вместо «grails run-app». Еще раз это известное ограничение: плагин подключения к данным Flash Builder BlazeDS опирается на классический макет веб-приложения и не понимает динамический макет Grails (до тех пор, пока кому-то не удастся создать мастер подключения данных Grails для Flash Builder 4)
- В Flash Builder 4 beta 2 создайте новый проект Flex с сервером J2EE. Вот как должны выглядеть ваши параметры: «conferenceguide» — это название моего приложения Grails, а «sarbogast» — мой домашний каталог:
- Выберите меню «Данные», затем «Подключиться к BlazeDS…»
- В открывшемся диалоговом окне «Требуется аутентификация» установите флажок «Пароль не требуется» и нажмите кнопку «ОК».
- Вы должны увидеть, как появился ваш сервис, и вы можете выбрать его и нажать «Готово».
- Ваша служба должна появиться в представлении «Данные / службы». Затем вы можете создать свой пользовательский интерфейс и перетащить свои методы обслуживания в соответствующие компоненты, чтобы связать их с вашей внутренней частью Grails.
- Не забудьте настроить набор каналов на вашем сервисе:
<adminservice:AdminService id="adminService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true">
<adminservice:channelSet>
<s:ChannelSet>
<s:AMFChannel uri="http://localhost:8080/conferenceguide/messagebroker/amf"/>
</s:ChannelSet>
</adminservice:channelSet>
</adminservice:AdminService>
И вот, пожалуйста. Отдельное спасибо Джеймс Уорд , чья скринкаста действительно помогло мне получить это право. Теперь единственное, что пропускает этот плагин, помимо двух известных ограничений, — это интеграция с Spring Security, но это только начало.
Наслаждайтесь!