Первый раз, когда использую Quarkus, это, вероятно, вопрос новичков, но я не знаю, как его решить. Я пытаюсь настроить конечную точку, которая должна запускать генетический алгоритм (созданный с помощью Jenetics) и возвращать результат. Это определение конечной точки:
@Path("/items")
public class ItemResource {
@Inject
ItemService service;
@GET
public List<Item> getItems() {
return service.getItems();
}
}
Конечная точка требует выполнения для класса обслуживания ниже:
@ApplicationScoped
public class ItemService {
@Inject
ItemMapper mapper;
@Transactional
public List<Item> getItems() {
int numOfItems = Math.toIntExact(Item.count());
IntegerChromosome chromosome = IntegerChromosome.of(0, numOfItems - 1, 14);
Factory<Genotype<IntegerGene>> factory = Genotype.of(chromosome);
Engine<IntegerGene, Double> engine = Engine
.builder(this::fitnessFunction, factory)
.build();
Genotype<IntegerGene> result = engine.stream()
.limit(100)
.collect(EvolutionResult.toBestGenotype());
return mapper.toItems(result);
}
}
и, наконец, это класс картографа:
@ApplicationScoped
public class ItemMapper {
public List<Item> toItems(Genotype<IntegerGene> genotype) {
List<Item> items = Item.listAll();
return genotype.chromosome().stream()
.map(IntegerGene::intValue)
.map(items::get)
.collect(Collectors.toList());
}
}
Когда я запускаю приведенный выше код, я получаю следующее исключение:
Error handling 0d80baf3-12da-49ec-b8d0-e48472c801c9-1, org.jboss.resteasy.spi.UnhandledException: java.util.concurrent.CancellationException: javax.enterprise.context.ContextNotActiveException
Код безупречно работает в стандартном приложении Java, но не в веб-сервисе. Любая идея?
@Transactional
вItemResource
? - person geoand   schedule 18.03.2021Item
содержит код доступа к БД? Является ли какая-либо часть вычислений (вItem
или в Jenetics) асинхронной, то есть в другом потоке? - person Nikos Paraskevopoulos   schedule 18.03.2021ForkJoinPool.defaultPool()
для одновременной оценки значений пригодности. Если это проблема, вы можете явно указать используемыйExecutor
при сборке движка. И да, была бы полезна полная трассировка стека. - person Franz Wilhelmstötter   schedule 18.03.2021count()
иlistAll()
- person Andrea   schedule 19.03.2021