少し読みたい人のために、(短いバージョンのために最後までスキップしてください):
Java アプリケーションをリモートの Oracle データベースに接続しようとしています。運が悪かったので、IntelliJ Idea 12、Java バージョン「1.6.0_51」64 ビットで Mac 10.7.5 を使用しています。私は一日中この仕事をしようとしてきましたが、成功しませんでした。また、java.library.path に共有 dylib がないため、IntelliJ で「DataSource」ビューを使用できませんでした。2つの問題が関連していると思われます。
Oracle Instant Client 64 ビット (jdbc ファイルを含む) をインストールしてみました。dylib を /usr/lib/java にコピーしました。これにより、別のエラーで「DataSource」ビューの問題を解決することができました。
java.lang.RuntimeException: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is:
java.io.EOFException
in RemoteUtil$RemoteInvocationHandler.invoke(RemoteUtil.java:219)
at com.sun.proxy.$Proxy115.connect(Unknown Source)
in LocalDataSource.getConnection(LocalDataSource.java:158)
Caused by: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is:
java.io.EOFException
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:209)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at com.sun.proxy.$Proxy114.connect(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
in RemoteUtil$RemoteInvocationHandler.invoke(RemoteUtil.java:211)
... 21 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readByte(DataInputStream.java:250)
at sun.rmi.transport.StreamRemoteCall.executeCal
そのため、旅は続き、ojdbc .dylibs と .jars の 32 ビット バージョンを使用しようとしましたが、IntelliJ の DataSource ビューを使用して oracle db に接続しようとすると、「間違ったアーキテクチャ」に遭遇しました。
私のアプリのほとんどは 32 ビット JVM を必要とするライブラリを使用しているため、32 ビットを使用してすべての一貫性を保ちたいと考えています。
tl;dr 'ers:
- IntelliJ Idea 12 DataSource ビューを介して oracle db に接続することも、JDBC を使用して Java アプリを介して接続することもできません
-背景情報: Mac OSX 10.7.5、Java 1.6.0_51 64 ビット、IntelliJ Idea 12、リモート Oracle 11G DB
- jdbc ファイルを使用して 32 ビットと 64 ビットの両方のバージョンの Oracle Instant Client を試しましたが、うまくいきませんでした
どんな提案でも大歓迎です!ありがとうございました
追記事項: sqlplus 経由でも接続できません。エラー ORA-21561: OID の生成に失敗しました。検索結果は、db サーバーがリモート サーバー上にあり、/etc/tnsnames.ora の TNS エントリを使用して接続しているため、意味をなさない /etc/hosts ファイルの修正のみを示しています。
===UPDATE 1=== Java コードを介した接続について、ある程度の進展がありました。このコードの使用:
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@hostname:port/service_name", "user", "password");
しかし、エラーを受け取りました:
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
Eclipse ide を介して作業マシンでこの正確なコードを使用して接続できますが、Mac ラップトップでは接続できません。