Juan Hernandez has posted comments on this change. Change subject: core: Cache JNDI lookups and InitialContext creation ......................................................................
Patch Set 1: (4 inline comments) .................................................... File backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/EJBUtilsStrategy.java Line 53: Line 54: if (context == null) Line 55: context = new InitialContext(); Line 56: Line 57: return context; You could use the double check with volatile idiom to avoid a synchronization with every call to the method: private static volatile InitialContext context; private static InitialContext getInitialContext() throws NamingException { if (context == null) { synchronized(EJBUtilsStrategy.class) { if (context == null) { context = new InitialContext(); } } } } However synchronization is quite fast nowadays, so this is probably overkill. Just consider it. Line 58: } Line 59: Line 60: /** Line 61: * Finds a bean according to its JNDI name Line 106: jndiNameSB.append(jndiNameFromMap); Line 107: jndiNameSB.append(getBeanSuffix(beanType, proxyType)); Line 108: Line 109: if (proxyType == BeanProxyType.LOCAL) { Line 110: // context = new InitialContext(); Don't leave this commented. Line 111: context = getInitialContext(); Line 112: } Line 113: Line 114: // appends "local" or "remote" to the jndi name, depends on the Line 130: return null; Line 131: } Line 132: } Line 133: Line 134: private <T> T getReference(String refName) throws NamingException { I think that this method should be synchronized, that or use a concurrent hash map, otherwise we get exposed to random bugs. Line 135: if (cachedJNDIReferences.containsKey(refName)) { Line 136: return (T) cachedJNDIReferences.get(refName); Line 137: } Line 138: Object reference = getInitialContext().lookup(refName); Line 133: Line 134: private <T> T getReference(String refName) throws NamingException { Line 135: if (cachedJNDIReferences.containsKey(refName)) { Line 136: return (T) cachedJNDIReferences.get(refName); Line 137: } I would suggest to do as follows: T reference = (T) cachedJNDIReferences.get(refName); if (reference != null) { return reference; } That way you do one call to the map instead of two, thus reducing contention and chances of races. Line 138: Object reference = getInitialContext().lookup(refName); Line 139: cachedJNDIReferences.put(refName, reference); Line 140: Line 141: return (T) reference; -- To view, visit http://gerrit.ovirt.org/16612 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I45ae8d0a90a03c498e19e5429d196924671c073b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liran Zelkha <liran.zel...@gmail.com> Gerrit-Reviewer: Juan Hernandez <juan.hernan...@redhat.com> Gerrit-Reviewer: Yair Zaslavsky <yzasl...@redhat.com> Gerrit-Reviewer: oVirt Jenkins CI Server _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches