add timer proxy

git-svn-id: https://svn2.assembla.com/svn/romraider/trunk@178 38686702-15cf-42e4-a595-3071df8bf5ea
This commit is contained in:
kascade 2008-11-14 09:52:57 +00:00
parent bddc92ed16
commit 18d5ac5fb7
5 changed files with 72 additions and 2 deletions

View File

@ -1,4 +1,4 @@
log4j.rootLogger=info, stdout, file log4j.rootLogger=warn, stdout, file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
@ -8,3 +8,5 @@ log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=romraider.log log4j.appender.file.File=romraider.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5r %-5p [%t] - %m%n log4j.appender.file.layout.ConversionPattern=%-5r %-5p [%t] - %m%n
log4j.logger.com.romraider.util.proxy.TimeWrapper=trace

View File

@ -30,13 +30,15 @@ import static com.romraider.io.j2534.op20.OpenPort20.CONFIG_P4_MIN;
import static com.romraider.io.j2534.op20.OpenPort20.FLAG_ISO9141_NO_CHECKSUM; import static com.romraider.io.j2534.op20.OpenPort20.FLAG_ISO9141_NO_CHECKSUM;
import static com.romraider.io.j2534.op20.OpenPort20.PROTOCOL_ISO9141; import static com.romraider.io.j2534.op20.OpenPort20.PROTOCOL_ISO9141;
import static com.romraider.util.ParamChecker.checkNotNull; import static com.romraider.util.ParamChecker.checkNotNull;
import static com.romraider.util.proxy.Proxifier.proxy;
import com.romraider.util.proxy.TimerWrapper;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import static org.apache.log4j.Logger.getLogger; import static org.apache.log4j.Logger.getLogger;
public final class J2534ConnectionManager implements ConnectionManager { public final class J2534ConnectionManager implements ConnectionManager {
private static final Logger LOGGER = getLogger(J2534ConnectionManager.class); private static final Logger LOGGER = getLogger(J2534ConnectionManager.class);
// private final J2534 api = new Old_J2534OpenPort20(PROTOCOL_ISO9141); // private final J2534 api = new Old_J2534OpenPort20(PROTOCOL_ISO9141);
private final J2534 api = new J2534OpenPort20(PROTOCOL_ISO9141); private final J2534 api = proxy(new J2534OpenPort20(PROTOCOL_ISO9141), TimerWrapper.class);
private int channelId; private int channelId;
private int deviceId; private int deviceId;
private int msgId; private int msgId;

View File

@ -0,0 +1,27 @@
package com.romraider.util.proxy;
import java.lang.reflect.Constructor;
import static java.lang.reflect.Proxy.newProxyInstance;
public final class Proxifier {
public static <T> T proxy(T t, Class<? extends Wrapper> cls) {
Wrapper wrapper = instantiate(cls, t);
return proxy(t, wrapper);
}
private static <T> T proxy(T t, Wrapper wrapper) {
Class<?> cls = t.getClass();
ClassLoader loader = cls.getClassLoader();
Class<?>[] interfaces = cls.getInterfaces();
return (T) newProxyInstance(loader, interfaces, wrapper);
}
private static <T> Wrapper instantiate(Class<? extends Wrapper> wrapper, T t) {
try {
Constructor<?> constructor = wrapper.getConstructor(Object.class);
return (Wrapper) constructor.newInstance(t);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,33 @@
package com.romraider.util.proxy;
import static com.romraider.util.ParamChecker.checkNotNull;
import org.apache.log4j.Logger;
import static org.apache.log4j.Logger.getLogger;
import static java.lang.System.currentTimeMillis;
import java.lang.reflect.Method;
public final class TimerWrapper implements Wrapper {
private static final Logger LOGGER = getLogger(TimerWrapper.class);
private final Object delegate;
public TimerWrapper(Object delegate) {
checkNotNull(delegate);
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
long start = currentTimeMillis();
try {
return method.invoke(delegate, args);
} finally {
long time = currentTimeMillis() - start;
log(method, time);
}
}
private void log(Method method, long time) {
String c = delegate.getClass().getSimpleName();
String m = method.getName();
LOGGER.trace("[TIMER] - " + c + "." + m + ": " + time + "ms");
}
}

View File

@ -0,0 +1,6 @@
package com.romraider.util.proxy;
import java.lang.reflect.InvocationHandler;
public interface Wrapper extends InvocationHandler {
}