List of usage examples for org.springframework.transaction.interceptor TransactionInterceptor setBeanFactory
@Override public void setBeanFactory(@Nullable BeanFactory beanFactory)
From source file:com.google.code.guice.repository.configuration.JpaRepositoryModule.java
/** * Creates Spring application context based on found persistence units. Context will be initialized with multiple * persistence units support.//from w w w.ja v a 2 s. c o m * * @param configurationManager configuration manager with persistence units configurations. * * @return initialized Spring context * * @see <a href="https://github.com/SpringSource/spring-data-jpa/blob/master/src/test/resources/multiple-entity-manager-integration-context.xml"/> */ protected ApplicationContext createApplicationContext( PersistenceUnitsConfigurationManager configurationManager) { GenericApplicationContext context = new GenericApplicationContext(); String abstractEMFBeanName = "abstractEntityManagerFactory"; context.registerBeanDefinition(abstractEMFBeanName, BeanDefinitionBuilder.genericBeanDefinition(LocalContainerEntityManagerFactoryBean.class) .setAbstract(true).getBeanDefinition()); Iterable<PersistenceUnitConfiguration> configurations = configurationManager.getConfigurations(); for (PersistenceUnitConfiguration configuration : configurations) { String persistenceUnitName = configuration.getPersistenceUnitName(); logger.info(String.format("Processing persistence unit: [%s]", persistenceUnitName)); Map props = configuration.getProperties(); String entityManagerFactoryName = "entityManagerFactory#" + persistenceUnitName; BeanDefinitionBuilder emfFactoryDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition() .setParentName(abstractEMFBeanName).addPropertyValue("persistenceUnitName", persistenceUnitName) .addPropertyValue("jpaProperties", props); // Additional EntityManagerFactory properties for Spring EMFBean initialization - s.a. jpaDialect, jpaVendorAdapter Map<String, Object> properties = getAdditionalEMFProperties(persistenceUnitName); if (properties != null) { for (String propertyName : properties.keySet()) { Object value = properties.get(propertyName); if (value != null) { logger.info( String.format("Found additional EMF property: [%s] -> [%s]", propertyName, value)); emfFactoryDefinitionBuilder.addPropertyValue(propertyName, value); } } } context.registerBeanDefinition(entityManagerFactoryName, emfFactoryDefinitionBuilder.getBeanDefinition()); // Naming is important - it's needed for later TransactionManager resolution based on @Transactional value with persistenceUnitName context.registerBeanDefinition(persistenceUnitName, BeanDefinitionBuilder.genericBeanDefinition(JpaTransactionManager.class) .addPropertyReference("entityManagerFactory", entityManagerFactoryName) .getBeanDefinition()); PlatformTransactionManager transactionManager = context.getBean(persistenceUnitName, PlatformTransactionManager.class); TransactionInterceptor transactionInterceptor = new TransactionInterceptor(transactionManager, createTransactionAttributeSource()); transactionInterceptor.setBeanFactory(context); // Wiring components EntityManagerFactory emf = context.getBean(entityManagerFactoryName, EntityManagerFactory.class); EntityManager entityManager = SharedEntityManagerCreator.createSharedEntityManager(emf, props); configuration.setEntityManager(entityManager); configuration.setEntityManagerFactory(emf); configuration.setTransactionManager(transactionManager); configuration.setTransactionManagerName(persistenceUnitName); configuration.setTransactionInterceptor(transactionInterceptor); // Default bindings for EMF & Transaction Manager - they needed for repositories with @Transactional without value if (configuration.isDefault()) { context.registerAlias(entityManagerFactoryName, "entityManagerFactory"); context.registerAlias(persistenceUnitName, "transactionManager"); } } return context; }