Advertisement
Guest User

Untitled

a guest
Jul 5th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.69 KB | None | 0 0
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
  5. http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
  6. version="2.1">
  7.  
  8. <persistence-unit name="my-persistence-unit"
  9. transaction-type="RESOURCE_LOCAL">
  10. <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  11. <properties>
  12. <!-- Database Properties -->
  13. <property name="javax.persistence.jdbc.url"
  14. value="jdbc:postgresql://localhost:5432/my-database" />
  15. <property name="javax.persistence.jdbc.user" value="login" />
  16. <property name="javax.persistence.jdbc.password" value="password" />
  17.  
  18. <!-- Hibernate Properties -->
  19. <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
  20. <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
  21. <property name="hibernate.default_schema" value="public" />
  22. <property name="hibernate.hbm2ddl.auto" value="update" />
  23. <property name="hibernate.show_sql" value="false" />
  24. <property name="hibernate.format_sql" value="true" />
  25.  
  26. <!-- Connection Pool -->
  27. <property name="hibernate.c3p0.min_size" value="5" />
  28. <property name="hibernate.c3p0.max_size" value="20" />
  29. <property name="hibernate.c3p0.timeout" value="500" />
  30. <property name="hibernate.c3p0.max_statements" value="50" />
  31. <property name="hibernate.c3p0.idle_test_period" value="2000" />
  32. </properties>
  33. </persistence-unit>
  34.  
  35. </persistence>
  36.  
  37. <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
  38. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  39. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
  40. http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
  41. version="2.1">
  42.  
  43. <persistence-unit name="my.persistence.unit" transaction-type="RESOURCE_LOCAL">
  44.  
  45. <provider>my.custom.package.HibernateDynamicPersistenceProvider</provider>
  46.  
  47. <exclude-unlisted-classes>true</exclude-unlisted-classes>
  48.  
  49. <properties>
  50. <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
  51. <property name="hibernate.max_fetch_depth" value="30" />
  52. <property name="hibernate.hbm2ddl.auto" value="update" />
  53. <property name="hibernate.show_sql" value="true" />
  54. </properties>
  55. </persistence-unit>
  56.  
  57. /src/main/resources/META-INF/services/javax.persistence.spi.PersistenceProvider
  58.  
  59. my.custom.package.HibernateDynamicPersistenceProvider
  60.  
  61. public class HibernateDynamicPersistenceProvider extends HibernatePersistenceProvider implements PersistenceProvider {
  62.  
  63. private static final Logger log = Logger.getLogger(HibernateDynamicPersistenceProvider.class);
  64.  
  65. public static final String CUSTOM_CLASSES = "CUSTOM_CLASSES";
  66.  
  67. @Override
  68. protected EntityManagerFactoryBuilder getEntityManagerFactoryBuilder(
  69. PersistenceUnitDescriptor persistenceUnitDescriptor, Map integration, ClassLoader providedClassLoader) {
  70.  
  71. if(persistenceUnitDescriptor instanceof ParsedPersistenceXmlDescriptor) {
  72. ParsedPersistenceXmlDescriptor tmp = (ParsedPersistenceXmlDescriptor) persistenceUnitDescriptor;
  73. Object object = integration.get("CUSTOM_CLASSES");
  74. }
  75.  
  76. return super.getEntityManagerFactoryBuilder(persistenceUnitDescriptor, integration, providedClassLoader);
  77. }
  78.  
  79. protected EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String persistenceUnitName, Map properties, ClassLoader providedClassLoader) {
  80. log.debug( String.format("Attempting to obtain correct EntityManagerFactoryBuilder for persistenceUnitName : %s", persistenceUnitName ));
  81.  
  82. final Map integration = wrap( properties );
  83. final List<ParsedPersistenceXmlDescriptor> units;
  84. try {
  85. units = PersistenceXmlParser.locatePersistenceUnits( integration );
  86. }
  87. catch (Exception e) {
  88. log.debug( "Unable to locate persistence units", e );
  89. throw new PersistenceException( "Unable to locate persistence units", e );
  90. }
  91.  
  92. log.debug( String.format("Located and parsed %s persistence units; checking each", units.size() ));
  93.  
  94. if ( persistenceUnitName == null && units.size() > 1 ) {
  95. // no persistence-unit name to look for was given and we found multiple persistence-units
  96. throw new PersistenceException( "No name provided and multiple persistence units found" );
  97. }
  98.  
  99. for ( ParsedPersistenceXmlDescriptor persistenceUnit : units ) {
  100. log.debug( String.format(
  101. "Checking persistence-unit [name=%s, explicit-provider=%s] against incoming persistence unit name [%s]",
  102. persistenceUnit.getName(),
  103. persistenceUnit.getProviderClassName(),
  104. persistenceUnitName
  105. ));
  106.  
  107. final boolean matches = persistenceUnitName == null || persistenceUnit.getName().equals( persistenceUnitName );
  108. if ( !matches ) {
  109. log.debug( "Excluding from consideration due to name mis-match" );
  110. continue;
  111. }
  112.  
  113. // See if we (Hibernate) are the persistence provider
  114.  
  115. String extractRequestedProviderName = ProviderChecker.extractRequestedProviderName(persistenceUnit, integration);
  116.  
  117. if ( ! ProviderChecker.isProvider( persistenceUnit, properties ) && !(this.getClass().getName().equals(extractRequestedProviderName))) {
  118. log.debug( "Excluding from consideration due to provider mis-match" );
  119. continue;
  120. }
  121.  
  122. return getEntityManagerFactoryBuilder( persistenceUnit, integration, providedClassLoader );
  123. }
  124.  
  125. log.debug( "Found no matching persistence units" );
  126. return null;
  127. }
  128. }
  129.  
  130. protected EntityManagerFactoryBuilder getEntityManagerFactoryBuilder(
  131. PersistenceUnitDescriptor persistenceUnitDescriptor, Map integration, ClassLoader providedClassLoader)
  132.  
  133. tmp.addClasses("class1", "class2");
  134.  
  135. protected EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String persistenceUnitName, Map properties, ClassLoader providedClassLoader)
  136.  
  137. String extractRequestedProviderName = ProviderChecker.extractRequestedProviderName(persistenceUnit, integration);
  138.  
  139. if ( ! ProviderChecker.isProvider( persistenceUnit, properties ) && !(this.getClass().getName().equals(extractRequestedProviderName))) {
  140. log.debug( "Excluding from consideration due to provider mis-match" );
  141. continue;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement