ORA-12519, TNS:il n'y a pas de service de gestionnaire d'trouvé lors de l'insertion dans la Base de données Oracle avec X threads

Je suis en train de les insérer dans la base de données Oracle qui a deux colonnes-

ID         Primary Key     varchar2 (4000)
ACCOUNT                    varchar2 (4000)

J'ai écrit un programme Multithread. Et chaque thread à l'aide de unique id à chaque fois à insérer dans ID column comme ID est la clé primaire.

Le seul problème que je suis confronté à un certain point - Le code ci-dessous, les lancers, les exceptions ci-après au bout de quelques secondes.

 1) Null Pointer Exception
 2) java.sql.SQLException: Listener refused the connection with the following error:ORA-12519, TNS:no appropriate service handler found

Je ne suis pas en mesure de trouver l'origine de ce problème dans mon code car tout est bon à la recherche pour moi. Comme je suis à la clôture de chaque connexion correctement. Alors comment cette NPE est projeté et autre exception?

    ExecutorService service = Executors.newFixedThreadPool(10);

    try {
        //queue some tasks
        for (int i = 0; i < 100 * 10; i++) {
            service.submit(new ThreadTask());
        }
        service.shutdown();
        service.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);

        while (!service.isTerminated()) {

        }
    } catch (InterruptedException e) {
        LOG.warn("Threw a Interrupted Exception in" + XMPLoadTest.class.getSimpleName()
                + ".XMPLoadTest: boss told me to stop...Not my fault!!");
    }

Ci-dessous est ThreadTask classe-

class ThreadTask implements Runnable {
private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String CONNECTION = "jdbc:oracle:thin:@localhost:1521:ORCL";
private static final String USER = "scott";
private static final String PASSWORD = "tiger";
private static Connection dbConnection = null;
private static PreparedStatement preparedStatement = null;
private static final AtomicInteger id = new AtomicInteger(1);
private final static Logger LOG = Logger.getLogger(ThreadTask.class.getName());
public ThreadTask() {
}
@Override
public void run() {
try {
dbConnection = getDBConnection();
preparedStatement = dbConnection.prepareStatement(Constants.INSERT_ORACLE_SQL);
preparedStatement.setString(1, String.valueOf(id.getAndIncrement()));
preparedStatement.setString(2, Constants.A_ACCOUNT);
preparedStatement.executeUpdate();
} catch (Exception e) {
//NPE getting thrown here/And second exception as well
LOG.error("Threw a SQLException in " + getClass().getSimpleName(), e);
} finally {
if (preparedStatement != null) {
try {
preparedStatement.close();
preparedStatement = null;
} catch (SQLException e) {
//Oouch...
LOG.error("Threw a SQLException in finally block of prepared statement " + getClass().getSimpleName(), e);
}
}
if (dbConnection != null) {
try {
dbConnection.close();
dbConnection = null;
} catch (SQLException e) {
//Better go and look for SQL.
LOG.error("Threw a SQLException in finally block of dbConnection " + getClass().getSimpleName(), e);
}
}
}
}
/**
* Attempts to establish a connection to the given database URL
* 
* @return the db connection
*/
private Connection getDBConnection() {
Connection dbConnection = null;
try {
Class.forName(XMP_DRIVER);
dbConnection = DriverManager.getConnection(CONNECTION, USER, PASSWORD);
} catch (ClassNotFoundException e) {
LOG.error("Threw a ClassNotFoundException in " + getClass().getSimpleName(), e);
} catch (SQLException e) {
//DAMN! I'm not....
LOG.error("Threw a SQLException in " + getClass().getSimpleName(), e);
} catch (Exception e) {
LOG.error("Threw a Exception in " + getClass().getSimpleName(), e);
}
return dbConnection;
}
}

Est-il un potentiel problème avec mon code? Je suis plus inquiet au sujet de cette NPE.

StackTrace:

19:14:28,372 ERROR ThreadTask:187 - Threw a SQLException in ThreadTask
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at java.sql.DriverManager.getConnection(DriverManager.java:322)
at java.sql.DriverManager.getConnection(DriverManager.java:358)
at com.ebay.xmp.lnp.ThreadTask.getDBConnection(XMPLoadTest.java:179)
at com.ebay.xmp.lnp.ThreadTask.run(XMPLoadTest.java:137)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
at java.util.concurrent.FutureTask.run(FutureTask.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
at java.lang.Thread.run(Thread.java:736)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12519, TNS:no appropriate service handler found
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:395)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
... 14 more
19:14:28,376 ERROR ThreadTask:139 - Threw a SQLException in ThreadTask
java.lang.NullPointerException
at com.ebay.xmp.lnp.ThreadTask.run(XMPLoadTest.java:137)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:452)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
at java.util.concurrent.FutureTask.run(FutureTask.java:149)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919)
at java.lang.Thread.run(Thread.java:736)
La version d'oracle utilisez-vous? Ce code java a l'air bien. semble être un problème avec votre oracle configurer. Avez-vous essayé d'exécuter ce programme pour 1 seul thread (w/o trop de threads)? Ce lien peut être utile à vous aussi dadbm.com/2011/11/...
Grâce Prateek pour l'aider. J'ai oublié de la version Oracle mais je suppose qu'il est 11g or 10g une idée sur ma première exception qui est Null Pointer Exception? À ce stade, qui peut se présenter? En attendant, je vais jeter un oeil sur l'article que vous m'avez fourni.
Vous n'avez pas donné de ligne exacte où cette erreur se produit, mais le plus probable, c'est en raison de nulle dbConnection retourné à partir de getDBConnection méthode.
Veuillez mettre à jour votre réponse avec la trace de la pile de l'exception de pointeur null. Une chose que je pourrais croire qu'elle est la variable dbConnection se null dans une condition de concurrence et un autre thread tente d'exécuter une preparedStatement.executeUpdate() sur elle.
J'ai mis à jour ma question avec Stacktrace. Je crois aussi que ça se passe parce que dbConnection null seul et je suis étonné comment dbConnection est nulle? Il pourrait être une condition de course. Je n'ai debug qui et de comprendre dbConnection était retourner null. Mais comment est-ce possible? Et comment on peut résoudre ce problème?

OriginalL'auteur AKIWEB | 2013-02-06