【问题标题】:ContextNotActiveException while calling entityManger.createNativeQuery using thread使用线程调用 entityManager.createNativeQuery 时出现 ContextNotActiveException
【发布时间】:2017-10-08 13:24:50
【问题描述】:

我已经启动了一个线程,但是当它尝试访问实体管理器时,它会抛出异常 javax.enterprise.context.ContextNotActiveException: 当前线程中不存在具有范围类型注释 @RequestScoped 的 WebBeans 上下文

我应该如何使用线程访问 EntityManger 有什么解决办法吗?

 public class SchedulerForData {
        @Inject
        private DefaultUserSevice userSevice;


        public void beepForAnHour() {
            long initialDelay;
            final Runnable beeper = new Runnable() {
                public void run() {
                         userSevice.getData();
                         }
            scheduler.scheduleAtFixedRate(beeper, 60, 30, TimeUnit.SECONDS);

        }
        }
    }



    public class DefaultUserSevice {

    @Inject
    EntityManager entityManger;


    public void getData(){
      List resultList = entityManager.createNativeQuery("Select * from USER").getResultList();
    }

    }

【问题讨论】:

  • DefaultUserService 类上有注解吗?
  • 没有注释先生

标签: java jpa threadpool entitymanager


【解决方案1】:

如果服务上没有其他配置,则应将服务设为托管 bean 并添加事务功能:

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class DefaultUserSevice

【讨论】:

  • 我使用了上面的注释,但它在 entityManger.createNativeQuery() 处引发异常,但我在控制台上看不到任何类型的异常或错误
  • 不,先生,因为它无法继续进行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多