当前位置: 首页 > 知识库问答 >
问题:

QuartzJob中的EntityManager为空

周鸿云
2023-03-14

我在QuartzJobs实例上使用EntityManager遇到此问题:

Java语言weblogic上的lang.NullPointerException。坚持不懈CICScopedImprovider。weblogic上的getEMForCurrentCIC(CICScopedImprovider.java:35)。坚持不懈事务实体管理器Proxy Impl。weblogic上的getPersistenceContext(TransactionalEntityManagerProxyImpl.java:122)。坚持不懈BasePersistenceContextProxyImpl。在weblogic上调用(BasePersistenceContextProxyImpl.java:94)。坚持不懈事务实体管理器Proxy Impl。在weblogic上调用(TransactionalEntityManagerProxyImpl.java:164)。坚持不懈BasePersistenceContextProxyImpl。在com上调用(BasePersistenceContextProxyImpl.java:86)。太阳代理$Proxy321.createQuery(未知源)位于com。我的项目。存储库。实施。光沉积impl。com上的getShotsFromBackupOption(photopositoryimpl.java:44)。我的项目。服务实施。PhotoServiceImpl。com上的getPhoto(PhotoServiceImpl.java:90)。我的项目。班长备份作业。在组织中执行(BackupJob.java:46)。石英果心JobRunShell。在org上运行(JobRunShell.java:202)。石英简单。SimpleThreadPool$WorkerThread。运行(SimpleThreadPool.java:573)

这是我的工作:

public class BackupJob implements Job{
    private Logger logger = LoggerFactory.getLogger(getClass());

    @Inject private PhotoService photoService;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try {
            String jobName = context.getJobDetail().getKey().getName();
            Long jobGroup = Long.parseLong(context.getJobDetail().getKey().getGroup());

            List<File> fileList = photoService.getPhoto(jobName, jobGroup);

            logger.info("Backup with deep {}", context.getJobDetail().getJobDataMap().get("deep"));
        } catch (Exception e) {
            logger.error("ERROR during backup job", e);
        }       
    }
}

(正确注入了photoService,这与我在photoService中调用的photoRepository方法相同)

这是我的存储库:

@Stateless
public class PhotoRepositoryImpl implements PhotoRepository{

    @PersistenceContext(unitName=Constant.PU_NAME)
    private EntityManager em;

    @Override
    public List<Photo> getShotsFromBackupOption(String jobName, Long jobGroup) throws SQLException{

        Query query = em.createQuery("SELECT p "
                                    + "FROM Shot s "
                                    + "JOIN Photo p "
                                    + "WHERE s.dateShooting < "
                                        + "(SELECT b.previousThan "
                                        + "FROM BackupOption b "
                                        + "WHERE b.jobName = :jobName AND b.syncType.id = :jobGroup)"
                                    + "ORDER BY p.relativePath DESC");
        query.setParameter("jobName", jobName);
        query.setParameter("jobGroup", jobGroup);


        return (List<Photo>) query.getResultList();
    }
}

这是我的工作工厂

public class JobFactoryImpl implements JobFactory {


@Inject
private Instance<Job> jobs;

@Override
public Job newJob(TriggerFiredBundle triggerFiredBundle, Scheduler scheduler) throws SchedulerException {
    final JobDetail jobDetail = triggerFiredBundle.getJobDetail();
    final Class<? extends Job> jobClass = jobDetail.getJobClass();

    for (Job job : jobs) {
        if (job.getClass().isAssignableFrom(jobClass)) {
            return job;
        }
    }

    throw new RuntimeException("Cannot create a Job of type " + jobClass);
}}

共有1个答案

华子昂
2023-03-14

我以这种方式解决了获取EntityManager:

@PersistenceUnit(unitName= Constant.PU_NAME)
private EntityManagerFactory emf;

private EntityManager em = emf.createEntityManager();
 类似资料:
  • 问题内容: 在我的Web应用程序中,我在Apache Tomcat(TomEE)/7.0.37服务器上使用OpenJPA。我使用Netbeans自动生成类(“来自数据库的实体类…”和“来自实体类的会话Bean …”)。在SessionBean(例如UserFacade)上,我想获取EntityManager: 但是当我通过上述方式得到它时,我得到的是空值。当我通过: ecm不为空,还可以 我的pe

  • 我在netbeans中有一个Java web服务模块和ejb模块(都是企业应用程序的一部分)。web服务使用@ejb注入使用ejb类。在ejb模块中,我有一个TransactionManager类,它不是企业bean。只是一堂POJO课。我正在尝试使用以下方法注入EntityManager TransactionManager类是我希望为PersistenceContext进行依赖注入的类

  • Hibernate EntityManager实现了EJB3.0 JPA规范。Hibernate Java Persistence provider通过了Sun TCK测试和完全认证,你可以在Java SE 5.0,或Java EE 5.0以上的任何环境里使用Hibernate Java Persistence provider。 Hibernate是一个非常优秀的持久层ORM(Object/Re

  • 我得到以下异常: 关于这个案子有什么建议吗?