Получение пула соединений из запроса веб-перехватчика с помощью Actions On Google

Я пытаюсь использовать тот же пул соединений с моей базой данных из инициированного намерения веб-перехватчика. Я использую базовый шаблон (https://github.com/actions-on-google/dialogflow-webhook-boilerplate-java).

Каждое сработавшее намерение действительно возвращает мне ActionRequest, однако оно не содержит ServletContext. Итак, как мне получить нормальный контекст запроса с помощью библиотеки actions-on-google-java? (https://github.com/actions-on-google/actions-on-google-java/blob/master/src/main/kotlin/com/google/actions/api/ActionRequest.kt)


Я пытался найти альтернативные способы получения пула, но мой опыт работы с Java ограничен.

// this is what i would like to achieve but ActionRequest is limited
@ForIntent("DB test")
public ActionResponse DbTest(ActionRequest request)
{
    ...
    DataSource pool = (DataSource) request.getServletContext().getAttribute("my-pool");
    try (Connection conn = pool.getConnection()) 
    { 
        // do database stuff
    }
    ...
}

person tubbelol    schedule 05.07.2019    source источник
comment
Поскольку вы сказали, что ваш опыт работы с Java ограничен, пробовали ли вы вместо этого использовать клиентскую библиотеку Node.js? developers.google.com/actions/reference/nodejsv2/overview   -  person Max Wiederholt    schedule 09.07.2019


Ответы (1)


Я не вижу, чтобы ActionRequest предоставлял ServletContext, поскольку он не зависит от того, что обрабатывает запрос.

Не слишком элегантно, но вы можете создать метод в своем MyActionsApp (поскольку вы используете базовый шаблон) для установки ServletContext из вашего запроса (HttpServletRequest) перед вызовом handleRequest.

Создайте конструктор для передачи, это тоже вариант.

person Edinardo Potrich    schedule 10.07.2019