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);