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 }