Рассматривая 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-агента.
На рисунке видим контейнер SWContainer, и в нем трех агентов - два запущенных с помощью JadeBean, один из них служебный - J4SInfiltratorAgent (JadeBean использует этого агента для получения информации о платформе).
Теперь наши агенты доступны в контексте приложения.

Оставить комментарий