IO Erreur: j'Ai moins l'un d'un appel read

Je suis en cours d'exécution hors du temps et des idées. J'ai besoin de faire cette simulation de la réservation, la totalité d'un plan à l'aide de Java et une Base de données Oracle.

Nous avons quelques instructions sur la façon de faire et ce qui est prévu, mais notre code continuera à avoir ce vraiment étrange et inattendue comportement.

La base de données ressemble à ceci:

IO Erreur: j'Ai moins l'un d'un appel read

Nous avons besoin de disposer d'un pool de threads en cours d'exécution en permanence pour simuler 10 utilisateurs simultanés, j'essaie de réserver un avion. Lorsqu'un thread se termine, un autre prend sa place. Certains d'entre les fils ont à faire instantanément (hasard) à la fois de réserve et de livre. D'autres seront de la réserve, puis de décider d'une seconde s'ils veulent réserver ou pas. S'ils décident d'attendre et livre un autre thread de réserve, dans l'intervalle, ce qui signifie que le thread de la perdre de réservation et prendra fin. Il peut aussi attendre une longue période de temps, dans lequel il sera considéré comme un délai d'attente.

Maintenant, voici l'étrange parties:

  1. Il me dit alors l'erreur du titre.
  2. Montre alors moi pour l'HelperClass.java ligne sur la façon de vérifier si tout est réservé à l' (inclus ci-dessous).

De Master.java

public static void main(String[] args) throws InterruptedException, ExecutionException {

    long start = System.nanoTime();
    Random r = new Random(start);
    ExecutorService pool = Executors.newFixedThreadPool(10);
    int threadsStarted = 0;
    List<Future<Integer>> results = new ArrayList<>();
    do {
        //TODO: Check for available seats left
        long id = r.nextLong();
        Future<Integer> submit = pool.submit(new UserThread(id));
        results.add(submit);
        threadsStarted++;
        id++;
    } while (!HelperClass.isAllBooked("CR9"));

    pool.shutdown();

De HelperClass.java

public static boolean isAllBooked(String plane_no) {
    String sql = "SELECT * FROM SEAT WHERE plane_no=?";

    try(Connection conn = getConnection("db_010", "db2014");
            PreparedStatement st = conn.prepareStatement(sql)) {
        st.setString(1, plane_no);
        ResultSet rs = st.executeQuery();
        while (rs.next()) {
            int i = rs.getInt("BOOKED");
            if (rs.wasNull()) {
                return false;
            }
        }
    } catch (SQLException ex) {
        System.out.println("[HELPER CLASS] SQL ERROR: " + ex.getMessage());
    }
    return true;
}

De ne pas remplir ce poste avec le code étape par étape, j'ai juste arrêter ici et vous fournir si vous avez besoin de plus de voir les problèmes dans le présent code. Veuillez noter que ceci est de prototypage code et n'est pas censé être étonnamment sûr de le suivre ou de chaque code d'éthique sur la terre.

De la pile:

[HELPER CLASS] SQL ERROR: IO Error: Got minus one from a read call
Exception in thread "main" java.lang.NullPointerException
at dbassignment4.HelperClass.isAllBooked(HelperClass.java:50)
at dbassignment4.Master.main(Master.java:36)
apr 28, 2014 8:02:59 PM dbassignment4.UserThread getConnection
SEVERE: null
java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at dbassignment4.UserThread.getConnection(UserThread.java:76)
at dbassignment4.UserThread.reserve(UserThread.java:63)
at dbassignment4.UserThread.call(UserThread.java:35)
at dbassignment4.UserThread.call(UserThread.java:21)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: oracle.net.ns.NetException: Got minus one from a read call
at oracle.net.ns.Packet.receive(Packet.java:314)
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:153)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 15 more
BUILD STOPPED (total time: 36 seconds)
Aussi quel est le message d'erreur exact que vous obtenez
Aussi, c'est probablement mieux si vous mettez de la classe thread en arrière dans la question
J'ai fait le replacer, et il dit: "Exception in thread "main" java.lang.NullPointerException". Je suis à la recherche à la méthode d'assistance fournis également dans la question et rien ne semble être null.
la ligne en disant que les NPE est sur?
J'ai inclus l'ensemble de la pile maintenant.

OriginalL'auteur OmniOwl | 2014-04-28