You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/04/30 04:05:31 UTC
svn commit: r1098038 - in /tapestry/tapestry5/trunk:
tapestry-core/src/main/java/org/apache/tapestry5/internal/services/
tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/
tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/
tapestr...
Author: hlship
Date: Sat Apr 30 02:05:30 2011
New Revision: 1098038
URL: http://svn.apache.org/viewvc?rev=1098038&view=rev
Log:
TAP5-853: Add support for logging the creation of proxies and transformed classes
Added:
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImplTest.java
tapestry/tapestry5/trunk/tapestry-ioc/src/test/resources/log4j.properties
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java?rev=1098038&r1=1098037&r2=1098038&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentInstantiatorSourceImpl.java Sat Apr 30 02:05:30 2011
@@ -33,6 +33,7 @@ import org.apache.tapestry5.ioc.annotati
import org.apache.tapestry5.ioc.annotations.Primary;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.internal.services.ClassFactoryImpl;
+import org.apache.tapestry5.ioc.internal.services.PlasticClassListenerLogger;
import org.apache.tapestry5.ioc.internal.services.PlasticProxyFactoryImpl;
import org.apache.tapestry5.ioc.internal.util.ClasspathResource;
import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
@@ -49,6 +50,8 @@ import org.apache.tapestry5.plastic.Inst
import org.apache.tapestry5.plastic.InstructionBuilderCallback;
import org.apache.tapestry5.plastic.MethodDescription;
import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticClassEvent;
+import org.apache.tapestry5.plastic.PlasticClassListener;
import org.apache.tapestry5.plastic.PlasticField;
import org.apache.tapestry5.plastic.PlasticManager;
import org.apache.tapestry5.plastic.PlasticManagerDelegate;
@@ -66,7 +69,7 @@ import org.slf4j.Logger;
* A wrapper around a {@link PlasticManager} that allows certain classes to be modified as they are loaded.
*/
public final class ComponentInstantiatorSourceImpl extends InvalidationEventHubImpl implements
- ComponentInstantiatorSource, UpdateListener, PlasticManagerDelegate
+ ComponentInstantiatorSource, UpdateListener, PlasticManagerDelegate, PlasticClassListener
{
private final Set<String> controlledPackageNames = CollectionFactory.newSet();
@@ -168,9 +171,11 @@ public final class ComponentInstantiator
{
manager = new PlasticManager(parent, this, controlledPackageNames);
+ manager.addPlasticClassListener(this);
+
classFactory = new ClassFactoryImpl(manager.getClassLoader(), logger);
- proxyFactory = new PlasticProxyFactoryImpl(classFactory, manager.getClassLoader());
+ proxyFactory = new PlasticProxyFactoryImpl(classFactory, manager.getClassLoader(), logger);
classToInstantiator.clear();
classToModel.clear();
@@ -369,4 +374,13 @@ public final class ComponentInstantiator
return null;
}
+
+ public void classWillLoad(PlasticClassEvent event)
+ {
+ Logger logger = loggerSource.getLogger("tapestry.transformer." + event.getPrimaryClassName());
+
+ if (logger.isDebugEnabled())
+ logger.debug(event.getDissasembledBytecode());
+ }
+
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java?rev=1098038&r1=1098037&r2=1098038&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/RegistryBuilder.java Sat Apr 30 02:05:30 2011
@@ -80,9 +80,10 @@ public final class RegistryBuilder
// module exists.
Logger classFactoryLogger = loggerSource.getLogger(TapestryIOCModule.class.getName() + ".ClassFactory");
+ Logger proxyFactoryLogger = loggerSource.getLogger(TapestryIOCModule.class.getName() + ".PlasticProxyFactory");
classFactory = new ClassFactoryImpl(this.classLoader, classFactoryLogger);
- proxyFactory = new PlasticProxyFactoryImpl(classFactory, this.classLoader);
+ proxyFactory = new PlasticProxyFactoryImpl(classFactory, this.classLoader, proxyFactoryLogger);
add(TapestryIOCModule.class);
}
Added: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java?rev=1098038&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java (added)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticClassListenerLogger.java Sat Apr 30 02:05:30 2011
@@ -0,0 +1,46 @@
+// Copyright 2011 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.ioc.internal.services;
+
+import org.apache.tapestry5.plastic.ClassType;
+import org.apache.tapestry5.plastic.PlasticClassEvent;
+import org.apache.tapestry5.plastic.PlasticClassListener;
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+public class PlasticClassListenerLogger implements PlasticClassListener
+{
+ private final Logger logger;
+
+ public PlasticClassListenerLogger(Logger logger)
+ {
+ this.logger = logger;
+ }
+
+ public void classWillLoad(PlasticClassEvent event)
+ {
+ if (logger.isDebugEnabled())
+ {
+ Marker marker = MarkerFactory.getMarker(event.getPrimaryClassName());
+
+ String extendedClassName = event.getType() == ClassType.PRIMARY ? event.getPrimaryClassName() : String
+ .format("%s (%s for %s)", event.getClassName(), event.getType(), event.getPrimaryClassName());
+
+ logger.debug(marker,
+ String.format("Loading class %s:\n%s", extendedClassName, event.getDissasembledBytecode()));
+ }
+ }
+}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java?rev=1098038&r1=1098037&r2=1098038&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PlasticProxyFactoryImpl.java Sat Apr 30 02:05:30 2011
@@ -16,7 +16,6 @@ package org.apache.tapestry5.ioc.interna
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
import org.apache.tapestry5.ioc.Location;
import org.apache.tapestry5.ioc.ObjectCreator;
@@ -26,24 +25,34 @@ import org.apache.tapestry5.ioc.services
import org.apache.tapestry5.plastic.ClassInstantiator;
import org.apache.tapestry5.plastic.InstructionBuilder;
import org.apache.tapestry5.plastic.InstructionBuilderCallback;
-import org.apache.tapestry5.plastic.MethodDescription;
import org.apache.tapestry5.plastic.PlasticClass;
+import org.apache.tapestry5.plastic.PlasticClassListener;
import org.apache.tapestry5.plastic.PlasticClassTransformation;
import org.apache.tapestry5.plastic.PlasticClassTransformer;
import org.apache.tapestry5.plastic.PlasticField;
import org.apache.tapestry5.plastic.PlasticManager;
import org.apache.tapestry5.plastic.PlasticMethod;
+import org.slf4j.Logger;
public class PlasticProxyFactoryImpl implements PlasticProxyFactory
{
private final ClassFactory classFactory;
+ private final Logger logger;
+
private final PlasticManager manager;
- public PlasticProxyFactoryImpl(ClassFactory classFactory, ClassLoader parentClassLoader)
+ public PlasticProxyFactoryImpl(ClassFactory classFactory, ClassLoader parentClassLoader, Logger logger)
{
this.classFactory = classFactory;
+ this.logger = logger;
+
manager = new PlasticManager(parentClassLoader);
+
+ if (logger != null)
+ {
+ manager.addPlasticClassListener(new PlasticClassListenerLogger(logger));
+ }
}
public ClassLoader getClassLoader()
@@ -108,4 +117,14 @@ public class PlasticProxyFactoryImpl imp
return classFactory.getConstructorLocation(constructor);
}
+ public void addPlasticClassListener(PlasticClassListener listener)
+ {
+ manager.addPlasticClassListener(listener);
+ }
+
+ public void removePlasticClassListener(PlasticClassListener listener)
+ {
+ manager.removePlasticClassListener(listener);
+ }
+
}
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java?rev=1098038&r1=1098037&r2=1098038&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PlasticProxyFactory.java Sat Apr 30 02:05:30 2011
@@ -20,6 +20,7 @@ import java.lang.reflect.Method;
import org.apache.tapestry5.ioc.Location;
import org.apache.tapestry5.ioc.ObjectCreator;
import org.apache.tapestry5.plastic.ClassInstantiator;
+import org.apache.tapestry5.plastic.PlasticClassListenerHub;
import org.apache.tapestry5.plastic.PlasticClassTransformation;
import org.apache.tapestry5.plastic.PlasticClassTransformer;
@@ -29,7 +30,7 @@ import org.apache.tapestry5.plastic.Plas
*
* @since 5.3.0
*/
-public interface PlasticProxyFactory
+public interface PlasticProxyFactory extends PlasticClassListenerHub
{
/**
* Returns the class loader used when creating new classes, this is a child class loader
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImplTest.java?rev=1098038&r1=1098037&r2=1098038&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/DefaultModuleDefImplTest.java Sat Apr 30 02:05:30 2011
@@ -52,7 +52,7 @@ public class DefaultModuleDefImplTest ex
public void setup()
{
classFactory = new ClassFactoryImpl();
- proxyFactory = new PlasticProxyFactoryImpl(classFactory, Thread.currentThread().getContextClassLoader());
+ proxyFactory = new PlasticProxyFactoryImpl(classFactory, Thread.currentThread().getContextClassLoader(), null);
}
@AfterClass
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/resources/log4j.properties?rev=1098038&r1=1098037&r2=1098038&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/resources/log4j.properties (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/resources/log4j.properties Sat Apr 30 02:05:30 2011
@@ -1,17 +1,3 @@
-# Copyright 2005, 2006, 2009, 2010 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
log4j.rootCategory=WARN, A1
# A1 is set to be a ConsoleAppender.
@@ -30,4 +16,4 @@ log4j.category.org.apache.tapestry5.ioc.
log4j.category.com.example=debug
-
+# log4j.category.org.apache.tapestry5.ioc.services.TapestryIOCModule.PlasticProxyFactory=debug