Connection resets when executing a built Job that contains Oracle components

Overview

The Talend Studio allows you to build your Jobs as shell scripts that are executable out of your Talend Studio – in Talend Administration Center or on a command line. When executing a built Job that contains Oracle components out of your Studio, you may run into a Connection Reset error on a random basis. This article provides a workaround that allows you to avoid such errors.

 

Symptoms/Description

When executing a built Job out of your Studio, and if your Job uses the Oracle 11g driver to connect to an Oracle database, you may get the following error:

 

Exception in component tOracleConnection_1
java.sql.SQLRecoverableException: Exception d'E/S: Connection reset
        at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:101)
        at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:521)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:418)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:508)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:203)
        ……

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:150)
        at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:180)
        at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:169)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:117)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:92)
        at oracle.net.ns.NetInputStream.read(NetInputStream.java:77)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1034)
        at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1010)
        at oracle.jdbc.driver.T4CTTIoauthenticate.receiveOauth(T4CTTIoauthenticate.java:760)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:368)
        ……

 

Resolution

Use either of the following options to configure your JVM to use the urandom device.

 

Option 1

Start the JVM with the following parameter:

 

-Djava.security.egd=file:///dev/urandom

 

Option 2

Use the urandom device globally:

 

  1. Open the $JAVA_HOME/jre/lib/security/java.security file in a text editor.
  2. Find the following line:
    securerandom.source=file:/dev/random

    and modify it to:

    securerandom.source=file:/dev/urandom

    or

    securerandom.source=file:///dev/urandom

    Alternately, to avoid Java parsing issues on a Unix or Linux operating system, modify the line as follows:

    securerandom.source=file:/dev/./urandom

    or

    securerandom.source=file:/dev/../dev/urandom
  3. Save your change, exit the text editor, and run your Job.

 

Now the problem should be fixed.

 

For more information on this Oracle connection issue, see Oracle 11g JDBC driver hangs blocked by /dev/random – entropy pool empty

Version history
Revision #:
7 of 7
Last update:
‎06-16-2017 11:05 PM
Updated by:
 
Labels (1)
Tags (1)