0

第一次使用 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 服务中却没有。任何想法?


在这里您可以找到堆栈跟踪。

4

1 回答 1

0

您可以尝试设置不同的执行服务。

final Executor executor = Executors.newFixedThreadPool(10);
final Engine<EnumGene<WayPoint>, Double> engine = Engine.builder(...)
    .executor(executor)
    .build();
于 2021-03-18T19:58:25.723 回答