在Oracle上建立与ESRI geodatabase直接连接的java在未处于调试模式时挂起
最近,我一直在尝试使用JavaAPI与oracle地理数据库建立直接连接
问题是,当我执行代码时,只有在调试模式下,当我一步一步地执行程序时,连接才能正常工作。在所有其他情况下,程序挂起以尝试建立连接
下面是我使用的一段代码:
public class SdeTest {
public static void main(String[] args) {
SeConnection connection = null;
try {
System.out.println("Connecting");
connection = new SeConnection("none", "sde:oracle11g:geobase_tns", "none", "{my-user}", "{my-password}@geobase_tns");
System.out.println("CONNECTION OK");
} catch (SeException e) {
e.printStackTrace();
} finally {
if(connection != null) {
try {
connection.freeAllLocks();
connection.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}
}
}
以下是我的系统配置:
系统:Windows 7 Professional 64位
Java:8更新40 64位
Oracle客户端:Oracle 11g 64位
ArcSDE SDK:10.2.2 64位
其他设置
1我已经创建了SDEHOME系统变量,它的值指向磁盘上的一个文件夹。在文件夹中,我创建了“bin”目录,并用以下文件填充它:
ICUDT4。动态链接库
icuuc44。动态链接库
体育。动态链接库
sg。动态链接库
xerces-c_3_1。动态链接库
sde。动态链接库
sdejavautil。动态链接库
gsrvrora11g102。动态链接库
sdeora11gsrvr102。动态链接库
2将{SDEHOME}/bin的路径添加到系统的路径中
3到{SDEHOME}/bin的路径被添加到Java VM:-Djava。图书馆路径={bin文件夹的绝对路径}
4oracle数据库很好,我可以用ArcCatalog查看我的空间数据
5以下是我对TNS的定义:
geobase_tns =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = {my-host-ip})(PORT = {my-port-number}))
)
(CONNECT_DATA =
(SERVICE_NAME = {my-service-name})
)
)
6这是我的sqlnet。ora文件:
SQLNET。身份验证服务=(无)
名字。目录_路径=(TNSNAMES,EZCONNECT)
我已经试过了
1我尝试使用其他java版本
2我尝试添加ORACLE_HOME系统变量,并将其指向我的ORACLE客户端安装
3我禁用了Windows防火墙和防病毒系统
4我尝试连接到9.3.1 oracle geodatabase和10.3 oracle geodatabase
在每种情况下,我都得到了相同的结果:进入调试模式很好,自由运行应用程序——挂起
在这一点上,我已经没有想法了。我可以在我的IDE(eclipse-mars)中看到它在SeConnection中保持不变。createDirectConnection()方法
有人能给我一些建议为什么它会这样吗?也许我在准备直接连接系统时错过了什么
# 1 楼答案
这是10.2.2 SDE SDK的一个错误BUG-000087489
Java1.6肯定不会有这个问题。这就是我使用的解决方法。您也可以尝试Java 1.7或1.8的较低版本