Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import jakarta.persistence.spi.ClassTransformer;
import jakarta.persistence.spi.PersistenceUnitInfo;
import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.cfg.JdbcSettings;
import org.hibernate.cfg.SchemaToolingSettings;
import org.hibernate.jpa.HibernatePersistenceProvider;
Expand All @@ -26,6 +27,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand All @@ -45,6 +47,7 @@ public class EntityManagerProvider implements Provider<EntityManager> {
private static final Logger LOGGER = LoggerFactory.getLogger(EntityManagerProvider.class);

private final String dataSourceName;
private final String dialect;
private final String modelsJarUrlPattern;
private final ThreadLocal<Deque<EntityManager>> currentEntityManager;
private Provider<DataSourceManager> dataSourceManagerProvider;
Expand All @@ -59,7 +62,23 @@ public class EntityManagerProvider implements Provider<EntityManager> {
*/
public EntityManagerProvider(final String dataSourceName, final String modelsJarUrlPattern) {

this(dataSourceName, null, modelsJarUrlPattern);
}

/**
* Build a new instance.
*
* @param dataSourceName The data source name
* @param dialect The dialect
* @param modelsJarUrlPattern The pattern to identify JAR containing models
* @since 1.11.1
*/
public EntityManagerProvider(final String dataSourceName,
final String dialect,
final String modelsJarUrlPattern) {

this.dataSourceName = dataSourceName;
this.dialect = dialect;
this.modelsJarUrlPattern = modelsJarUrlPattern;
this.currentEntityManager = new ThreadLocal<>();
}
Expand Down Expand Up @@ -150,11 +169,16 @@ private void createEntityManagerFactoryIfNeeded() {
final List<URL> javaFileUrlList = createModelsJarFileUrls();

// Creates entity manager
final Map<String, Object> properties = new HashMap<>();
properties.put(JdbcSettings.JAKARTA_JTA_DATASOURCE, this.dataSourceManagerProvider.get().getDataSource(dataSourceName));
properties.put(SchemaToolingSettings.HBM2DDL_AUTO, "none");
if (StringUtils.isNotBlank(dialect)) {
properties.put(JdbcSettings.DIALECT, dialect);
}

this.entityManagerFactory = new HibernatePersistenceProvider().createContainerEntityManagerFactory(
new PersistenceUnitInfoIml(dataSourceName, javaFileUrlList),
Map.of(
JdbcSettings.JAKARTA_JTA_DATASOURCE, this.dataSourceManagerProvider.get().getDataSource(dataSourceName),
SchemaToolingSettings.HBM2DDL_AUTO, "none"));
properties);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,14 @@ protected void configure() {
}

for (final String dataSourceName : dataSourceNameSet) {
final EntityManagerProvider entityManagerProvider = new EntityManagerProvider(dataSourceName, modelsJarUrlPattern);
// Create entity manager
final String dialect = ConfigurationUtils.getStringOrDefault(
this.configuration,
"voidframework.datasource." + dataSourceName + ".dialect",
null);
final EntityManagerProvider entityManagerProvider = new EntityManagerProvider(dataSourceName, dialect, modelsJarUrlPattern);

// Guice
requestInjection(entityManagerProvider);
bind(EntityManager.class).annotatedWith(Names.named(dataSourceName)).toProvider(entityManagerProvider);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,17 @@ voidframework {
# WE RECOMMEND THAT YOU ADAPT THIS CONFIGURATION TO YOUR APPLICATION TO IMPROVE THE INITIALIZATION TIME
modelsJarUrlPattern = "auto"
}

# Data source configuration
# datasource {

# Default data source
# default {

# Defines the Hibernate SQL dialect.
# By default (value is null or empty), Hibernate will attempt to automatically determine the
# dialect from the JDBC URL and JDBC metadata, so this setting is not usually necessary
# dialect = null
# }
# }
}