Java源码示例:org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo

示例1
/**
 * Show PUI infos
 * 
 * @param pui
 *            PersistenceUnitInfo
 */
private void dumpPersistenceUnitInfo( MutablePersistenceUnitInfo pui )
{
    _Log.debug( "Dumping content for PersistenceUnitInfo of " + pui.getPersistenceUnitName( ) );

    _Log.debug( "** getTransactionType : " + pui.getTransactionType( ) );
    _Log.debug( "** getPersistenceProviderClassName : " + pui.getPersistenceProviderClassName( ) );
    _Log.debug( "** getPersistenceProviderPackageName : " + pui.getPersistenceProviderPackageName( ) );
    _Log.debug( "** getPersistenceUnitName : " + pui.getPersistenceUnitName( ) );
    _Log.debug( "** getPersistenceXMLSchemaVersion : " + pui.getPersistenceXMLSchemaVersion( ) );
    _Log.debug( "** getJtaDataSource : " + pui.getJtaDataSource( ) );
    _Log.debug( "** getManagedClassNames : " + pui.getManagedClassNames( ) );
    _Log.debug( "** getMappingFileNames : " + pui.getMappingFileNames( ) );
    _Log.debug( "** getNonJtaDataSource : " + pui.getNonJtaDataSource( ) );
    _Log.debug( "** getPersistenceUnitRootUrl :" + pui.getPersistenceUnitRootUrl( ) );
    _Log.debug( "** getProperties : " + pui.getProperties( ) );
}
 
示例2
@Test
public void testApplicationManagedEntityManagerWithJtaTransaction() throws Exception {
	Object testEntity = new Object();

	// This one's for the tx (shared)
	EntityManager sharedEm = mock(EntityManager.class);
	given(sharedEm.getTransaction()).willReturn(new NoOpEntityTransaction());

	// This is the application-specific one
	EntityManager mockEm = mock(EntityManager.class);

	given(mockEmf.createEntityManager()).willReturn(sharedEm, mockEm);

	LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit();
	MutablePersistenceUnitInfo pui = ((MutablePersistenceUnitInfo) cefb.getPersistenceUnitInfo());
	pui.setTransactionType(PersistenceUnitTransactionType.JTA);

	JpaTransactionManager jpatm = new JpaTransactionManager();
	jpatm.setEntityManagerFactory(cefb.getObject());

	TransactionStatus txStatus = jpatm.getTransaction(new DefaultTransactionAttribute());

	EntityManagerFactory emf = cefb.getObject();
	assertSame("EntityManagerFactory reference must be cached after init", emf, cefb.getObject());

	assertNotSame("EMF must be proxied", mockEmf, emf);
	EntityManager em = emf.createEntityManager();
	em.joinTransaction();
	assertFalse(em.contains(testEntity));

	jpatm.commit(txStatus);

	cefb.destroy();

	verify(mockEm).joinTransaction();
	verify(mockEm).contains(testEntity);
	verify(mockEmf).close();
}
 
示例3
@Test
public void testApplicationManagedEntityManagerWithJtaTransaction() throws Exception {
	Object testEntity = new Object();

	// This one's for the tx (shared)
	EntityManager sharedEm = mock(EntityManager.class);
	given(sharedEm.getTransaction()).willReturn(new NoOpEntityTransaction());

	// This is the application-specific one
	EntityManager mockEm = mock(EntityManager.class);

	given(mockEmf.createEntityManager()).willReturn(sharedEm, mockEm);

	LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit();
	MutablePersistenceUnitInfo pui = ((MutablePersistenceUnitInfo) cefb.getPersistenceUnitInfo());
	pui.setTransactionType(PersistenceUnitTransactionType.JTA);

	JpaTransactionManager jpatm = new JpaTransactionManager();
	jpatm.setEntityManagerFactory(cefb.getObject());

	TransactionStatus txStatus = jpatm.getTransaction(new DefaultTransactionAttribute());

	EntityManagerFactory emf = cefb.getObject();
	assertSame("EntityManagerFactory reference must be cached after init", emf, cefb.getObject());

	assertNotSame("EMF must be proxied", mockEmf, emf);
	EntityManager em = emf.createEntityManager();
	em.joinTransaction();
	assertFalse(em.contains(testEntity));

	jpatm.commit(txStatus);

	cefb.destroy();

	verify(mockEm).joinTransaction();
	verify(mockEm).contains(testEntity);
	verify(mockEmf).close();
}
 
