001 package org.apache.tapestry.services.impl;
002
003 import ognl.ClassResolver;
004 import ognl.Ognl;
005 import ognl.OgnlContext;
006 import ognl.TypeConverter;
007 import org.apache.commons.pool.BasePoolableObjectFactory;
008
009 /**
010 * Used by {@link ExpressionEvaluatorImpl} to pool {@link ognl.OgnlContext} objects.
011 */
012 public class PoolableOgnlContextFactory extends BasePoolableObjectFactory {
013
014 private final ClassResolver _resolver;
015
016 private TypeConverter _typeConverter;
017
018 public PoolableOgnlContextFactory(ClassResolver resolver, TypeConverter typeConverter)
019 {
020 _resolver = resolver;
021 _typeConverter = typeConverter;
022 }
023
024 public Object makeObject()
025 throws Exception
026 {
027 return Ognl.createDefaultContext(null, _resolver, _typeConverter);
028 }
029
030 public void activateObject(Object obj)
031 throws Exception
032 {
033 OgnlContext context = (OgnlContext)obj;
034
035 if (context.getRoot() != null || context.getValues().size() > 0) {
036 context.clear();
037 context.setRoot(null);
038 }
039 }
040 }