You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2018/03/07 21:10:08 UTC
[airavata] 11/17: Thread safe entity manager factory
This is an automated email from the ASF dual-hosted git repository.
dimuthuupe pushed a commit to branch helix-integration
in repository https://gitbox.apache.org/repos/asf/airavata.git
commit f51f1f16ff687768f7cfade2b92e66b84bd105d8
Author: dimuthu <di...@gmail.com>
AuthorDate: Mon Mar 5 23:08:52 2018 -0500
Thread safe entity manager factory
---
.../core/app/catalog/util/AppCatalogJPAUtils.java | 61 ++++++++++++----------
1 file changed, 33 insertions(+), 28 deletions(-)
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
index 2efd419..4fd4685 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/app/catalog/util/AppCatalogJPAUtils.java
@@ -45,37 +45,42 @@ public class AppCatalogJPAUtils {
@PersistenceContext(unitName = "appcatalog_data")
private static EntityManager appCatEntityManager;
+ private static Object lock = new Object();
+
public static EntityManager getEntityManager() throws ApplicationSettingsException {
- if (factory == null) {
- String connectionProperties = "DriverClassName=" + readServerProperties(APPCATALOG_JDBC_DRIVER) + "," +
- "Url=" + readServerProperties(APPCATALOG_JDBC_URL) + "?autoReconnect=true," +
- "Username=" + readServerProperties(APPCATALOG_JDBC_USER) + "," +
- "Password=" + readServerProperties(APPCATALOG_JDBC_PWD) +
- ",validationQuery=" + readServerProperties(APPCATALOG_VALIDATION_QUERY);
- System.out.println(connectionProperties);
- Map<String, String> properties = new HashMap<String, String>();
- properties.put("openjpa.ConnectionDriverName", "org.apache.commons.dbcp.BasicDataSource");
- properties.put("openjpa.ConnectionProperties", connectionProperties);
- properties.put("openjpa.DynamicEnhancementAgent", "true");
- properties.put("openjpa.RuntimeUnenhancedClasses", "unsupported");
- // For app catalog, we don't need caching
+ synchronized (lock) {
+ if (factory == null) {
+ String connectionProperties = "DriverClassName=" + readServerProperties(APPCATALOG_JDBC_DRIVER) + "," +
+ "Url=" + readServerProperties(APPCATALOG_JDBC_URL) + "?autoReconnect=true," +
+ "Username=" + readServerProperties(APPCATALOG_JDBC_USER) + "," +
+ "Password=" + readServerProperties(APPCATALOG_JDBC_PWD) +
+ ",validationQuery=" + readServerProperties(APPCATALOG_VALIDATION_QUERY);
+ System.out.println(connectionProperties);
+ Map<String, String> properties = new HashMap<String, String>();
+ properties.put("openjpa.ConnectionDriverName", "org.apache.commons.dbcp.BasicDataSource");
+ properties.put("openjpa.ConnectionProperties", connectionProperties);
+ properties.put("openjpa.DynamicEnhancementAgent", "true");
+ properties.put("openjpa.RuntimeUnenhancedClasses", "unsupported");
+ //properties.put("openjpa.Multithreaded", "true");
+ // For app catalog, we don't need caching
// properties.put("openjpa.DataCache","" + readServerProperties(JPA_CACHE_ENABLED) + "(CacheSize=" + Integer.valueOf(readServerProperties(JPA_CACHE_SIZE)) + ", SoftReferenceSize=0)");
// properties.put("openjpa.QueryCache","" + readServerProperties(JPA_CACHE_ENABLED) + "(CacheSize=" + Integer.valueOf(readServerProperties(JPA_CACHE_SIZE)) + ", SoftReferenceSize=0)");
- properties.put("openjpa.RemoteCommitProvider", "sjvm");
- properties.put("openjpa.Log", "DefaultLevel=INFO, Runtime=INFO, Tool=INFO, SQL=INFO");
- properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
- properties.put("openjpa.jdbc.QuerySQLCache", "false");
- properties.put("openjpa.ConnectionFactoryProperties", "PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=31536000, autoReconnect=true");
- factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties);
- }
- // clear cache at entitymangerfactory level
- if (factory.getCache() != null) {
- factory.getCache().evictAll();
- }
- appCatEntityManager = factory.createEntityManager();
- // clear the entitymanager cache
- if (appCatEntityManager != null) {
- appCatEntityManager.clear();
+ properties.put("openjpa.RemoteCommitProvider", "sjvm");
+ properties.put("openjpa.Log", "DefaultLevel=INFO, Runtime=INFO, Tool=INFO, SQL=INFO");
+ properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
+ properties.put("openjpa.jdbc.QuerySQLCache", "false");
+ properties.put("openjpa.ConnectionFactoryProperties", "PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=31536000, autoReconnect=true");
+ factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties);
+ }
+ // clear cache at entitymangerfactory level
+ if (factory.getCache() != null) {
+ factory.getCache().evictAll();
+ }
+ appCatEntityManager = factory.createEntityManager();
+ // clear the entitymanager cache
+ if (appCatEntityManager != null) {
+ appCatEntityManager.clear();
+ }
}
return appCatEntityManager;
}
--
To stop receiving notification emails like this one, please contact
dimuthuupe@apache.org.