示例4
@Test
public void testApplicationManagedEntityManagerWithJtaTransaction() throws Exception {
	Object testEntity = new Object();

	// This one's for the tx (shared)
	EntityManager sharedEm = mock(EntityManager.class);
	given(sharedEm.getTransaction()).willReturn(new NoOpEntityTransaction());

	// This is the application-specific one
	EntityManager mockEm = mock(EntityManager.class);

	given(mockEmf.createEntityManager()).willReturn(sharedEm, mockEm);

	LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit();
	MutablePersistenceUnitInfo pui = ((MutablePersistenceUnitInfo) cefb.getPersistenceUnitInfo());
	pui.setTransactionType(PersistenceUnitTransactionType.JTA);

	JpaTransactionManager jpatm = new JpaTransactionManager();
	jpatm.setEntityManagerFactory(cefb.getObject());

	TransactionStatus txStatus = jpatm.getTransaction(new DefaultTransactionAttribute());

	EntityManagerFactory emf = cefb.getObject();
	assertSame("EntityManagerFactory reference must be cached after init", emf, cefb.getObject());

	assertNotSame("EMF must be proxied", mockEmf, emf);
	EntityManager em = emf.createEntityManager();
	em.joinTransaction();
	assertFalse(em.contains(testEntity));

	jpatm.commit(txStatus);

	cefb.destroy();

	verify(mockEm).joinTransaction();
	verify(mockEm).contains(testEntity);
	verify(mockEmf).close();
}
 
示例5
@Override
public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo unit) {
    /*
    unit.addProperty("hibernate.connection.username", getDbUser());
    unit.addProperty("hibernate.connection.password", getDbPassword());
    String jdbcUrl = String.format("jdbc:mysql://%s/%s", getDbHost(), getDbName());
    unit.addProperty("hibernate.connection.url", jdbcUrl);
    unit.addProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
    unit.addProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
    unit.addProperty("org.jboss.logging.provider", "log4j2");
    */
}
 
示例6
@Override
public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
    List<AdditionalHibernateMappings> units = new ArrayList<>();
    String[] unitNames = applicationContext.getBeanNamesForType(AdditionalHibernateMappings.class, false, false);

    for (String name : unitNames) {
        units.add((AdditionalHibernateMappings) applicationContext.getBean(name));
    }

    Collections.sort(units);

    units.forEach(u -> u.processAdditionalUnit(pui));
}
 
示例7
@Override
public void preparePersistenceUnitInfos() {
    MutablePersistenceUnitInfo pui = new MutablePersistenceUnitInfo();
    pui.setPersistenceUnitName(defaultPersistenceUnitName);
    pui.setExcludeUnlistedClasses(true);

    if (pui.getJtaDataSource() == null) {
        pui.setJtaDataSource(jtaDataSource);
    }
    if (pui.getNonJtaDataSource() == null) {
        pui.setNonJtaDataSource(dataSource);
    }

    // override default UUIDGenerator with AssignableUUIDGenerator
    pui.addProperty(org.hibernate.jpa.AvailableSettings.IDENTIFIER_GENERATOR_STRATEGY_PROVIDER, SakaiIdentifierGeneratorProvider.class.getName());
    AssignableUUIDGenerator.setServerConfigurationService(serverConfigurationService);

    postProcessPersistenceUnitInfo(pui);

    Boolean autoddl = serverConfigurationService.getBoolean("auto.ddl", true);
    String hbm2ddl = serverConfigurationService.getString(AvailableSettings.HBM2DDL_AUTO);
    if (autoddl) {
        // if sakai auto.ddl is on then this needs to be set to update
        hbm2ddl = "update";
    }
    pui.getProperties().setProperty(AvailableSettings.HBM2DDL_AUTO, StringUtils.defaultString(hbm2ddl));

    defaultPersistenceUnitInfo = pui;
}
 
示例8
@Override
public void postProcessPersistenceUnitInfo(final MutablePersistenceUnitInfo pui) {
    ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
    scanner.addIncludeFilter(new AnnotationTypeFilter(Entity.class));

    scanner.findCandidateComponents(AbstractEntity.class.getPackage().getName()).forEach(bd -> {
        LOG.debug("Adding JPA entity {}", bd.getBeanClassName());
        pui.addManagedClassName(Objects.requireNonNull(bd.getBeanClassName()));
    });
}
 
示例9
/**
 * Scans for *.orm.xml and adds Entites from classpath.
 *
 * @param pui
 *            the pui
 */
@Override
public void postProcessPersistenceUnitInfo( MutablePersistenceUnitInfo pui )
{
    _Log.info( "Scanning for JPA orm.xml files" );

    for ( File ormFile : getListORMFiles( ) )
    {
        String ormAbsolutePath = ormFile.getAbsolutePath( );
        _Log.info( "Found ORM file : " + ormAbsolutePath );
        pui.addMappingFileName( ormAbsolutePath.substring( ormAbsolutePath.indexOf( CLASSPATH_PATH_IDENTIFIER ) ) );
    }

    _Log.info( "Scanning for JPA entities..." );

    Set<String> entityClasses = AnnotationUtil.find( Entity.class.getName( ) );
    entityClasses.addAll( AnnotationUtil.find( Embeddable.class.getName( ) ) );
    entityClasses.addAll( AnnotationUtil.find( MappedSuperclass.class.getName( ) ) );

    for ( String strClass : entityClasses )
    {
        _Log.info( "Found entity class : " + strClass );

        if ( !pui.getManagedClassNames( ).contains( strClass ) )
        {
            pui.addManagedClassName( strClass );
        }
    }

    if ( _Log.isDebugEnabled( ) )
    {
        dumpPersistenceUnitInfo( pui );
    }
}
 
