第一次使用 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 应用程序中完美运行,但在 Web 服务中却没有。任何想法?