Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

oracle-xe-11.2の接続時のエラーについて

環境 さくらのVPS
CentOS Linux release 7.1.1503 (Core)
java version "1.8.0_60"
Java(TM) SE Runtime Environment 
(build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM
 (build 25.60-b23, mixed mode)

データベース:oracle-xe-11.2.0-1.0.x86_64.rpm
ドライバ:ojdbc6_g.jar

症状としては、
たまに30秒くらいで結果出力(エラーなし)
その後、実行すると数分実行中でエラー出力

以下のエラーがでて困っています。どうしたらよろし
いでしょうか。宜しくお願い致します。

ソースはしたです。
【調べた結果】
Java Virtual Machine (JVM) の SecureRandom() コ
ールのシーディング中に /dev/random デバイスによ
り、 I/O がブロックされてしまうことが原因らしい
対処1:起動オプション
 java -Djava.security.egd=file:/dev/./urandom 
Test02
サーブレットで実装予定なので却下
対処2:
$JAVA_HOME/jre/lib/security/java.securityの編集
securerandom.source=file:/dev/random
以下の様に変更
securerandom.source=file:/dev/urandom
結果としは正常、おそらくサーブレットでも正常に動
作はすると思う。
危惧している事は、11gは学習環境なのでとりあえ
ず、スルーして本題に進んで大丈夫なものなのか。
実務において製品を扱う場合12cでも同様の事態に陥
るのか。
もっと良い方法がありますでしょうか?


------------- error ------------------
java.sql.SQLRecoverableException: IO Error: 
Connection reset
at oracle.jdbc.driver.T4CConnection.logon
(T4CConnection.java:494)
at oracle.jdbc.driver.PhysicalConnection.<init>
(PhysicalConnection.java:547)
at oracle.jdbc.driver.T4CConnection.<init>
(T4CConnection.java:225)
at oracle.jdbc.driver.T4CDriverExtension.
getConnection(T4CDriverExtension.java:29)
at oracle.jdbc.driver.OracleDriver.connect
(OracleDriver.java:556)
at java.sql.DriverManager.getConnection
(DriverManager.java:664)
at java.sql.DriverManager.getConnection
(DriverManager.java:247)
at Test02.main(Test02.java:21)

Caused by: java.net.SocketException: Connection 
reset
at java.net.SocketOutputStream.socketWrite
(SocketOutputStream.java:113)
at java.net.SocketOutputStream.write
(SocketOutputStream.java:153)
at oracle.net.ns.DataPacket.send
(DataPacket.java:219)
at oracle.net.ns.NetOutputStream.flush
(NetOutputStream.java:208)
at oracle.net.ns.NetInputStream.getNextPacket
(NetInputStream.java:224)
at oracle.net.ns.NetInputStream.read
(NetInputStream.java:172)
at oracle.net.ns.NetInputStream.read
(NetInputStream.java:97)
at oracle.net.ns.NetInputStream.read
(NetInputStrea.java:82)
at oracle.jdbc.driver.
T4CSocketInputStreamWrapper.readNextPacket
(T4CSocketInputStreamWrapper.java:120)
at oracle.jdbc.driver.T4CSocketInputStream
Wrapper.read
(T4CSocketInputStreamWrapper.java:76)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1
(T4CMAREngine.java:1158)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1
(T4CMAREngine.java:1134)
at oracle.jdbc.driver.T4CTTIfun.receive
(T4CTTIfun.java:307)
at oracle.jdbc.driver.T4CTTIfun.doRPC
(T4CTTIfun.java:199)
at oracle.jdbc.driver.T4CTTIoauthenticate.
doOAUTH(T4CTTIoauthenticate.java:365)
at oracle.jdbc.driver.T4CTTIoauthenticate.
doOAUTH(T4CTTIoauthenticate.java:812)
at oracle.jdbc.driver.T4CConnection.logon
(T4CConnection.java:411)
... 7 more



---------------------ソース---------------------
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

public class Test02 {
    public static void main(String[] args){
        String url = "jdbc:oracle:thin:
                        @localhost:1521:XE";
        String sql ="select * from test";
        String user = "system";
        String pass = "passwd";

        Connection con = null;
        Statement stat = null;

        int id = 99;
        String name = "kanzakiaaa";
        try{
            con = DriverManager.
getConnection(url, user, pass);
            stat = con.createStatement();
            ResultSet resultSet = 
stat.executeQuery(sql);
            resultSet.next();
            id = resultSet.getInt("id");
            name = resultSet.getString("name");
            System.out.println(id);
            System.out.println(name);
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
           try{
               if(con != null){
                   con.close();
               }
               if(stat != null){
                   stat.close();
               }
            }catch(SQLException e1){                    
                e1.printStackTrace();
            }
        }
    }
}
      

0

回答

2303

閲覧

0件の回答

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。