Jade и Web

, , , , , , | sally | 21.04.2009 | Комментариев нет


Рассматривая jade-агентов в контексте Web вообще и Semantic Web в частности, можно уделить немного внимания вопросам интеграции агентов с веб-приложениями.

Существует несколько готовых подходов, которые можно использовать. Сначала предлагаю некоторый обзор, в дальнейшем — более подробное описание

JadeGateway

Класс JADEGateway обеспечивает взаимодействие между внешним приложением и платформой Jade. Все служебные классы доступны в пакете jade.wrapper.gateway. Основное назначение — создание веб-интерфейса для агентов. Основной принцип подхода — цепочка: servlet – gatewayagent – MAS(мультиагентная система). JADEGateway скрывает от разработчика все аспекты управление агентом внутри jsp-контейнера.

Достаточно подробный пример использования Gateway описан в документации Jade. В методологии jade(pdf) определены некоторые правила, позволяющие более эффективно использовать данный подход.

Jade4jsp — Taglib

Автором этого подхода разработана небольшая библиотека тегов:

jade:container

создает jade-контейнер в application scope. Доступны настройки контейнера(hostname, port, string parameter for future extensions). Контейнер можно создавать только для уже запущенной jade-платформы(из-за ограничений безопасности).

jade:useAgent

Создает агента в контейнере. Id агента соответствует названию агента в контейнере и названию прокси-агента на странице jsp.

jade:sendObject

В настоящее время тег может оперировать только объектами типа String. Для других типов можно использовать метод agent.putO2AObject()

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

//Я не использовала этот подход, потому что использую теги преимущественно для элементов именно отображения(например, как теги средствами facelets)

Jade4spring

Jade4spring обеспечивает легкую интеграцию контейнеров агентов JADE и фреймворка Spring. У проекта есть два дома — старый и новый. В новом планируется выпуск версии 2.0, но что-то ее пока не видно.

//Т.к сейчас у меня приложение на spring, взялась за этот подход в первую очередь.

Пример

В примере я опишу подключение двух агентов, взятых отсюда, к произвольному веб-приложению, использующему Spring Framework.

Помещаем jade container bean в application context:

   <bean id="jadeBean"
class="net.sf.jade4spring.JadeBean"
init-method="startContainer" lazy-init="false"
destroy-method="stopContainer">
      <property name="autostartAgents">
      <map>
      <entry>
      <key>
      <value>BlogAgent</value>
      </key>
      <ref bean="blogAgent"/>
      </entry>
      <entry>
      <key>
      <value>SemWebAppAgent</value>
      </key>
      <ref bean="semWebAppAgent"/>
      </entry>
      </map>
      </property><property name="propertiesFile" value="pathtoprops\jade.properties"/></bean>

Определяем настройки контейнера агентов в файле pathtoprops\jade.properties:

container=true
port=1099
host=localhost
container-name=SWContainer

Перед запуском веб-приложения не забываем запустить агентную платформу и GUI RMA-агента.

Jade

На рисунке видим контейнер SWContainer,  и в нем трех агентов — два запущенных с помощью JadeBean, один из них служебный  — J4SInfiltratorAgent (JadeBean использует этого агента для получения информации о платформе).

Теперь наши агенты доступны в контексте приложения.


Понравилась статья? Поделитесь с друзьями!


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Ответить с помощью ВКонтакте: