最近,我一直在尝试使用Java API建立与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 update 40 64 bit
Oracle客户端: Oracle 11g 64位
ArcSDE SDK: 10.2.2 64位
其他设置。
1。我创建了SDEHOME系统变量,其值指向磁盘上的文件夹。在文件夹中我创建了'bin'目录并用以下文件填充它:
icudt44.dll
icuuc44.dll
pe.dll
sg.dll
的xerces-c_3_1.dll
sde.dll
sdejavautil.dll
gsrvrora11g102.dll
sdeora11gsrvr102.dll
2. {SDEHOME} / bin的路径已添加到系统的路径中。
3. {SDEHOME} / bin的路径已添加到Java VM:-Djava.library.path = {absolute-path-to-bin-folder}
4. oracle数据库很好,我可以使用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.AUTHENTICATION_SERVICES =(NONE)
NAMES.DIRECTORY_PATH =(TNSNAMES,EZCONNECT)
我已经尝试过了。
1。我尝试使用其他java版本
2. 我尝试添加ORACLE_HOME系统变量并将其指向我的oracle客户端安装
3. 我禁用了Windows防火墙和我的防病毒系统。
4. 我尝试连接到9.3.1 oracle地理数据库和10.3 oracle地理数据库。
在每种情况下我都得到了相同的结果:在调试模式下踩正常,自由运行应用程序 - 挂起。
此时我的想法已经不多了。我可以在我的IDE(eclipse - mars)中看到它在SeConnection.createDirectConnection()方法中保存。
有人可以给我一些建议吗?为什么它会像那样?也许我在准备直接连接系统时错过了一些东西。
答案 0 :(得分:0)
这是10.2.2 SDE SDK的错误。 BUG-000087489
Java 1.6绝对不会有这个问题。这是我使用的解决方法。您还可以尝试Java 1.7或1.8的较低版本。