package com.sun.s1asdev.jdbc.tracingsql.logger;
import org.glassfish.api.jdbc.SQLTraceListener;
import org.glassfish.api.jdbc.SQLTraceRecord;
import javax.sql.*;
import java.sql.*;
import javax.naming.*;
import java.rmi.*;
import java.util.*;
public class TraceLogger implements SQLTraceListener {
DataSource ds;
public TraceLogger() {
try {
InitialContext ic = new InitialContext();
ds = (DataSource) ic.lookup("jdbc/tracingsql-res");
} catch(NamingException ex) {}
}
/**
* Writes the record to a database.
*/
public void sqlTrace(SQLTraceRecord record) {
try {
//System.out.println("### ds=" + ds);
Object[] params = record.getParams();
StringBuffer argsBuf = new StringBuffer();
if(params != null && params.length > 0) {
for(Object param : params) {
argsBuf.append(param.toString() + ";");
}
}
//System.out.println(">>>>> class=" + record.getClassName() + " method=" + record.getMethodName() + " args=" + argsBuf.toString());
writeRecord(ds, record.getClassName(), record.getMethodName(), argsBuf.toString());
} catch(Exception ex) {
ex.printStackTrace();
}
}
public void writeRecord(DataSource ds, String classname, String methodname, String args) {
Connection conFromDS = null;
PreparedStatement stmt = null;
try{
conFromDS = ds.getConnection();
//System.out.println("###con=" + conFromDS);
stmt = conFromDS.prepareStatement(
"insert into sql_trace values (?, ?, ?)" );
System.out.println("### stmt=" + stmt);
stmt.setString(1, classname);
stmt.setString(2, methodname);
stmt.setString(3, args);
int count = stmt.executeUpdate();
//System.out.println("### inserted " + count + " rows");
}catch(SQLException sqe){
}finally{
try{
if(stmt != null){
stmt.close();
}
}catch(SQLException sqe){}
try{
if(conFromDS != null){
conFromDS.close();
}
}catch(SQLException sqe){}
}
}
}