Использование JPL (Java + Prolog) в веб-приложении Java EE

Я хотел бы разработать веб-приложение на Java EE, которое требует Пролог через JPL для определенных задач, связанных с поиском. Веб-приложение будет развернуто на сервере приложений JBoss. Движок Prolog может быть YAP или SWI (на данный момент это единственные движки Prolog, совместимые с JPL). Запросы Prolog зависят от информации, хранящейся в (потенциально большой) базе данных.

Если кто-то пробовал это или что-то подобное, не могли бы вы дать мне отзыв о следующих вопросах?:

  • Каков наилучший способ управления одновременными сеансами http, которым требуется доступ к движку Prolog? Возможно ли - желательно?- назначить каждому отдельному сеансу свой собственный движок Пролога? Если это решение работает, возможно ли реализовать что-то похожее на "объединение движков Prolog", чтобы быстро назначать движки prolog новым сеансам?, Или лучшее решение - иметь один движок Prolog, который будет синхронно управлять всеми запросами? (и медленно).
  • Как можно управлять взаимодействием Пролога с базой данных? Если данные часто меняются в базе данных, и Prolog нужны эти данные для решения своих запросов, какова лучшая стратегия для синхронизации фактов в движке Prolog с данными в базе данных? Военно-морской вариант запуска с нуля при каждом новом сеансе (например, перезагрузка всех данных из базы данных в качестве фактов Пролога), кажется, не очень хорошая идея, если размер базы данных увеличивается.
  • Какие-либо другие ожидаемые проблемы / трудности, связанные с взаимодействием java-prolog-database во время реализации?

Заранее спасибо!

1 ответ

Каков наилучший способ управления одновременными сеансами http, которым требуется доступ к движку Prolog?

Если я посмотрю на источник JPL, похоже, что он использует пул двигателей. Тип данных запроса реализует шаблон перечислителя плюс операцию close(). Я думаю, что двигатель автоматически назначается на запрос, пока он активен.

Таким образом, каждый http-запрос может получить независимый доступ к системе Prolog через новые объекты запроса. Если вы не хотите закрывать объект запроса во время http-запроса, я думаю, вы также можете присоединить его к http-сеансу. И повторно использовать его еще один запрос.

Как можно управлять взаимодействием Пролога с базой данных?

Это зависит от схемы использования данных в базе данных и доступных путей доступа. Возможно, вы можете быстро получить доступ к очень большим базам данных во время запроса и повторно получать данные во время каждого запроса. Например, если необходимый набор данных для сопоставления мал, а база данных имеет хорошие индексы, чтобы можно было быстро получить доступ к данным сопоставления.

В противном случае вам потребуется реализовать интеллектуальное кэширование. В настоящее время я работаю над решением, в котором я использую своего рода схему регистрации заезда / отъезда. Но это не подходит для веб-сервера, где у вас есть несколько пользователей. Я использую этот шаблон для автономного решения, где есть один пользователь и один извлеченный мусор в памяти. Для веб-сервера с несколькими разными пользователями мусорные блоки могут переполнять память веб-сервера.

Таким образом, кэширование работает только в том случае, если вы можете ограничивать и ограничивать мусор или если у вас очень большой объем памяти веб-сервера. Может быть, вы можете найти такой инвариант для вашего приложения. В противном случае можно сделать вывод, что вы не можете использовать Java EE независимо от того, используете вы Prolog или нет.

Другие вопросы по тегам