示例10
@Override
public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
    List<AdditionalHibernateMappings> units = new ArrayList<>();
    String[] unitNames = applicationContext.getBeanNamesForType(AdditionalHibernateMappings.class, false, false);

    for (String name : unitNames) {
        units.add((AdditionalHibernateMappings) applicationContext.getBean(name));
    }

    Collections.sort(units);

    units.forEach(u -> u.processAdditionalUnit(pui));
}
 
示例11
@Override
public void preparePersistenceUnitInfos() {
    MutablePersistenceUnitInfo pui = new MutablePersistenceUnitInfo();
    pui.setPersistenceUnitName(defaultPersistenceUnitName);
    pui.setExcludeUnlistedClasses(true);

    if (pui.getJtaDataSource() == null) {
        pui.setJtaDataSource(jtaDataSource);
    }
    if (pui.getNonJtaDataSource() == null) {
        pui.setNonJtaDataSource(dataSource);
    }

    // override default UUIDGenerator with AssignableUUIDGenerator
    pui.addProperty(org.hibernate.jpa.AvailableSettings.IDENTIFIER_GENERATOR_STRATEGY_PROVIDER, SakaiIdentifierGeneratorProvider.class.getName());
    AssignableUUIDGenerator.setServerConfigurationService(serverConfigurationService);

    postProcessPersistenceUnitInfo(pui);

    Boolean autoddl = serverConfigurationService.getBoolean("auto.ddl", true);
    String hbm2ddl = serverConfigurationService.getString(AvailableSettings.HBM2DDL_AUTO);
    if (autoddl) {
        // if sakai auto.ddl is on then this needs to be set to update
        hbm2ddl = "update";
    }
    pui.getProperties().setProperty(AvailableSettings.HBM2DDL_AUTO, StringUtils.defaultString(hbm2ddl));

    defaultPersistenceUnitInfo = pui;
}
 
示例12
/**
      * {@inheritDoc}
      */
     @Override
     public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
         pui.setExcludeUnlistedClasses(DEFAULT_EXCLUDE_UNLISTED_CLASSES);
processConverterPackages(pui);
         for (String managedClassName : getManagedClassNames()) {
             pui.addManagedClassName(managedClassName);
         }
     }
 
示例13
/**
       * Determines whether the managed classes contain {@link Converter} annotations and adds them if necessary.
       *
       * @param pui the list of current list of managed classes.
       */
private void processConverterPackages(MutablePersistenceUnitInfo pui) {
	if (converterPackageNames != null) {
		for (String converterPackage : converterPackageNames) {
			// Code below lifted and modified from Spring's DefaultPersistenceUnitManager
			try {
				String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
						+ ClassUtils.convertClassNameToResourcePath(converterPackage)
						+ ENTITY_CLASS_RESOURCE_PATTERN;
				if (LOG.isInfoEnabled()) {
					LOG.info(getPersistenceUnitName() + ": Scanning for JPA @Converter annotations in: "
							+ pattern);
				}
				Resource[] resources = this.resourcePatternResolver.getResources(pattern);
				MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(
						this.resourcePatternResolver);
				for (Resource resource : resources) {
					if (!resource.isReadable()) {
						continue;
					}
					if (LOG.isDebugEnabled()) {
						LOG.debug(getPersistenceUnitName() + ": Found Matching Resource: " + resource);
					}
					MetadataReader reader = readerFactory.getMetadataReader(resource);
					String className = reader.getClassMetadata().getClassName();
					if (!pui.getManagedClassNames().contains(className)
							&& converterAnnotationTypeFilter.match(reader, readerFactory)) {
						pui.addManagedClassName(className);
						if (LOG.isDebugEnabled()) {
							LOG.debug(getPersistenceUnitName()
									+ ": Registering Converter in JPA Persistence Unit: " + className);
						}
					}
				}
			} catch (IOException ex) {
				throw new PersistenceException("Failed to scan classpath converters in package: "
						+ converterPackage, ex);
			}
		}
	}
}
 
示例14
@Override
public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
    pui.getManagedClassNames().add(TestEntity3.class.getName());
}
 
示例15
void processAdditionalUnit(MutablePersistenceUnitInfo pui); 
示例16
void processAdditionalUnit(MutablePersistenceUnitInfo pui);