Witam, chciałem podpiąć pod prostą aplikacje spring mvc hiernate'a. Config wygląda tak:
@Configuration
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
public class JdbcConfig
{
@Autowired
Environment env;
@Bean
public DataSource dataSource()
{
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(env.getProperty("dataSource.driverClassName"));
ds.setUrl(env.getProperty("dataSource.Url"));
ds.setUsername(env.getProperty("dataSource.username"));
ds.setPassword(env.getProperty("dataSource.password"));
return ds;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource ds, JpaVendorAdapter jpaVendorAdapter)
{
LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
emfb.setDataSource(ds);
emfb.setJpaVendorAdapter(jpaVendorAdapter);
emfb.setPackagesToScan("app.model");
return emfb;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter()
{
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setDatabase(Database.POSTGRESQL);
adapter.setShowSql(true);
adapter.setGenerateDdl(true);
adapter.setDatabasePlatform(env.getProperty("dialect"));
return adapter;
}
@Bean
public JpaTransactionManager jpaTransactionManager(EntityManagerFactory em)
{
return new JpaTransactionManager(em);
}
}
Na początku chciałbym żeby ktoś rzucił okiem czy tan konfiguracja jest poprawna i czy przypadkiem nie "zgubiłem" jakiego Bean'a. Pierwszym problem na jaki sie natkąłem to NullPointerException po tym jak dodałem
PersistenceAnnotationBeanPostProcessor Bean
do configu(http://pastebin.com/1BcLA3kC). Połączenie z bazą jest poprawne, ręczna obsługa transakcji działa, ddl przechodzi i ttworzy odpowiednie tabele. Zaczałem szukać błedu gdzie indziej. Problem sie pojawił przy transakcjach. Mam klase z adnotacjami @Repository, @Transacional. Niestety transakcje nie chcą mi sie otwierać ani zamykać. Gdzie jest problem? Co nie tak skonfigurowałem? Skąd ten Exception przy PersistenceAnnotationBeanPostProcessor
Edit:
Problem powodował
@PropertySource
, okazało się że gdy w configu nie ma PersistenceAnnotationBeanPostProcessor
pole Environment zawiera wszystko co potrzebne do połączenia z bazą w momencie kiedy dodaje tego Bean do configu Environment od razu jest nullem i stąd ten problem. Teraz pytanie jak i dlaczego PersistenceAnnotationBeanPostProcessor ma wpływ na PropertySource i klase Environment i w jaki sposób moge to naprawić? @Shalom mógłbyś rzucić okiem ? :)