不处于调试模式时,与 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 的较低版本。
最近我一直在尝试使用 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 的较低版本。