为什么Playframework 2.5中的实体管理器仍然为空?

时间:2016-06-20 12:15:36

标签: java spring jpa entitymanager playframework-2.5

我想将Playframework 2.5与Spring和JPA一起使用。我找到了以下模板https://github.com/jamesward/play-java-spring,它完美地运行,遗憾的是它不适用于Playframework 2.5。所以我决定调整这个模板并为Playframework 2.5创建自己的模板。但是,我的控制器entitymanager中的Application仍为null。我究竟做错了什么?我的代码如下所示:

  • AppConfig.java

    package config;
    @Configuration
    @ComponentScan({"daos","services","controllers","models"})
    public class AppConfig {
    
    }
    
  • DataConfig.java

    package config;
    @Configuration
    @EnableTransactionManagement
    public class DataConfig
    {
    
    @Bean
    public EntityManagerFactory entityManagerFactory() {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setShowSql(true);
        vendorAdapter.setGenerateDdl(true);
        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactory.setPackagesToScan("models");
        entityManagerFactory.setJpaVendorAdapter(vendorAdapter);
        entityManagerFactory.setDataSource(dataSource());
        entityManagerFactory.setJpaPropertyMap(new HashMap<String, String>(){{
    
            put("hibernate.hbm2ddl.auto", "create-drop"); 
    
            put("hibernate.dialect","org.hibernate.dialect.PostgreSQLDialect"); 
        }});
        entityManagerFactory.afterPropertiesSet();
    
        return entityManagerFactory.getObject();
    }
    
    @Bean
    public PlatformTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager(entityManagerFactory());
    
        return transactionManager;
    }
    
    @Bean
    public DataSource dataSource() {
    
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
    
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1");
    
        return dataSource;
    }
    

    }

  • Global.java

    package config;
    @Singleton
    @Configuration
    public class Global 
    {
        private ConfigurableApplicationContext context;
    
    @Inject
    public Global(ApplicationLifecycle lifecyle)
    {
        this.context = new AnnotationConfigApplicationContext(AppConfig.class, DataConfig.class);
        lifecyle.addStopHook(()-> {
            context.close();
            return CompletableFuture.completedFuture(null);
        });
    }
    }
    
  • Application.java

    package controllers;
    @Controller
    @Transactional
    @Component
    public class Application extends play.mvc.Controller
    {
    @PersistenceContext
    private EntityManager em;
    
    @Transactional
    public Result index()
    {
        System.out.println("******************* EM " + this.em +" *************************");
    
        return ok(index.render());
    }
    }
    

感谢您的帮助!

0 个答案:

没有答案