Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
dfffbd5f
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
dfffbd5f
编写于
4月 06, 2011
作者:
L
lancea
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7034471: Wrap registeredDrivers in DriverManager
Reviewed-by: alanb, briangoetz
上级
aabc7a22
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
18 deletion
+45
-18
src/share/classes/java/sql/DriverManager.java
src/share/classes/java/sql/DriverManager.java
+45
-18
未找到文件。
src/share/classes/java/sql/DriverManager.java
浏览文件 @
dfffbd5f
...
@@ -80,7 +80,7 @@ public class DriverManager {
...
@@ -80,7 +80,7 @@ public class DriverManager {
// List of registered JDBC drivers
// List of registered JDBC drivers
private
final
static
CopyOnWriteArrayList
<
Driver
>
registeredDrivers
=
new
CopyOnWriteArrayList
<
Driver
>();
private
final
static
CopyOnWriteArrayList
<
Driver
Info
>
registeredDrivers
=
new
CopyOnWriteArrayList
<
DriverInfo
>();
private
static
volatile
int
loginTimeout
=
0
;
private
static
volatile
int
loginTimeout
=
0
;
private
static
volatile
java
.
io
.
PrintWriter
logWriter
=
null
;
private
static
volatile
java
.
io
.
PrintWriter
logWriter
=
null
;
private
static
volatile
java
.
io
.
PrintStream
logStream
=
null
;
private
static
volatile
java
.
io
.
PrintStream
logStream
=
null
;
...
@@ -265,22 +265,22 @@ public class DriverManager {
...
@@ -265,22 +265,22 @@ public class DriverManager {
// Walk through the loaded registeredDrivers attempting to locate someone
// Walk through the loaded registeredDrivers attempting to locate someone
// who understands the given URL.
// who understands the given URL.
for
(
Driver
aDriver
:
registeredDrivers
)
{
for
(
Driver
Info
aDriver
:
registeredDrivers
)
{
// If the caller does not have permission to load the driver then
// If the caller does not have permission to load the driver then
// skip it.
// skip it.
if
(
isDriverAllowed
(
aDriver
,
callerCL
))
{
if
(
isDriverAllowed
(
aDriver
.
driver
,
callerCL
))
{
try
{
try
{
if
(
aDriver
.
acceptsURL
(
url
))
{
if
(
aDriver
.
driver
.
acceptsURL
(
url
))
{
// Success!
// Success!
println
(
"getDriver returning "
+
aDriver
.
getClass
().
getName
());
println
(
"getDriver returning "
+
aDriver
.
driver
.
getClass
().
getName
());
return
(
aDriver
);
return
(
aDriver
.
driver
);
}
}
}
catch
(
SQLException
sqe
)
{
}
catch
(
SQLException
sqe
)
{
// Drop through and try the next driver.
// Drop through and try the next driver.
}
}
}
else
{
}
else
{
println
(
" skipping: "
+
aDriver
.
getClass
().
getName
());
println
(
" skipping: "
+
aDriver
.
driver
.
getClass
().
getName
());
}
}
}
}
...
@@ -305,7 +305,7 @@ public class DriverManager {
...
@@ -305,7 +305,7 @@ public class DriverManager {
/* Register the driver if it has not already been added to our list */
/* Register the driver if it has not already been added to our list */
if
(
driver
!=
null
)
{
if
(
driver
!=
null
)
{
registeredDrivers
.
addIfAbsent
(
driver
);
registeredDrivers
.
addIfAbsent
(
new
DriverInfo
(
driver
)
);
}
else
{
}
else
{
// This is for compatibility with the original DriverManager
// This is for compatibility with the original DriverManager
throw
new
NullPointerException
();
throw
new
NullPointerException
();
...
@@ -333,9 +333,10 @@ public class DriverManager {
...
@@ -333,9 +333,10 @@ public class DriverManager {
ClassLoader
callerCL
=
DriverManager
.
getCallerClassLoader
();
ClassLoader
callerCL
=
DriverManager
.
getCallerClassLoader
();
println
(
"DriverManager.deregisterDriver: "
+
driver
);
println
(
"DriverManager.deregisterDriver: "
+
driver
);
if
(
registeredDrivers
.
contains
(
driver
))
{
DriverInfo
aDriver
=
new
DriverInfo
(
driver
);
if
(
registeredDrivers
.
contains
(
aDriver
))
{
if
(
isDriverAllowed
(
driver
,
callerCL
))
{
if
(
isDriverAllowed
(
driver
,
callerCL
))
{
registeredDrivers
.
remove
(
d
river
);
registeredDrivers
.
remove
(
aD
river
);
}
else
{
}
else
{
// If the caller does not have permission to load the driver then
// If the caller does not have permission to load the driver then
// throw a SecurityException.
// throw a SecurityException.
...
@@ -363,11 +364,11 @@ public class DriverManager {
...
@@ -363,11 +364,11 @@ public class DriverManager {
ClassLoader
callerCL
=
DriverManager
.
getCallerClassLoader
();
ClassLoader
callerCL
=
DriverManager
.
getCallerClassLoader
();
// Walk through the loaded registeredDrivers.
// Walk through the loaded registeredDrivers.
for
(
Driver
aDriver
:
registeredDrivers
)
{
for
(
Driver
Info
aDriver
:
registeredDrivers
)
{
// If the caller does not have permission to load the driver then
// If the caller does not have permission to load the driver then
// skip it.
// skip it.
if
(
isDriverAllowed
(
aDriver
,
callerCL
))
{
if
(
isDriverAllowed
(
aDriver
.
driver
,
callerCL
))
{
result
.
addElement
(
aDriver
);
result
.
addElement
(
aDriver
.
driver
);
}
else
{
}
else
{
println
(
" skipping: "
+
aDriver
.
getClass
().
getName
());
println
(
" skipping: "
+
aDriver
.
getClass
().
getName
());
}
}
...
@@ -569,16 +570,16 @@ public class DriverManager {
...
@@ -569,16 +570,16 @@ public class DriverManager {
// Remember the first exception that gets raised so we can reraise it.
// Remember the first exception that gets raised so we can reraise it.
SQLException
reason
=
null
;
SQLException
reason
=
null
;
for
(
Driver
aDriver
:
registeredDrivers
)
{
for
(
Driver
Info
aDriver
:
registeredDrivers
)
{
// If the caller does not have permission to load the driver then
// If the caller does not have permission to load the driver then
// skip it.
// skip it.
if
(
isDriverAllowed
(
aDriver
,
callerCL
))
{
if
(
isDriverAllowed
(
aDriver
.
driver
,
callerCL
))
{
try
{
try
{
println
(
" trying "
+
aDriver
.
getClass
().
getName
());
println
(
" trying "
+
aDriver
.
driver
.
getClass
().
getName
());
Connection
con
=
aDriver
.
connect
(
url
,
info
);
Connection
con
=
aDriver
.
driver
.
connect
(
url
,
info
);
if
(
con
!=
null
)
{
if
(
con
!=
null
)
{
// Success!
// Success!
println
(
"getConnection returning "
+
aDriver
.
getClass
().
getName
());
println
(
"getConnection returning "
+
aDriver
.
driver
.
getClass
().
getName
());
return
(
con
);
return
(
con
);
}
}
}
catch
(
SQLException
ex
)
{
}
catch
(
SQLException
ex
)
{
...
@@ -607,3 +608,29 @@ public class DriverManager {
...
@@ -607,3 +608,29 @@ public class DriverManager {
private
static
native
ClassLoader
getCallerClassLoader
();
private
static
native
ClassLoader
getCallerClassLoader
();
}
}
/*
* Wrapper class for registered Drivers in order to not expose Driver.equals()
* to avoid the capture of the Driver it being compared to as it might not
* normally have access.
*/
class
DriverInfo
{
final
Driver
driver
;
DriverInfo
(
Driver
driver
)
{
this
.
driver
=
driver
;
}
public
boolean
equals
(
Object
other
)
{
return
(
other
instanceof
DriverInfo
)
&&
this
.
driver
==
((
DriverInfo
)
other
).
driver
;
}
public
int
hashCode
()
{
return
driver
.
hashCode
();
}
public
String
toString
()
{
return
(
"driver[className="
+
driver
+
"]"
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录