I want to create dynamically jobs using Quartz, Spring and Hibernate. Users interact with a web service to create jobs of this class:
public class StartJobSpring extends QuartzJobBean {
    private String jobId;
    private String jobType;
    @Autowired
    private NoaJobInstancesDAO njiDAO;
    @Transactional
    @Override
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        JobKey key = context.getJobDetail().getKey();
        JobDataMap dataMap = context.getMergedJobDataMap();
        // some logic
        njiDAO.create(instanceUUID, noaJob.getNoaJob(jobId), jobType);
    }
}
The NoaJobInstancesDAO is a simple DAO class which makes use of Hibernate's EntityManager:
@Repository
public class NoaJobInstancesDAOHibImpl implements NoaJobInstancesDAO {
    @PersistenceContext
    private EntityManager entityManager;
    @Override
    @Transactional
    public NoaJobInstanceJPA create(NoaJobInstanceJPA entity) {
        entityManager.persist(entity);
        return entity;
    }
    @Override
    public void create(String instance_uuid, NoaJobJPA job, String job_type) {
        NoaJobInstanceJPA entity = new NoaJobInstanceJPA(instance_uuid, job,
                job_type, "CREATED", null, null, "", "N", "N");
        this.create(entity);
    } 
}
The problem is that when this job fires, an exception is thrown:
javax.persistence.TransactionRequiredException: No transactional EntityManager available
and i can't understand why! I schedule the job in this way in a Manager class
JobDetail job = newJob(StartJobSpring.class).withIdentity(//anId)
                .setJobData(//aJobMap).build();
getScheduler().getObject().scheduleJob(job, trigger);
where the scheduler is wired to the manager as
@Autowired
private ApplicationContext applicationContext;
@Bean
SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, JpaTransactionManager transactionManager) {
    SchedulerFactoryBean bean = new SchedulerFactoryBean();
    AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
    jobFactory.setApplicationContext(applicationContext);
    bean.setJobFactory(jobFactory);
    bean.setTransactionManager(transactionManager);
    return bean;
}
The class AutowiringSpringBeanJobFactory is the same as Autowiring.
In my opion there's something wrong in the scheduler wiring. In fact, I don't understand how I can retrieve the application context.
EDIT1: The application context seems to be correctly instanced. The problem could not be there.
EDIT2: I'm using a single configuration bean (not xml files). Here the main methods:
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource   dataSource) {
     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
     entityManagerFactoryBean.setDataSource(dataSource);
     entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
     entityManagerFactoryBean.setPackagesToScan("package");
    Properties jpaProperties = new Properties();
    jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.OracleDialect");
    jpaProperties.put("hibernate.show_sql", "false");
    jpaProperties.put("hibernate.hbm2ddl.auto", "update");
    entityManagerFactoryBean.setJpaProperties(jpaProperties);
    return entityManagerFactoryBean;
}
@Bean
JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory);
    return transactionManager;
}
@Bean
public NoaJobInstancesDAO noaJobInstancesDAO() {
    NoaJobInstancesDAOHibImpl noaJobInstancesDAO = new NoaJobInstancesDAOHibImpl();
    return noaJobInstancesDAO;
}
				
                        
SHORT SOLUTION: let Spring make your jobs through factories.
LONG SOLUTION: here the long description. I have modified my configuration file by importing an xml configuration file:
This way, you have a spring factory which produces jobs instances. Now, here's my updated java config class
I use a bean to schedule jobs. So first I inject factories in this bean. Then when I want to schedule a Job, I use this snippet
I have also modified the job class
Problem solved!