@Test public void testExampleComplex() throws Exception { DataSource ds = new DriverManagerDataSource(); String resource = "/org/springframework/orm/jpa/persistence-complex.xml"; MapDataSourceLookup dataSourceLookup = new MapDataSourceLookup(); Map<String, DataSource> dataSources = new HashMap<String, DataSource>(); dataSources.put("jdbc/MyPartDB", ds); dataSources.put("jdbc/MyDB", ds); dataSourceLookup.setDataSources(dataSources); PersistenceUnitReader reader = new PersistenceUnitReader( new PathMatchingResourcePatternResolver(), dataSourceLookup); PersistenceUnitInfo[] info = reader.readPersistenceUnitInfos(resource); assertEquals(2, info.length); PersistenceUnitInfo pu1 = info[0]; assertEquals("pu1", pu1.getPersistenceUnitName()); assertEquals("com.acme.AcmePersistence", pu1.getPersistenceProviderClassName()); assertEquals(1, pu1.getMappingFileNames().size()); assertEquals("ormap2.xml", pu1.getMappingFileNames().get(0)); assertEquals(1, pu1.getJarFileUrls().size()); assertEquals(new ClassPathResource("order.jar").getURL(), pu1.getJarFileUrls().get(0)); assertFalse(pu1.excludeUnlistedClasses()); assertSame(PersistenceUnitTransactionType.RESOURCE_LOCAL, pu1.getTransactionType()); Properties props = pu1.getProperties(); assertEquals(2, props.keySet().size()); assertEquals("on", props.getProperty("com.acme.persistence.sql-logging")); assertEquals("bar", props.getProperty("foo")); assertNull(pu1.getNonJtaDataSource()); assertSame(ds, pu1.getJtaDataSource()); assertFalse("Exclude unlisted should default false in 1.0.", pu1.excludeUnlistedClasses()); PersistenceUnitInfo pu2 = info[1]; assertSame(PersistenceUnitTransactionType.JTA, pu2.getTransactionType()); assertEquals("com.acme.AcmePersistence", pu2.getPersistenceProviderClassName()); assertEquals(1, pu2.getMappingFileNames().size()); assertEquals("order2.xml", pu2.getMappingFileNames().get(0)); // the following assertions fail only during coverage runs // assertEquals(1, pu2.getJarFileUrls().size()); // assertEquals(new ClassPathResource("order-supplemental.jar").getURL(), pu2.getJarFileUrls().get(0)); assertTrue(pu2.excludeUnlistedClasses()); assertNull(pu2.getJtaDataSource()); assertEquals(ds, pu2.getNonJtaDataSource()); assertTrue("Exclude unlisted should be true when no value.", pu2.excludeUnlistedClasses()); }
/** * Specify the JDBC DataSources that the JPA persistence provider is supposed * to use for accessing the database, resolving data source names in * {@code persistence.xml} against Spring-managed DataSources. * <p>The specified Map needs to define data source names for specific DataSource * objects, matching the data source names used in {@code persistence.xml}. * If not specified, data source names will be resolved as JNDI names instead * (as defined by standard JPA). * @see org.springframework.jdbc.datasource.lookup.MapDataSourceLookup */ public void setDataSources(Map<String, DataSource> dataSources) { this.dataSourceLookup = new MapDataSourceLookup(dataSources); }