最近我一直在尝试使用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更新40 64位
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查看我的空间数据。
这是我的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 =(无)
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.create Direct Connection()方法中保存。
有人可以给我一些建议,为什么它的表现如此?也许我在为直接连接准备系统时遗漏了一些东西。
这是10.2.2 SDE SDK的错误。 BUG-000087489。
Java 1.6绝对不会有这个问题。这是我使用的解决方法。您还可以尝试Java 1.7或1.8的较低版本。