1 16 package web.struts; 17 18 import java.io.Serializable ; 19 import java.lang.reflect.*; 20 import java.sql.Connection ; 21 import javax.sql.DataSource ; 22 23 28 class _DataSource implements InvocationHandler, Serializable { 29 30 private final static Class [] infs = new Class []{DataSource .class}; 31 32 public _DataSource(DataSource ds, boolean encoding) { 33 dataSource = ds; 34 this.encoding = encoding; 35 } 36 37 41 public DataSource getDataSource() { 42 return (DataSource ) Proxy.newProxyInstance( 43 dataSource.getClass().getClassLoader(), infs, this); 44 } 45 46 public Object invoke(Object proxy, Method m, Object args[]) throws Throwable 47 { 48 if (METHOD_NAME.equals(m.getName())){ 49 try { 50 Connection conn = (Connection ) m.invoke(dataSource, args); 51 return (conn==null)?null:(new _Connection(conn,encoding)).getConnection(); 52 } catch (InvocationTargetException e) { 53 throw e.getTargetException(); 54 } 55 } 56 try { 57 return m.invoke(dataSource, args); 58 } catch (InvocationTargetException e) { 59 throw e.getTargetException(); 60 } 61 } 62 63 private DataSource dataSource; 64 65 private boolean encoding; 66 67 private final static String METHOD_NAME = "getConnection"; 68 } | Popular Tags |