final NSConnectionFactory factory = (NSConnectionFactory) context.get(NSConst.DATASOURCEFACTORY_KEY);
Object[] arguments = new Object[]{KDataAccess.ORACLE, factory.getConnection(jndi), getUser(), sessionId, NConst.CURRENT_SCHEMA};
Class[] argumentTypes = new Class[arguments.length];
argumentTypes[0] = Integer.class;
argumentTypes[1] = Connection.class;
argumentTypes[2] = User.class;
argumentTypes[3] = String.class;
argumentTypes[4] = String.class;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(NDataAccess.class);
enhancer.setCallback(new NDataAccessProxy(titleDspId,getUser()));
NDataAccess proxy = (NDataAccess)enhancer.create(argumentTypes,arguments);
/**
* <pre>
* <strong>説明:</strong>
* DBアクセスローグ出力するためにDB代理用クラス.
* </pre>
*
* <pre>
* <strong>注意事項:</strong>
* </pre>
*
* <pre>
* <strong>使用例:</strong>
* </pre>
*
* @author $Author: 鄧 $
* @version $Revision: 1.1 $ $Date: 2010/10/18 07:08:52 $
*/
public final class NDataAccessProxy implements MethodInterceptor {
private String functionId;
private User user;
public NDataAccessProxy(String functionId, User user) {
this.functionId = functionId;
this.user = user;
}
/** ログ. */
protected static Logger log = Logger.getLogger(NDataAccessProxy.class);
public Object intercept(Object obj, Method method, Object[] param,
MethodProxy proxyMethod) throws Throwable {
boolean isFunction = false;
boolean isSqlFunction = false;
LoginUser loginUser ;
String dealer = "";
if (functionId.equals("TS018")) {
isFunction = true;
Pattern pattern = Pattern.compile("^(getRecord(s|Bfile)(Exe)?|getResultSetEx|executeUpdate(SameState)?Exe|prepareCallExe(RetStr)?)$");
Matcher m = pattern.matcher(method.getName());
if(m.find()) {
isSqlFunction = true;
loginUser = (LoginUser) user;
dealer = loginUser.getDealerResourceType() + "_"
+ loginUser.getDealerConnectionCode() + "_"
+ loginUser.getDealerConnectionType();
}
}
if (isFunction) {
if(isSqlFunction) {
log.info("[DB]\t[functionId:]" + functionId + "\t[dealer:]" + dealer
+ "\t[sql:]" + param[param.length-1] + "\t[begin]");
}
}
Object result = proxyMethod.invokeSuper(obj, param);
if (isFunction) {
if(isSqlFunction) {
log.info("[DB]\t[functionId:]" + functionId + "\t[dealer:]" + dealer
+ "\t[sql:]" + param[param.length-1] + "\t[end]");
}
}
return result;
}
}
Object[] arguments = new Object[]{KDataAccess.ORACLE, factory.getConnection(jndi), getUser(), sessionId, NConst.CURRENT_SCHEMA};
Class[] argumentTypes = new Class[arguments.length];
argumentTypes[0] = Integer.class;
argumentTypes[1] = Connection.class;
argumentTypes[2] = User.class;
argumentTypes[3] = String.class;
argumentTypes[4] = String.class;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(NDataAccess.class);
enhancer.setCallback(new NDataAccessProxy(titleDspId,getUser()));
NDataAccess proxy = (NDataAccess)enhancer.create(argumentTypes,arguments);
/**
* <pre>
* <strong>説明:</strong>
* DBアクセスローグ出力するためにDB代理用クラス.
* </pre>
*
* <pre>
* <strong>注意事項:</strong>
* </pre>
*
* <pre>
* <strong>使用例:</strong>
* </pre>
*
* @author $Author: 鄧 $
* @version $Revision: 1.1 $ $Date: 2010/10/18 07:08:52 $
*/
public final class NDataAccessProxy implements MethodInterceptor {
private String functionId;
private User user;
public NDataAccessProxy(String functionId, User user) {
this.functionId = functionId;
this.user = user;
}
/** ログ. */
protected static Logger log = Logger.getLogger(NDataAccessProxy.class);
public Object intercept(Object obj, Method method, Object[] param,
MethodProxy proxyMethod) throws Throwable {
boolean isFunction = false;
boolean isSqlFunction = false;
LoginUser loginUser ;
String dealer = "";
if (functionId.equals("TS018")) {
isFunction = true;
Pattern pattern = Pattern.compile("^(getRecord(s|Bfile)(Exe)?|getResultSetEx|executeUpdate(SameState)?Exe|prepareCallExe(RetStr)?)$");
Matcher m = pattern.matcher(method.getName());
if(m.find()) {
isSqlFunction = true;
loginUser = (LoginUser) user;
dealer = loginUser.getDealerResourceType() + "_"
+ loginUser.getDealerConnectionCode() + "_"
+ loginUser.getDealerConnectionType();
}
}
if (isFunction) {
if(isSqlFunction) {
log.info("[DB]\t[functionId:]" + functionId + "\t[dealer:]" + dealer
+ "\t[sql:]" + param[param.length-1] + "\t[begin]");
}
}
Object result = proxyMethod.invokeSuper(obj, param);
if (isFunction) {
if(isSqlFunction) {
log.info("[DB]\t[functionId:]" + functionId + "\t[dealer:]" + dealer
+ "\t[sql:]" + param[param.length-1] + "\t[end]");
}
}
return result;
}
}