Играть! framework: получить компонент / поле / объект контроллера между запросами - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в игре! и во время работы в рамках проекта у меня возникла следующая ситуация:

У меня есть контроллер HomeController, который выполняет два основных действия:

public CompletationStage<Result> search(String query){
  return docSearcher.search(query).thenApplyAsync((json) -> {               
     return ok(json);
  }, ec);
}

public CompletationStage<Result> zoom(){
    return docSearcher.zoom().thenApplyAsync((json) -> {                
     return ok(json);
  }, ec);
}

Действие search получает параметр query и делегирует docSearcher для поиска в БД (docSearcher вводится в контроллер). Действие zoom должно обеспечить увеличение / уменьшение масштаба в визуализации, отображаемой как HTML.

Проблема в том, что конструктор docSearcher создает экземпляр QuadTree, который будет использоваться для эффективного масштабирования, поэтому этот экземпляр QuadTree должен быть доступен для действия zoom после вызова действия search. Таким образом, один QuadTree в docSearcher распределяется между клиентами / потоками. Я хотел бы получить запрос на действие QuadTree на search и поделиться этим новым созданным QuadTree с последующими действиями zoom.

Как мне добиться этого с помощью Play !? Я не уверен, как я могу хранить пользовательские данные (QuadTree зависит от запроса пользователя, и я не хочу создавать новое дерево для каждого запроса, я хочу разделить QuadTree s среди запросов поиска / масштабирования).

Спасибо.

Следуйте коду docSearcher класс:

public class LocalDocumentSearcher implements DocumentSearcher {

  private QuadTree quadTree; 

  @Inject
  public LocalDocumentSearcher(Database db, DatabaseExecutionContext context) {
    this.executionContext = context;
    this.quadTree = initQuadTree();
}

  @Override
  public CompletionStage<String> search(String query) throws Exception {
    return CompletableFuture.supplyAsync(() -> {            
            return searchData(queryData);
    }, executionContext);
}

  @Override
  public CompletionStage<String> zoom() throws Exception {
    return CompletableFuture.supplyAsync(() -> {            
            return zoomData();
    }, executionContext);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...