There is another possible solution / improvement we might want to think of: Switch our logging system to slf4j facade logging, which addresses - besides a lot of other cool things - the parameter evaluation issue with varags and late concatenation.
See: http://www.slf4j.org/ http://www.slf4j.org/faq.html On 03.05.11 09:07, Rene Gielen wrote: > Lukasz, > > why were you removing the logging gates, aka the if blocks around log > statements? I agree that for simple String parameters (without > concatenation) they might be left out, but for everything else they > really help a lot for performance - that's why I use them in general. > > We should even consider reviewing S2 code if there are more unguarded > log statements, to squeeze out the last bit of performance :) > > See also http://logging.apache.org/log4j/1.2/faq.html#a2.3 > > - René > > On 01.05.11 16:29, lukaszlen...@apache.org wrote: >> Author: lukaszlenart >> Date: Sun May 1 14:29:02 2011 >> New Revision: 1098322 >> >> URL: http://svn.apache.org/viewvc?rev=1098322&view=rev >> Log: >> Removes unnecessary checking for log level and uses ConcurrentHashMap >> instead of HashMap >> >> Modified: >> >> struts/sandbox/trunk/struts2-cdi-plugin/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java >> >> Modified: >> struts/sandbox/trunk/struts2-cdi-plugin/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java >> URL: >> http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-cdi-plugin/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java?rev=1098322&r1=1098321&r2=1098322&view=diff >> ============================================================================== >> --- >> struts/sandbox/trunk/struts2-cdi-plugin/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java >> (original) >> +++ >> struts/sandbox/trunk/struts2-cdi-plugin/src/main/java/org/apache/struts2/cdi/CdiObjectFactory.java >> Sun May 1 14:29:02 2011 >> @@ -23,14 +23,14 @@ import com.opensymphony.xwork2.ObjectFac >> import com.opensymphony.xwork2.util.logging.Logger; >> import com.opensymphony.xwork2.util.logging.LoggerFactory; >> >> +import javax.enterprise.context.spi.CreationalContext; >> import javax.enterprise.inject.spi.BeanManager; >> import javax.enterprise.inject.spi.InjectionTarget; >> -import javax.enterprise.context.spi.CreationalContext; >> import javax.naming.Context; >> import javax.naming.InitialContext; >> import javax.naming.NamingException; >> import java.util.Map; >> -import java.util.HashMap; >> +import java.util.concurrent.ConcurrentHashMap; >> >> /** >> * CdiObjectFactory allows Struts 2 managed objects, like Actions, >> Interceptors or Results, to be injected by a Contexts >> @@ -52,7 +52,7 @@ public class CdiObjectFactory extends Ob >> protected BeanManager beanManager; >> protected CreationalContext ctx; >> >> - Map<Class<?>, InjectionTarget<?>> injectionTargetCache = new >> HashMap<Class<?>, InjectionTarget<?>>(); >> + Map<Class<?>, InjectionTarget<?>> injectionTargetCache = new >> ConcurrentHashMap<Class<?>, InjectionTarget<?>>(); >> >> public CdiObjectFactory() { >> super(); >> @@ -76,25 +76,17 @@ public class CdiObjectFactory extends Ob >> BeanManager bm; >> try { >> Context initialContext = new InitialContext(); >> - if (LOG.isInfoEnabled()) { >> - LOG.info("[findBeanManager]: Checking for BeanManager under >> JNDI key " + CDI_JNDIKEY_BEANMANAGER_COMP); >> - } >> + LOG.info("[findBeanManager]: Checking for BeanManager under >> JNDI key " + CDI_JNDIKEY_BEANMANAGER_COMP); >> try { >> bm = (BeanManager) >> initialContext.lookup(CdiObjectFactory.CDI_JNDIKEY_BEANMANAGER_COMP); >> - } catch ( NamingException e ) { >> - if (LOG.isWarnEnabled()) { >> - LOG.warn("[findBeanManager]: Lookup failed."); >> - } >> - if (LOG.isInfoEnabled()) { >> - LOG.info("[findBeanManager]: Checking for BeanManager >> under JNDI key " + CDI_JNDIKEY_BEANMANAGER_APP); >> - } >> + } catch (NamingException e) { >> + LOG.warn("[findBeanManager]: Lookup failed.", e); >> + LOG.info("[findBeanManager]: Checking for BeanManager under >> JNDI key " + CDI_JNDIKEY_BEANMANAGER_APP); >> bm = (BeanManager) >> initialContext.lookup(CdiObjectFactory.CDI_JNDIKEY_BEANMANAGER_APP); >> } >> - if (LOG.isInfoEnabled()) { >> - LOG.info("[findBeanManager]: BeanManager found."); >> - } >> + LOG.info("[findBeanManager]: BeanManager found."); >> return bm; >> - } catch ( NamingException e ) { >> + } catch (NamingException e) { >> LOG.error("Could not get BeanManager from JNDI context", e); >> } >> return null; >> @@ -102,7 +94,7 @@ public class CdiObjectFactory extends Ob >> >> @Override >> @SuppressWarnings("unchecked") >> - public Object buildBean( String className, Map<String, Object> >> extraContext, boolean injectInternal ) >> + public Object buildBean(String className, Map<String, Object> >> extraContext, boolean injectInternal) >> throws Exception { >> >> Class<?> clazz = getClassInstance(className); >> @@ -124,19 +116,16 @@ public class CdiObjectFactory extends Ob >> * will be created. >> * >> * @param clazz The class to get a InjectionTarget instance for. >> - * >> * @return if found in cache, an existing instance. A new instance >> otherwise. >> */ >> - protected InjectionTarget<?> getInjectionTarget( Class<?> clazz ) { >> + protected InjectionTarget<?> getInjectionTarget(Class<?> clazz) { >> InjectionTarget<?> result; >> - synchronized ( this ) { >> - result = injectionTargetCache.get(clazz); >> - if (result == null) { >> - result = >> beanManager.createInjectionTarget(beanManager.createAnnotatedType(clazz)); >> - injectionTargetCache.put(clazz, result); >> - } >> - >> + result = injectionTargetCache.get(clazz); >> + if (result == null) { >> + result = >> beanManager.createInjectionTarget(beanManager.createAnnotatedType(clazz)); >> + injectionTargetCache.put(clazz, result); >> } >> + >> return result; >> } >> >> @@ -144,11 +133,10 @@ public class CdiObjectFactory extends Ob >> * Simple wrapper for CreationalContext creation. >> * >> * @param beanManager the BeanManager to use for creating the context. >> - * >> * @return the context to use, if given BeanManager was not >> <tt>null</tt>. <tt>null</tt> otherwise. >> */ >> @SuppressWarnings("unchecked") >> - protected CreationalContext buildNonContextualCreationalContext( >> BeanManager beanManager ) { >> + protected CreationalContext >> buildNonContextualCreationalContext(BeanManager beanManager) { >> return beanManager != null ? >> beanManager.createCreationalContext(null) : null; >> } >> } >> >> > -- René Gielen IT-Neering.net Saarstrasse 100, 52062 Aachen, Germany Tel: +49-(0)241-4010770 Fax: +49-(0)241-4010771 Cel: +49-(0)163-2844164 http://twitter.com/rgielen --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org For additional commands, e-mail: dev-h...@struts.apache.org