- 浏览: 747768 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
任楚娴:
你好,请问html = nvl(html); 这句中的nvl( ...
java html串转换成文本串 -
u013246812:
,谢拉!
jQuery ui Dialog 讲解参数 -
大宝剑99:
...
前端优化
思想 就是 代理 DataSource对象 代理 getConnection方法
在代理connection对象 代理 close方法
/**
*
*/
package com.mjp.core.db.jdbc.ds;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Vector;
import javax.sql.DataSource;
import com.mjp.core.db.tool.DbUtils;
import com.mjp.core.properties.PropertiesFacade;
/**
* @author Administrator
*
*/
public class DbcpDataSource implements DataSource {
private static Vector<Connection> connPool;
private static int poolMaxSize = 10;
private static int poolMinSize = 1;
private String userName;
private String password;
private String driverClass;
private String url;
public DbcpDataSource() {
init();
}
/**
*
*/
private void init() {
this.url = PropertiesFacade.getProperties("database.url");
this.driverClass = PropertiesFacade.getProperties("database.driver");
this.userName = PropertiesFacade.getProperties("database.user");
this.password = PropertiesFacade.getProperties("database.password");
try {
poolMaxSize = Integer.parseInt(PropertiesFacade
.getProperties("database.maxsize"));
} catch (Exception ex) {
poolMaxSize = 10;
}
try {
poolMinSize = Integer.parseInt(PropertiesFacade
.getProperties("database.minsize"));
} catch (Exception ex) {
poolMinSize = 1;
}
System.out.println("url:" + this.url);
System.out.println("driverClass:" + this.driverClass);
System.out.println("userName:" + this.userName);
System.out.println("password:" + this.password);
connPool = new Vector<Connection>();
for (int i = 0; i < poolMaxSize; i++) {
connPool.add(createConnection());
}
}
/**
* @return
*/
private Connection createConnection() {
Connection connection = null;
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
connection = DriverManager.getConnection(url, userName, password);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
private Connection createProxyConnection(Connection connection){
if(connection == null){
connection = createConnection();
}
ProxyConnectionHandler proxyHandler = new ProxyConnectionHandler();
proxyHandler.setConnection(connection);
return proxyHandler.proxyBind();
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getConnection()
*/
public Connection getConnection() {
int size = connPool.size();
if (connPool.size() < poolMinSize) {
return createProxyConnection(null);
} else {
Connection connection = (Connection) connPool.get(size - 1);
connPool.remove(size - 1);
return createProxyConnection(connection);
}
}
public static synchronized void releaseConnection(Connection connection) {
if(connPool.size() > poolMaxSize){
DbUtils.closeQuietly(connection);
}else{
connPool.add(connection);
}
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getConnection(java.lang.String,
* java.lang.String)
*/
public Connection getConnection(String arg0, String arg1)
throws SQLException {
return null;
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getLogWriter()
*/
public PrintWriter getLogWriter() throws SQLException {
return null;
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getLoginTimeout()
*/
public int getLoginTimeout() throws SQLException {
return 0;
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#setLogWriter(java.io.PrintWriter)
*/
public void setLogWriter(PrintWriter arg0) throws SQLException {
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#setLoginTimeout(int)
*/
public void setLoginTimeout(int arg0) throws SQLException {
}
}
=========================
package com.mjp.core.db.jdbc.ds;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import com.mjp.core.util.ProxyUtils;
public class ProxyConnectionHandler implements InvocationHandler {
private Connection connection;
public ProxyConnectionHandler(){}
public ProxyConnectionHandler(Connection connection) {
this.connection = connection;
}
/* (non-Javadoc)
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (method.getName().equals("close")) {
if(connection.getAutoCommit() == false){
try{
connection.commit();
}catch(Exception ex){
connection.rollback();
ex.printStackTrace();
}finally{
try{
connection.setAutoCommit(true);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
DbcpDataSource.releaseConnection(connection);
return null;
} else {
return method.invoke(connection, args);
}
}
public Connection proxyBind() {
Connection proxyConnection = (Connection) Proxy.newProxyInstance(
connection.getClass().getClassLoader(), ProxyUtils.getAllIntefaces(connection.getClass())
, this);
return proxyConnection;
}
public Connection getConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
}
在代理connection对象 代理 close方法
/**
*
*/
package com.mjp.core.db.jdbc.ds;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Vector;
import javax.sql.DataSource;
import com.mjp.core.db.tool.DbUtils;
import com.mjp.core.properties.PropertiesFacade;
/**
* @author Administrator
*
*/
public class DbcpDataSource implements DataSource {
private static Vector<Connection> connPool;
private static int poolMaxSize = 10;
private static int poolMinSize = 1;
private String userName;
private String password;
private String driverClass;
private String url;
public DbcpDataSource() {
init();
}
/**
*
*/
private void init() {
this.url = PropertiesFacade.getProperties("database.url");
this.driverClass = PropertiesFacade.getProperties("database.driver");
this.userName = PropertiesFacade.getProperties("database.user");
this.password = PropertiesFacade.getProperties("database.password");
try {
poolMaxSize = Integer.parseInt(PropertiesFacade
.getProperties("database.maxsize"));
} catch (Exception ex) {
poolMaxSize = 10;
}
try {
poolMinSize = Integer.parseInt(PropertiesFacade
.getProperties("database.minsize"));
} catch (Exception ex) {
poolMinSize = 1;
}
System.out.println("url:" + this.url);
System.out.println("driverClass:" + this.driverClass);
System.out.println("userName:" + this.userName);
System.out.println("password:" + this.password);
connPool = new Vector<Connection>();
for (int i = 0; i < poolMaxSize; i++) {
connPool.add(createConnection());
}
}
/**
* @return
*/
private Connection createConnection() {
Connection connection = null;
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
connection = DriverManager.getConnection(url, userName, password);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
private Connection createProxyConnection(Connection connection){
if(connection == null){
connection = createConnection();
}
ProxyConnectionHandler proxyHandler = new ProxyConnectionHandler();
proxyHandler.setConnection(connection);
return proxyHandler.proxyBind();
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getConnection()
*/
public Connection getConnection() {
int size = connPool.size();
if (connPool.size() < poolMinSize) {
return createProxyConnection(null);
} else {
Connection connection = (Connection) connPool.get(size - 1);
connPool.remove(size - 1);
return createProxyConnection(connection);
}
}
public static synchronized void releaseConnection(Connection connection) {
if(connPool.size() > poolMaxSize){
DbUtils.closeQuietly(connection);
}else{
connPool.add(connection);
}
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getConnection(java.lang.String,
* java.lang.String)
*/
public Connection getConnection(String arg0, String arg1)
throws SQLException {
return null;
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getLogWriter()
*/
public PrintWriter getLogWriter() throws SQLException {
return null;
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#getLoginTimeout()
*/
public int getLoginTimeout() throws SQLException {
return 0;
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#setLogWriter(java.io.PrintWriter)
*/
public void setLogWriter(PrintWriter arg0) throws SQLException {
}
/*
* (non-Javadoc)
*
* @see javax.sql.DataSource#setLoginTimeout(int)
*/
public void setLoginTimeout(int arg0) throws SQLException {
}
}
=========================
package com.mjp.core.db.jdbc.ds;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import com.mjp.core.util.ProxyUtils;
public class ProxyConnectionHandler implements InvocationHandler {
private Connection connection;
public ProxyConnectionHandler(){}
public ProxyConnectionHandler(Connection connection) {
this.connection = connection;
}
/* (non-Javadoc)
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (method.getName().equals("close")) {
if(connection.getAutoCommit() == false){
try{
connection.commit();
}catch(Exception ex){
connection.rollback();
ex.printStackTrace();
}finally{
try{
connection.setAutoCommit(true);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
DbcpDataSource.releaseConnection(connection);
return null;
} else {
return method.invoke(connection, args);
}
}
public Connection proxyBind() {
Connection proxyConnection = (Connection) Proxy.newProxyInstance(
connection.getClass().getClassLoader(), ProxyUtils.getAllIntefaces(connection.getClass())
, this);
return proxyConnection;
}
public Connection getConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
}
发表评论
-
全国最新行政区划代码(Tree)json数据以及地理数据
2020-11-11 21:23 382基于阿里提供的地理数据 http://datav.aliyun ... -
小知识点--解锁 AppChecker ping ip
2019-06-19 08:40 442在使用AppChecker 进行主动拨测的时候,目 ... -
记录年会小系统
2018-02-04 14:42 1144有点意思,年会过后,抽奖活动saas小系统扒光看看:支持P ... -
jdbc方式以 sys账号连接oracle数据的问题
2017-08-22 10:44 484多年以后,在操作oracle 时 发现 jdbc 连 ... -
proguard 代码混淆
2016-11-22 10:59 692url:http://proguard.sourceforg ... -
solr 表达式意义
2015-02-03 19:29 7791. “:”指定字段查指定值,如返回所有值*:* 2. “? ... -
solr 安装配置
2015-02-03 13:15 747solr 安装配置步骤: 1 首先下载solr(最新 ... -
javax.net.ssl.SSLKeyException: RSA premaster secre临时解决方案
2014-11-25 19:38 4420javax.net.ssl.SSLKeyException ... -
compass 小知识点
2014-09-15 10:22 940今天发现排序不管事, 查了一下:索引的问题:排序的列不进 ... -
java_opts 常用
2014-08-14 13:16 1221JVM设置,可以查考如下配置example:# Memory ... -
RPC Socket 服务调用模型
2014-04-09 16:14 602最近在看Dubbo 服务框架, 通过RPC 实现了输入和 ... -
JVM 基本参数
2014-04-03 11:49 789基本的JVM参数:-classpath, -cp: 设置类搜 ... -
eclipse 快捷键失效解决方法
2014-01-17 17:20 722有时候eclispe快捷键失效了,编码起来太难受了。 ... -
Compass+ lucene 通用代码(脱离数据库)
2013-11-08 15:09 920最近需要通过检索分类的方式进行处理,所以就写了接口与实 ... -
DEBUG远程tomcat
2013-08-21 13:35 1003一、在windows系统中:打开%CATALINE_H ... -
自动获取网页内容,然后写入excel文档中
2013-07-05 15:22 3451今天需要将北京物业公司名称以及电话给整理出来,发现爱帮 ... -
继续学习jersey+spring 构建RESTful风格 webservice
2013-03-13 10:36 3462j先说一下springmvc rest风格 spring ... -
尽量少使用jaxb 进行xml与对象互换
2013-03-09 17:33 1354尽量少使用jaxb 进行xml与对象互换 问题不少,这个好 ... -
Cookie path的设置
2013-02-21 10:58 1952cookie path 设置 IE对如下的co ... -
http 相关知识点
2012-10-11 10:49 1066Host头域 Host头域指定请求资源的Intenet主机和 ...
相关推荐
Proxy模式是一种设计模式,它允许我们为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到...通过分析和运行这些示例,你可以更深入地掌握如何在Java中使用Proxy模式来增强对象的功能或控制其访问。
到工厂方法到抽象工厂,这几种都带有“工厂”的模式,总是容易叫人迷糊,我仔细研究了下,然后用简单的例子做类比,列出了自己的通俗理解和比较,大部分是自己的体会,感觉理的比较清楚,末尾提了下Proxy模式。
代理模式的核心思想是通过代理类来代替实际的对象,使得客户端可以通过代理类与真实对象进行交互,而无需直接操作真实对象,这样可以增加程序的灵活性,同时也便于管理或扩展系统。 代理模式主要分为以下几种类型:...
静态代理是通过显式创建一个代理类来实现的,而动态代理则利用Java的反射API和InvocationHandler接口在运行时动态生成代理类。 源码分析是理解设计模式的关键。对于Proxy模式,我们可以分析一个简单的静态代理例子...
JDK动态代理基于接口实现,它要求目标对象必须实现至少一个接口,然后通过Proxy类和InvocationHandler接口来创建并控制代理对象。当我们调用代理对象的方法时,实际执行的是InvocationHandler的invoke方法,这样可以...
Proxy模式是软件设计模式中的一个关键元素,属于结构型模式的一种。在C++中,Proxy模式主要用于为其他对象提供一种代理以控制对这个对象的访问。这种模式的核心思想是通过创建一个代理对象来充当目标对象的中介,...
标题中的“从房屋买卖看 java proxy 模式”暗示了我们将通过一个具体的场景来探讨 Java 中的代理(Proxy)模式。在软件设计中,代理模式是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在...
数据源代理 关于 为JDBC API提供代理类,以拦截正在执行的查询和方法。 版本号 2.x (开发中) ... < artifactId>datasource-proxy [LATEST_VERSION] 最新版本是: 不依赖其他库,一切都是可选的。
总的来说,Proxy代理模式为我们提供了一种灵活的方式来扩展或控制对象的行为,而无需修改对象本身。它在许多场景下都非常有用,如远程调用、安全控制、缓存策略以及事务管理等。通过理解和熟练使用Proxy代理模式,...
2. **生成Proxy代码**:在目标系统中,使用SE80事务码,通过“生成ABAP Proxy”功能,输入源系统的服务接口信息,自动生成对应的ABAP Proxy类和相关代码。 3. **编译与激活**:生成的Proxy代码需要在目标系统中进行...
利用wsdl.exe生成webservice代理类: 根据提供的wsdl生成webservice代理类 1、开始->程序->Visual Studio 2005 命令提示 2、输入如下红色标记部分 D:\Program Files\Microsoft Visual Studio 8\VC>wsdl /...
用于分布式跟踪的库(如果在classpath中找到)可启用jdbc连接和查询跟踪(仅适用于p6spy或datasource-proxy) 为什么不将DataSource包装在配置中? 除了使用库之外,您还可以手动包装DataSource ,但是该库还提供了...
代理模式可以通过继承、接口或动态代理(如Java的`java.lang.reflect.Proxy`类)来实现。具体选择哪种方式取决于实际需求和语言特性。 总的来说,代理模式是一种灵活的设计模式,它可以让我们在不修改原有对象的...
- C#的System.Reflection.Emit命名空间提供了动态类型生成的能力,允许在运行时创建代理类,这在AOP(面向切面编程)中非常有用。 - System.Proxy中的DynamicMethod和Delegate类也可以帮助构建动态代理,用于实现...
MySQL数据库中间件:基于C语言开发,包含59个文件,包括22个C源文件...该项目是一个分布式MySQL数据库中间件,采用Proxy模式设计,基于核心业务对象切分,旨在提供高效的数据库查询和处理能力,适用于分布式系统环境。
它通过设置`esri.config.defaults.io.proxyUrl`来指定代理服务的URL,当ArcGIS JavaScript API请求需要跨域访问的资源时,会自动通过这个代理转发请求。在Java应用中,你需要将`proxy.jsp`部署到服务器,并在Esri的...
在Java中,我们可以利用反射API和Java的Proxy类来动态地创建代理对象。Proxy类提供了`newProxyInstance()`方法,用于创建代理对象。这个方法需要三个参数:一个类加载器,一个接口数组(代理对象需要实现的接口),...
总结来说,Proxy代理模式在Java中提供了扩展和控制对象访问的手段。无论是静态代理还是动态代理,都可以帮助我们在不修改原有代码的情况下,增强或扩展对象的功能,从而提高代码的灵活性和可维护性。在实际开发中,...
在本文中,我们将深入探讨如何利用Proxy对象实现权限控制和数据校验,这在构建复杂的前端应用或者提供更加安全的数据管理时尤其有用。 首先,Proxy对象是ES6引入的一个新特性,它通过创建一个代理实例来充当目标...
在"InterfaceProxy"目录中,你可以看到如何利用`Proxy.newProxyInstance()`方法创建接口的代理对象,并通过实现`InvocationHandler`接口的`invoke()`方法来控制代理对象的行为。这种方式比静态代理更灵活,因为不...