不处于调试模式时,与 Oracle 上的 ESRI 地理数据库建立直接连接会挂起

Establishing direct connection to ESRI geodatabase on Oracle hangs while not in debug mode

最近我一直在尝试使用 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 64bit

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的路径添加到系统的Path中。

3. {SDEHOME}/bin 的路径添加到 Java VM: -Djava.library.path={absolute-path-to-bin -文件夹}

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() 方法中。

有人可以给我一些建议,为什么它会这样?可能是我在准备直连系统的时候漏掉了什么。

这是 10.2.2 SDE SDK 的错误。 BUG-000087489.

Java1.6肯定不会有这个问题。这就是我使用的解决方法。您也可以尝试 Java 1.7 或 1.8 的较低版本。