Статьи

Пример приложения Ruby on Rails + CDI / Weld on Torquebox

В течение почти года мы успешно использовали Torquebox вместе с CDI / Weld в качестве основы для двух наших услуг: JBison и Circular . Поскольку мы будем делать некоторые презентации вместе с Томеком Шимански, мы создали небольшое приложение, показывающее нашу настройку и интеграцию CDI <-> RoR.

Код доступен на GitHub: https://github.com/softwaremill/trqbox-demo вместе с readme, объясняющим модули, как запустить приложение и как его заново создать. Надеюсь, это будет полезно.

Приложение состоит из двух основных модулей: бэкэнда и внешнего интерфейса.

Бэкэнд написан с использованием Java и CDI / Weld для внедрения зависимостей и управления ими. Здесь мы можем использовать всю мощь CDI, с расширениями, перехватчиками, производителями и т. Д. Также ничто не мешает нам использовать другие компоненты JEE (например, EJB, JAX-RS, сервлеты), так как Torquebox построен на JBoss AS 6 и развернуты Приложение ведет себя более или менее как .war.

Внешний интерфейс, с другой стороны, сделан исключительно в Ruby on Rails (плюс немного Javascript). Для разработки интерфейса статическая типизация чаще является препятствием, чем помощью; Кроме того, тот факт, что все изменения сразу видны (без повторного развертывания и т. д.), является большим преимуществом. Более того (по крайней мере, для меня) делать богатые приложения ajax намного проще в RoR, чем при использовании, например, JSF.

Чтобы связать внешний и внутренний интерфейсы, с помощью некоторой инфраструктуры мы можем «внедрить» компоненты CDI в контроллеры Rails или в произвольный класс Ruby (который работает на JRuby, той же JVM), например:

class MyController < ApplicationController
  include_class "pl.softwaremill.demo.HelloWorld"
 
  def index
    @data = inject(HelloWorld).compute_data
  end
end

Таким образом, мы можем легко вызвать нашу бизнес-логику, чтобы получить данные, которые должны отображаться, или инициировать действие. В настоящее время это работает в качестве локатора службы, но благодаря некоторым отзывам о презентации Poznan JUG, которую мы провели на этой неделе, у меня есть некоторые идеи по ее улучшению.

Наш обычный цикл разработки заключается в следующем: сначала мы разрабатываем бэкэнд, используя модульные тесты и Arquillian (интеграционные тесты), чтобы убедиться, что бины ведут себя так, как должны (если, например, есть какие-то новые сущности или запросы, мы тестируем их используя тест БД ). Когда это будет сделано, мы можем развернуть наши новые bean-компоненты и приступить к написанию внешнего интерфейса.

Это приводит к довольно быстрой разработке и небольшому времени, затрачиваемому на ожидание загрузки AS. Плюс удовольствие от использования чего-то нового и нетрадиционного;).

Большое спасибо Бобу МакВиртеру и всей команде Torquebox, а также Алесу Джастину за помощь в решении некоторых проблем, связанных с MC.

Адам

 

 

С http://www.warski.org/blog/?p=383