You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2008/11/14 01:25:59 UTC
svn commit: r713882 - in /jackrabbit/sandbox/jcrlog: pom.xml
src/main/java/org/apache/jackrabbit/jcrlog/Log.java
src/main/java/org/apache/jackrabbit/jcrlog/LogObject.java
src/main/java/org/apache/jackrabbit/jcrlog/RepositoryLogger.java
Author: tripod
Date: Thu Nov 13 16:25:58 2008
New Revision: 713882
URL: http://svn.apache.org/viewvc?rev=713882&view=rev
Log:
Improving / Fixing JCR Logger
Modified:
jackrabbit/sandbox/jcrlog/pom.xml
jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/Log.java
jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/LogObject.java
jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/RepositoryLogger.java
Modified: jackrabbit/sandbox/jcrlog/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrlog/pom.xml?rev=713882&r1=713881&r2=713882&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrlog/pom.xml (original)
+++ jackrabbit/sandbox/jcrlog/pom.xml Thu Nov 13 16:25:58 2008
@@ -19,48 +19,45 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <prerequisites>
- <maven>2.0.4</maven>
- </prerequisites>
- <groupId>org.apache.jackrabbit</groupId>
- <parent>
+ <modelVersion>4.0.0</modelVersion>
+ <prerequisites>
+ <maven>2.0.4</maven>
+ </prerequisites>
<groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit</artifactId>
+ <parent>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit</artifactId>
+ <version>1.4</version>
+ <relativePath>../..</relativePath>
+ </parent>
+ <artifactId>jackrabbit-jcrlog</artifactId>
<version>1.4-SNAPSHOT</version>
- <relativePath>../..</relativePath>
- </parent>
- <artifactId>jackrabbit-jcrlog</artifactId>
- <version>1.4-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>JCR log</name>
- <description>JCR log/trace wrapper</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-core</artifactId>
- <version>1.4-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>javax.jcr</groupId>
- <artifactId>jcr</artifactId>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.3.0</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.3.0</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
+ <packaging>jar</packaging>
+ <name>JCR log</name>
+ <description>JCR log/trace wrapper</description>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-core</artifactId>
+ <version>1.4.6</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-api</artifactId>
+ <version>1.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
Modified: jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/Log.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/Log.java?rev=713882&r1=713881&r2=713882&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/Log.java (original)
+++ jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/Log.java Thu Nov 13 16:25:58 2008
@@ -50,6 +50,7 @@
private boolean logCaller = true;
private boolean castToRealApi = false;
private boolean logStream = false;
+ private boolean logException = false;
private static void createDirs(String fileName) throws IOException {
File f = new File(fileName);
@@ -193,4 +194,11 @@
return logStream;
}
+ boolean getLogException() {
+ return logException;
+ }
+
+ void setLogException(boolean logException) {
+ this.logException = logException;
+ }
}
Modified: jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/LogObject.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/LogObject.java?rev=713882&r1=713881&r2=713882&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/LogObject.java (original)
+++ jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/LogObject.java Thu Nov 13 16:25:58 2008
@@ -171,18 +171,18 @@
logReturn();
if (t instanceof RepositoryException) {
RepositoryException r = (RepositoryException) t;
- logException("RepositoryException", r);
+ logException("RepositoryException", r, true);
return r;
} else if (t instanceof RuntimeException) {
RuntimeException r = (RuntimeException) t;
- logException("RuntimeException", r);
+ logException("RuntimeException", r, true);
throw r;
} else if (t instanceof Error) {
Error r = (Error) t;
- logException("Error", r);
+ logException("Error", r, true);
throw r;
} else {
- logException("Internal", t);
+ logException("Internal", t, true);
throw new Error("Internal exception: " + t.toString());
}
}
@@ -191,14 +191,14 @@
logReturn();
if (t instanceof RuntimeException) {
RuntimeException r = (RuntimeException) t;
- logException("RuntimeException", r);
+ logException("RuntimeException", r, true);
return r;
} else if (t instanceof Error) {
Error r = (Error) t;
- logException("Error", r);
+ logException("Error", r, true);
throw r;
} else {
- logException("LoggerException", t);
+ logException("LoggerException", t, true);
throw new Error("Internal exception: " + t.toString());
}
}
@@ -285,16 +285,21 @@
}
}
- private void logException(String title, Throwable e) {
- log.write("//" + title + ": " + e.toString(), e);
+ private void logException(String title, Throwable e, boolean trace) {
+ log.write("//" + title + ": " + e.toString(), trace ? e : null);
}
protected void logReturn(Class clazz, Object result) {
logReturn();
- if (clazz == String.class && StringUtils.isUUID((String)result)) {
- log.write("//return " + StringUtils.quote(clazz, result) + "; // UUID", null);
- } else if (log.getLogReturn()) {
- log.write("//return " + StringUtils.quote(clazz, result) + ";", null);
+ if (log.getLogReturn()) {
+ if (clazz == String.class
+ && result != null
+ && !result.getClass().isArray()
+ && StringUtils.isUUID((String)result)) {
+ log.write("//return " + StringUtils.quote(clazz, result) + "; // UUID", null);
+ } else {
+ log.write("//return " + StringUtils.quote(clazz, result) + ";", null);
+ }
}
}
@@ -331,8 +336,16 @@
Class proxyClass = idef.proxyClass;
if (proxyClass == null) {
- proxyClass = Proxy.getProxyClass(clazz.getClassLoader(),
- new Class[] { clazz });
+ // hack for node/property
+ Class[] interfaces;
+ if (clazz == Item.class && obj instanceof Node) {
+ interfaces = new Class[]{clazz, Node.class};
+ } else if (clazz == Item.class && obj instanceof Property) {
+ interfaces = new Class[]{clazz, Property.class};
+ } else {
+ interfaces = new Class[]{clazz};
+ }
+ proxyClass = Proxy.getProxyClass(clazz.getClassLoader(), interfaces);
idef.proxyClass = proxyClass;
}
try {
@@ -341,7 +354,7 @@
new Object[] { handler });
return o2;
} catch (Exception e) {
- logException("InvocationTargetException", e);
+ logException("InvocationTargetException", e, true);
throw new Error("Internal exception: " + e.toString());
}
}
@@ -370,6 +383,14 @@
wrapStreams(method.getParameterTypes(), args);
int nextId = logStart(returnType, array, method.getName(),
StringUtils.quoteArgs(method.getParameterTypes(), args));
+ // unwrap args
+ if (args != null) {
+ for (int i=0; i<args.length; i++) {
+ if (args[i] instanceof Proxy) {
+ args[i] = ((LogObject) Proxy.getInvocationHandler(args[i])).getObject();
+ }
+ }
+ }
result = method.invoke(obj, args);
if (log.getCastToRealApi() && result != null && idef != null) {
InterfaceDef idef2 = LogObject.getInterface(result.getClass());
@@ -383,19 +404,22 @@
returnClass = idef2.interfaceClass;
}
}
- if (returnType >= 0) {
+ if (returnType >= 0 && result != null) {
result = wrap(result, array, returnClass, returnType, nextId);
}
logReturn(returnClass, result);
return result;
} catch (IllegalArgumentException e) {
- logException("IllegalArgumentException", e);
+ logException("IllegalArgumentException", e, true);
throw new Error("Internal exception: " + e.toString());
} catch (IllegalAccessException e) {
- logException("IllegalAccessException", e);
+ logException("IllegalAccessException", e, true);
throw new Error("Internal exception: " + e.toString());
} catch (InvocationTargetException e) {
Throwable t = e.getTargetException();
+ if (log.getLogException()) {
+ logException("TargetException", t, false);
+ }
throw t;
}
}
Modified: jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/RepositoryLogger.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/RepositoryLogger.java?rev=713882&r1=713881&r2=713882&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/RepositoryLogger.java (original)
+++ jackrabbit/sandbox/jcrlog/src/main/java/org/apache/jackrabbit/jcrlog/RepositoryLogger.java Thu Nov 13 16:25:58 2008
@@ -85,7 +85,7 @@
return new RepositoryLogger(repository, prop, url);
}
- private RepositoryLogger(Repository repository, Properties prop, String url)
+ public RepositoryLogger(Repository repository, Properties prop, String url)
throws RepositoryException {
this.repository = repository;
String fileName = prop.getProperty("file");
@@ -94,11 +94,13 @@
String logCaller = prop.getProperty("caller");
String cast = prop.getProperty("cast");
String stream = prop.getProperty("stream");
+ String exception = prop.getProperty("exception");
Log log = new Log(fileName, parseBoolean(sysOut));
log.setLogCaller(parseBoolean(logCaller));
log.setLogReturn(parseBoolean(logReturn));
log.setCastToRealApi(parseBoolean(cast));
log.setLogStream(parseBoolean(stream));
+ log.setLogException(parseBoolean(exception));
String call = RepositoryFactory.CLASSNAME + ".open("
+ StringUtils.quoteString(url) + ");";
int nextId = getNextId(LogObject.INTERFACE_DEF_REPOSITORY.type);