这是一个网友用threadlocal管理JDBC连接的一个例子,大家认为这样的管理是否存在安全问题?对于高性能,高安全的环境下是否可行?
关于性能,ThreadLocal的使用不会产生什么问题,也不存在多线程之间的竞争情况。
从代码的可靠性角度来考虑,其中有不少不足的地方。譬如对连接的获取,最好做一个Wrapper,保证不会被意外的关闭。另外,还需要保证服务结束的时候确保事务结束,连接关闭的机制。
能否给出你示意意的代码.
假设:一个用户执行一个功能,这个功能有JDBC事务.可能执行时间是10秒.而在这十秒还没执行完,这个用户再点了另一功能,而另一功能所打开的连接则是上一功能的功能对象,我认为这样可能会使同一个连接对象出现混乱,事务出现混乱.
不知道slangmgh 担心的是否是我说的这个问题,或者其它问题
[该贴被leoyu于2007年09月06日 14:24修改过]
>能否给出你示意意的代码.
很简单,你可以用聚合的方式实现一个Connection接口,把该类的close方法设置成什么都不做就可以了。然后在返回连接的时候返回该类的实例。
>假设:一个用户执行一个功能,这个功能有JDBC事务.可能执行时间是10秒.而在这十秒还没执行完,这个用户再点了另一功能,而另一功能所打开的连接则是上一功能的功能对象,我认为这样可能会使同一个连接对象出现混乱,事务出现混乱.
这个没有关系,因为webapp将分配给你新的线程执行你的请求,在该线程中,获取连接的时候就会是新的连接了(这就是ThreadLocal的作用,每个线程只能获取自己设置的变量)。如果你同时有10个请求在执行,那么只有一个ThreadLocal变量,但是不同的线程从该ThreadLocal中获取的对象是不同的。
猜你喜欢
本站原创《复杂软件设计之道:领域驱动设计全面解析与实战》