AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79227343
Accepted
Amro Mustafa
Amro Mustafa
Asked: 2024-11-26 23:34:04 +0800 CST2024-11-26 23:34:04 +0800 CST 2024-11-26 23:34:04 +0800 CST

Propagação do contexto de dobra temporal durante a resolução

  • 772

Estou usando Timefold 1.15 e Quarkus 3.1

Estou tentando salvar os dados durante a resolução do horário

mas tenho alguns contextos que são necessários durante a resolução, contexto de locatário para segurança de linha e contexto de identidade

mas estou enfrentando problemas relacionados à indisponibilidade dos contextos

Código de exemplo:

  solverManager.solveBuilder()
            .withProblemId(finalRequestId)
            .withProblemFinder((id) -> timeTableJob.get(finalRequestId).timetable)
            .withBestSolutionConsumer(bestSolution -> timeTableJob.put(finalRequestId, Job.ofTimetable(bestSolution)))
            .withFinalBestSolutionConsumer(solution -> {
                timeTableJob.put(finalRequestId,Job.ofTimetable(solution));
                plannedLessonRepository.save(solution);
            })
            .withExceptionHandler((id, exception) -> {
                timeTableJob.put(finalRequestId, Job.ofException(exception));
                LOGGER.error("Failed solving jobId ({}).", finalRequestId, exception);
            })
            .run();

Erro:

2024-11-26 17:18:32,463 ERRO [org.acm.sch.res.TimeTableResource] (pool-13-thread-1) Falha ao resolver jobId (101).: org.hibernate.HibernateException: SessionFactory configurado para multilocação, mas nenhum identificador de locatário especificado em org.hibernate.internal.AbstractSharedSessionContract.getTenantId(AbstractSharedSessionContract.java:292) em org.hibernate.internal.AbstractSharedSessionContract.(AbstractSharedSessionContract.java:193) em org.hibernate.internal.SessionImpl.(SessionImpl.java:230) em org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1381) em org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1247) em io.quarkus.hibernate.orm.runtime.session.JTASessionOpener.openSession(JTASessionOpener.java:46) em io.quarkus.hibernate.orm.runtime.session.TransactionScopedSession.acquireSession(TransactionScopedSession.java:92) em io.quarkus.hibernate.orm.runtime.session.TransactionScopedSession.find(TransactionScopedSession.java:175) em org.hibernate.engine.spi.SessionLazyDelegator.find(SessionLazyDelegator.java:825) em org.hibernate.Session_OpdLahisOZ9nWRPXMsEFQmQU03A_Synthetic_ClientProxy.find(Fonte desconhecida) em io.quarkus.hibernate.orm.panache.common.runtime.AbstractJpaOperations.findById(AbstractJpaOperations.java:183) em org.acme.timetable.persistence.PlannedLessonRepository.findById(PlannedLessonRepository.java) em org.acme.timetable.persistence.PlannedLessonRepository.findById(PlannedLessonRepository.java) em org.acme.timetable.persistence.PlannedLessonRepository.save(PlannedLessonRepository.java:24) em org.acme.timetable.persistence.PlannedLessonRepository_Subclass.save$$superforward(Fonte desconhecida) em org.acme.timetable.persistence.PlannedLessonRepository_Subclass$$function$$1.apply(Fonte desconhecida) em io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73) em io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62) em io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136) em io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107) em io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38) em io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61) em io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32) em io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Fonte desconhecida) em io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42) em io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30) em io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27) em org.acme.timetable.persistence.PlannedLessonRepository_Subclass.save(Fonte desconhecida) em org.acme.timetable.persistence.PlannedLessonRepository_ClientProxy.save(Fonte desconhecida) em org.acme.timetable.rest.TimeTableResource.lambda$solve$2(TimeTableResource.java:112) em ai.timefold.solver.core.impl.solver.ConsumerSupport.lambda$consumeFinalBestSolution$1(ConsumerSupport.java:102) em java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) em java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) em java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) em java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) em java.base/java.lang.Thread.run(Thread.java:833)

quarkus
  • 1 1 respostas
  • 37 Views

1 respostas

  • Voted
  1. Best Answer
    Christopher Chianelli
    2024-11-27T02:45:29+08:002024-11-27T02:45:29+08:00

    O melhor consumidor de solução, o melhor consumidor de solução final e o manipulador de exceção são executados em um thread diferente daquele que aceita a chamada da API. Como resultado, o contexto da transação não é propagado.

    O que você pode fazer é usar o QuarkusTransaction para iniciar e encerrar a transação no melhor consumidor de solução final (e remover a @Transactionalanotação).

      solverManager.solveBuilder()
                .withProblemId(finalRequestId)
                .withProblemFinder((id) -> timeTableJob.get(finalRequestId).timetable)
                .withBestSolutionConsumer(bestSolution -> timeTableJob.put(finalRequestId, Job.ofTimetable(bestSolution)))
                .withFinalBestSolutionConsumer(solution -> {
                    QuarkusTransaction.joiningExisting().run(() -> {
                        timeTableJob.put(finalRequestId,Job.ofTimetable(solution));
                        plannedLessonRepository.save(solution);
                    });
                })
                .withExceptionHandler((id, exception) -> {
                    timeTableJob.put(finalRequestId, Job.ofException(exception));
                    LOGGER.error("Failed solving jobId ({}).", finalRequestId, exception);
                })
                .run();
    
    • 1

relate perguntas

  • Quarkus Hibernate Reactive não captura ConstraintViolationException no bloco onFailure()

  • A biblioteca Quarkus Artemis Jms não entrega mensagem para fila de mensagens mortas no ActiveMQ Artemis

  • Como definir uma lista no modelo Qute?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve