001/* 002 * HA-JDBC: High-Availability JDBC 003 * Copyright (c) 2004-2008 Paul Ferraro 004 * 005 * This library is free software; you can redistribute it and/or modify it 006 * under the terms of the GNU Lesser General Public License as published by the 007 * Free Software Foundation; either version 2.1 of the License, or (at your 008 * option) any later version. 009 * 010 * This library is distributed in the hope that it will be useful, but WITHOUT 011 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 012 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 013 * for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public License 016 * along with this library; if not, write to the Free Software Foundation, 017 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 018 * 019 * Contact: ferraro@users.sourceforge.net 020 */ 021package net.sf.hajdbc.sql; 022 023import java.lang.reflect.Method; 024import java.util.Set; 025 026import net.sf.hajdbc.DatabaseCluster; 027import net.sf.hajdbc.util.reflect.Methods; 028 029/** 030 * @author Paul Ferraro 031 * @param <D> 032 */ 033@SuppressWarnings("nls") 034public class CommonDataSourceInvocationHandler<D> extends AbstractRootInvocationHandler<D> 035{ 036// private static final Set<Method> getMethodSet = Methods.findMethods(CommonDataSource.class, "get\\w+"); 037// private static final Set<Method> setMethodSet = Methods.findMethods(CommonDataSource.class, "set\\w+"); 038 039 private final Set<Method> getMethodSet; 040 private final Set<Method> setMethodSet; 041 042 /** 043 * @param databaseCluster 044 * @param proxyClass 045 */ 046 protected CommonDataSourceInvocationHandler(DatabaseCluster<D> databaseCluster, Class<D> proxyClass) 047 { 048 super(databaseCluster, proxyClass); 049 050 this.getMethodSet = Methods.findMethods(proxyClass, "get\\w+"); 051 this.setMethodSet = Methods.findMethods(proxyClass, "set\\w+"); 052 } 053 054 @Override 055 protected InvocationStrategy<D, D, ?> getInvocationStrategy(D object, Method method, Object[] parameters) throws Exception 056 { 057 if (this.getMethodSet.contains(method)) 058 { 059 return new DriverReadInvocationStrategy<D, D, Object>(); 060 } 061 062 if (this.setMethodSet.contains(method)) 063 { 064 return new DriverWriteInvocationStrategy<D, D, Object>(); 065 } 066 067 return super.getInvocationStrategy(object, method, parameters); 068 } 069 070 /** 071 * @see net.sf.hajdbc.sql.AbstractInvocationHandler#isRecordable(java.lang.reflect.Method) 072 */ 073 @Override 074 protected boolean isRecordable(Method method) 075 { 076 return this.setMethodSet.contains(method); 077 } 078}