Author: jacopoc
Date: Tue May 29 13:57:19 2012
New Revision: 1343728
URL: http://svn.apache.org/viewvc?rev=1343728&view=rev
Log:
Improved code that manages the cache:
* protected the UtilCache object (static field) by making it private and final
* removed unnecessary synchronization
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java?rev=1343728&r1=1343727&r2=1343728&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/JNDIContextFactory.java
Tue May 29 13:57:19 2012
@@ -34,7 +34,7 @@ import org.ofbiz.base.util.cache.UtilCac
public class JNDIContextFactory {
public static final String module = JNDIContextFactory.class.getName();
- static UtilCache<String, InitialContext> contexts =
UtilCache.createUtilCache("entity.JNDIContexts", 0, 0);
+ private static final UtilCache<String, InitialContext> contexts =
UtilCache.createUtilCache("entity.JNDIContexts", 0, 0);
/**
* Return the initial context according to the entityengine.xml parameters
that correspond to the given prefix
@@ -44,45 +44,39 @@ public class JNDIContextFactory {
InitialContext ic = contexts.get(jndiServerName);
if (ic == null) {
- synchronized (JNDIContextFactory.class) {
- ic = contexts.get(jndiServerName);
+ JNDIConfigUtil.JndiServerInfo jndiServerInfo =
JNDIConfigUtil.getJndiServerInfo(jndiServerName);
- if (ic == null) {
- JNDIConfigUtil.JndiServerInfo jndiServerInfo =
JNDIConfigUtil.getJndiServerInfo(jndiServerName);
+ if (jndiServerInfo == null) {
+ throw new GenericConfigException("ERROR: no jndi-server
definition was found with the name " + jndiServerName + " in jndiservers.xml");
+ }
+
+ try {
+ if (UtilValidate.isEmpty(jndiServerInfo.contextProviderUrl)) {
+ ic = new InitialContext();
+ } else {
+ Hashtable<String, Object> h = new Hashtable<String,
Object>();
+
+ h.put(Context.INITIAL_CONTEXT_FACTORY,
jndiServerInfo.initialContextFactory);
+ h.put(Context.PROVIDER_URL,
jndiServerInfo.contextProviderUrl);
+ if (UtilValidate.isNotEmpty(jndiServerInfo.urlPkgPrefixes))
+ h.put(Context.URL_PKG_PREFIXES,
jndiServerInfo.urlPkgPrefixes);
+
+ if
(UtilValidate.isNotEmpty(jndiServerInfo.securityPrincipal))
+ h.put(Context.SECURITY_PRINCIPAL,
jndiServerInfo.securityPrincipal);
+ if
(UtilValidate.isNotEmpty(jndiServerInfo.securityCredentials))
+ h.put(Context.SECURITY_CREDENTIALS,
jndiServerInfo.securityCredentials);
- if (jndiServerInfo == null) {
- throw new GenericConfigException("ERROR: no
jndi-server definition was found with the name " + jndiServerName + " in
jndiservers.xml");
- }
-
- try {
- if
(UtilValidate.isEmpty(jndiServerInfo.contextProviderUrl)) {
- ic = new InitialContext();
- } else {
- Hashtable<String, Object> h = new
Hashtable<String, Object>();
-
- h.put(Context.INITIAL_CONTEXT_FACTORY,
jndiServerInfo.initialContextFactory);
- h.put(Context.PROVIDER_URL,
jndiServerInfo.contextProviderUrl);
- if
(UtilValidate.isNotEmpty(jndiServerInfo.urlPkgPrefixes))
- h.put(Context.URL_PKG_PREFIXES,
jndiServerInfo.urlPkgPrefixes);
-
- if
(UtilValidate.isNotEmpty(jndiServerInfo.securityPrincipal))
- h.put(Context.SECURITY_PRINCIPAL,
jndiServerInfo.securityPrincipal);
- if
(UtilValidate.isNotEmpty(jndiServerInfo.securityCredentials))
- h.put(Context.SECURITY_CREDENTIALS,
jndiServerInfo.securityCredentials);
-
- ic = new InitialContext(h);
- }
- } catch (Exception e) {
- String errorMsg = "Error getting JNDI initial context
for server name " + jndiServerName;
-
- Debug.logError(e, errorMsg, module);
- throw new GenericConfigException(errorMsg, e);
- }
-
- if (ic != null) {
- contexts.put(jndiServerName, ic);
- }
+ ic = new InitialContext(h);
}
+ } catch (Exception e) {
+ String errorMsg = "Error getting JNDI initial context for
server name " + jndiServerName;
+
+ Debug.logError(e, errorMsg, module);
+ throw new GenericConfigException(errorMsg, e);
+ }
+
+ if (ic != null) {
+ ic = contexts.putIfAbsentAndGet(jndiServerName, ic);
}
}