最近,我一直在嘗試使用Java API建立與Oracle地理數據庫的直接連接。建立與Oracle上的ESRI地理數據庫的直接連接時掛起,而不處於調試模式
問題是,當我執行代碼時,只有在我逐步執行程序時,調試模式下的連接才能正常工作。在其他所有情況下,程序都試圖建立連接。
下面是一段代碼,我使用:
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專業版64位
的Java: 8日更新40 64位
Oracle clie NT:的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虛擬機的路徑:-Djava.library.path = {絕對路徑到箱文件夾}
4.的甲骨數據庫沒問題,我無法用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})
)
)
這是我SQLNET。ORA文件:
SQLNET.AUTHENTICATION_SERVICES =(NONE)
NAMES.DIRECTORY_PATH =(TNSNAMES,EZCONNECT)
我已經嘗試過。
我試圖用其他的Java版本
2.我嘗試添加ORACLE_HOME系統變量,它指出了我的Oracle客戶端安裝
我禁用Windows防火牆和我的防病毒系統。
4.我試着連接到9.3.1 oracle地理數據庫和10.3 oracle地理數據庫。
在每種情況下,我都得到了相同的結果:在調試模式下步進很好,自由運行應用程序 - 掛起。
在這一點上,我用盡了想法。我可以在我的IDE(eclipse-mars)中看到它在SeConnection.createDirectConnection()方法中存在。
有人可以給我一些建議,爲什麼它的行爲呢?也許我在準備直接連接系統時錯過了一些東西。
你能否粘貼你的'createDirectConnection'方法? – learningloop
不幸的是,我不能這樣做,因爲這個方法來自ESRI jar。而他們的來源不可用。 –
好吧,至少你能確認這個方法是否與SEConnection類似的論點? '新的SeConnection(「none」,「sde:oracle11g:geobase_tns」,「none」,「{my-user}」,「{my-password} @geobase_tns」);'你也嘗試過使用'SEConnection'構造函數而不是用於非調試模式的'createDirectConnetion'方法? – learningloop