On Fri, Jul 29, 2011 at 10:19 AM, Josh Canfield <joshcanfi...@gmail.com> wrote:
> I'd like to integrate some advice used in a tapestry web project into
> a non-tapestry web project. I can add a dependency on plastic, but not
> a tapestry-ioc.
>
> I'm at the experimental stage at this point and I've hit a snag. I
> figure I can wade around for a couple hours, or Howard can whip up in
> example off the top of his head.
>
> Here's some pieces of code.
>
>        plasticManager = PlasticManager
>                .withContextClassLoader()
>                .packages(Collections.singleton(basePackage))
>                .create();
>
>
> public <T> T monitor(Class<T> monitoredClass, Object... constructorParams) {
>
>        return plasticManager.createClass(monitoredClass, new
> PlasticClassTransformer() {
>
>            public void transform(PlasticClass plasticClass) {
>
> // At this point plasticclass has methodNames, but no methods so the
> following fails to find my annotation.
> // Do I need to manually override the methods?
>
>                List<PlasticMethod> methods =
> plasticClass.getMethodsWithAnnotation(Monitor.class);
>                for (PlasticMethod method : methods) {
>                    final Stopwatch stopwatch =
> createStopwatch(method.getAnnotation(Monitor.class), method);
>                    logger.debug("Adding advice for {}", stopwatch.getName());
>                    method.addAdvice(new MonitorAdvice(stopwatch));
>                }
>            }
>
>        }).newInstance();
>    }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

I think what you are missing is that you don't create a class (that's
for creating proxies and such, the monitoredClass you pass in becomes
the base class).

What you want to do is wrap your logic up your PlasticClassTransformer
inside a StandardDelegate (a trivial internal class).

You can then ask the manager to getClassInstantiator() and
newInstance() that to get your advised and instantiated instance.


-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to