@PostConstruct public void configureMergedItems() { String[] tempLocations; try { Field persistenceXmlLocations = DefaultPersistenceUnitManager.class.getDeclaredField("persistenceXmlLocations"); persistenceXmlLocations.setAccessible(true); tempLocations = (String[]) persistenceXmlLocations.get(this); } catch (Exception e) { throw new RuntimeException(e); } for (String legacyLocation : tempLocations) { if (!legacyLocation.endsWith("/persistence.xml")) { //do not add the default JPA persistence location by default mergedPersistenceXmlLocations.add(legacyLocation); } } setPersistenceXmlLocations(mergedPersistenceXmlLocations.toArray(new String[mergedPersistenceXmlLocations.size()])); if (!mergedDataSources.isEmpty()) { setDataSources(mergedDataSources); } }
public void generateSchema() throws MojoFailureException { final Map<String, Object> cfg = buildCfg(); String[] allBasePackages = this.getBasePackages(); getLog().info("Using base packages " + StringUtils.arrayToDelimitedString(allBasePackages, ", ")); final PersistenceProvider provider = new PersistenceProvider(); final DefaultPersistenceUnitManager manager = new DefaultPersistenceUnitManager(); manager.setDefaultPersistenceUnitRootLocation(null); manager.setDefaultPersistenceUnitName("default"); manager.setPackagesToScan(allBasePackages); manager.setPersistenceXmlLocations(new String[0]); manager.afterPropertiesSet(); final SmartPersistenceUnitInfo puInfo = (SmartPersistenceUnitInfo) manager.obtainDefaultPersistenceUnitInfo(); puInfo.setPersistenceProviderPackageName(provider.getClass().getName()); getLog().info("Entities found : " + puInfo.getManagedClassNames().size()); getLog().debug("Managed class names:\n * " + StringUtils.collectionToDelimitedString(puInfo.getManagedClassNames(), "\n * ")); puInfo.getProperties().putAll(cfg); provider.generateSchema(new DelegatingPuInfo(puInfo), cfg); }
@Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof LocalContainerEntityManagerFactoryBean) { ((LocalContainerEntityManagerFactoryBean) bean).setLoadTimeWeaver(this.ltw); } if (bean instanceof DefaultPersistenceUnitManager) { ((DefaultPersistenceUnitManager) bean).setLoadTimeWeaver(this.ltw); } return bean; }
@Bean(name="corePersistenceUnitManager") @Primary public PersistenceUnitManager corePersistenceUnitManager(DatabaseSelector dataSource) { DefaultPersistenceUnitManager persistenceUnitManager = new DefaultPersistenceUnitManager(); persistenceUnitManager.setDefaultDataSource(dataSource); persistenceUnitManager.setPackagesToScan("edu.cmu.cs.lti.discoursedb.core.model"); persistenceUnitManager.setDefaultPersistenceUnitName("corePersistenceUnitManager"); return persistenceUnitManager; }
@Bean(name="systemPersistenceUnitManager") public PersistenceUnitManager systemPersistenceUnitManager() { DefaultPersistenceUnitManager persistenceUnitManager = new DefaultPersistenceUnitManager(); persistenceUnitManager.setDefaultDataSource(this.systemDataSource()); persistenceUnitManager.setPackagesToScan("edu.cmu.cs.lti.discoursedb.system.model"); persistenceUnitManager.setDefaultPersistenceUnitName("systemPersistenceUnitManager"); return persistenceUnitManager; }
/** * Creates a persistence unit manager. * * @return a persistence unit manager. */ protected DefaultPersistenceUnitManager createPersistenceUnitManager() { DefaultPersistenceUnitManager pum = new DefaultPersistenceUnitManager(); // IMPORTANT! - setting these to empty String arrays, this triggers the DefaultPersistenceUnitManager to // behave appropriately and ignore persistence.xml files from META-INF/persistence.xml as well as allowing for // an empty/minimal persistence unit to be created. // // Note that while Intellij complains about "Redundant array creation for calling varargs method", we really do // need to pass an empty array here in order for this code to work properly. pum.setPersistenceXmlLocations(new String[0]); pum.setMappingResources(new String[0]); pum.setPackagesToScan(new String[0]); return pum; }
/** * @return Introduce custom persistence unit manager so that we can use the orm.xml file to rename the table * mapping for Student.java and verify that we pick up the renamed mapping via ProviderAccess. */ @Bean public PersistenceUnitManager persistenceUnitManager(DataSource dataSource) { DefaultPersistenceUnitManager manager = new DefaultPersistenceUnitManager(); manager.setPersistenceXmlLocation("classpath:META-INF/pedal-test-persistence.xml"); manager.setDefaultDataSource(dataSource); return manager; }
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof LocalContainerEntityManagerFactoryBean) { ((LocalContainerEntityManagerFactoryBean) bean).setLoadTimeWeaver(this.ltw); } if (bean instanceof DefaultPersistenceUnitManager) { ((DefaultPersistenceUnitManager) bean).setLoadTimeWeaver(this.ltw); } return bean; }
private PersistenceUnitManager preparePersistentUnitManager(Config config, String prefix, DataSource datasource) { DefaultPersistenceUnitManager persistenceUnitManager = new DefaultPersistenceUnitManager(); persistenceUnitManager.setDefaultDataSource(datasource); persistenceUnitManager.setPersistenceXmlLocations(new String[] {determineConfigProperty(config, prefix, "PersistenceXmlLocation", "META-INF/persistence.xml")}); persistenceUnitManager.setDefaultPersistenceUnitRootLocation(determineConfigProperty(config, prefix, "PersistenceUnitRootLocation", "classpath:")); RicePersistenceUnitPostProcessor postProcessor = new RicePersistenceUnitPostProcessor(); postProcessor.setJtaDataSource(datasource); persistenceUnitManager.setPersistenceUnitPostProcessors(new RicePersistenceUnitPostProcessor[] { postProcessor }); persistenceUnitManager.afterPropertiesSet(); return persistenceUnitManager; }
private EntityManagerFactory createEMFWithSpring(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); // DriverManagerDataSource uses the context classloader for some reason... ClassLoader cl1 = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(EvoEntityManagerFactory.class.getClassLoader()); dataSource.setDriverClassName(org.hsqldb.jdbcDriver.class.getName()); dataSource.setUrl("jdbc:hsqldb:mem:."); dataSource.setUsername("sa"); dataSource.setPassword(""); Thread.currentThread().setContextClassLoader(cl1); LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource); em.setPackagesToScan(""); //search everything on classpath em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); try { /* The code in this class works fine on Mac, but somehow it crashes on Debian (Lux cluster). So, the following is just a workaround, although not fully understood while on Debian it was behaving differently */ Field f = LocalContainerEntityManagerFactoryBean.class.getDeclaredField("internalPersistenceUnitManager"); f.setAccessible(true); DefaultPersistenceUnitManager m = (DefaultPersistenceUnitManager)f.get(em); m.setDefaultPersistenceUnitRootLocation(null); } catch (Exception e) { e.printStackTrace(); } Properties properties = new Properties(); properties.setProperty("hibernate.show_sql", "true"); properties.setProperty("hibernate.dialect", HSQLDialect.class.getName()); properties.setProperty("hibernate.connection.shutdown", "true"); properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); properties.setProperty("hibernate.classloading.use_current_tccl_as_parent", "false"); em.setJpaProperties(properties); em.afterPropertiesSet(); return em.getObject(); }
private void generate() throws Exception { Map<String, Object> map = JpaSchemaGeneratorUtils.buildProperties(this); if (getVendor() == null) { // with persistence.xml Persistence.generateSchema(this.persistenceUnitName, map); } else { PersistenceProvider provider = getProviderClass().newInstance(); List<String> packages = getPackageToScan(); if (packages.isEmpty()) { throw new IllegalArgumentException("packageToScan is required on xml-less mode."); } DefaultPersistenceUnitManager manager = new DefaultPersistenceUnitManager(); manager.setDefaultPersistenceUnitName(getPersistenceUnitName()); manager.setPackagesToScan(packages.toArray(new String[packages.size()])); // issue #22 Field persistenceXmlLocations = manager.getClass().getDeclaredField("persistenceXmlLocations"); persistenceXmlLocations.setAccessible(true); persistenceXmlLocations.set(manager, new String[0]); manager.afterPropertiesSet(); SmartPersistenceUnitInfo info = (SmartPersistenceUnitInfo) manager.obtainDefaultPersistenceUnitInfo(); info.setPersistenceProviderPackageName(provider.getClass().getName()); info.getProperties().putAll(map); // Path persistenceXml = null; /* @formatter:off */ // if (Vendor.datanucleus.equals(getVendor())) { // // datanucleus must need persistence.xml // Path path = Paths.get(project.getBuild().getOutputDirectory(), "META-INF"); // persistenceXml = Files.createTempFile(path, "persistence-", ".xml"); // try (BufferedWriter writer = Files.newBufferedWriter(persistenceXml, StandardCharsets.UTF_8)) { // PrintWriter out = new PrintWriter(writer); // out.println("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); // out.println("<persistence version=\"2.1\""); // out.println(" xmlns=\"http://xmlns.jcp.org/xml/ns/persistence\" // xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""); // out.println(" xsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/persistence // http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd\">"); // out.printf(" <persistence-unit name=\"%s\" transaction-type=\"RESOURCE_LOCAL\">\n", // info.getPersistenceUnitName()); // out.println(" <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>"); // out.println(" <exclude-unlisted-classes>false</exclude-unlisted-classes>"); // out.println(" </persistence-unit>"); // out.println("</persistence>"); // } // map.put(PropertyNames.PROPERTY_PERSISTENCE_XML_FILENAME, persistenceXml.toAbsolutePath().toString()); // // datanucleus does not support execution order... // map.remove(PersistenceUnitProperties.SCHEMA_GENERATION_CREATE_SOURCE); // map.remove(PersistenceUnitProperties.SCHEMA_GENERATION_DROP_SOURCE); // } /* @formatter:on */ try { provider.generateSchema(info, map); } finally { // if (persistenceXml != null) { // Files.delete(persistenceXml); // } } } }
/** * Returns a reference to the internal {@link DefaultPersistenceUnitManager} which is used by this factory bean. * * @return the internal persistence unit manager, will never return null */ protected DefaultPersistenceUnitManager getPersistenceUnitManager() { return persistenceUnitManager; }