Search in sources :

Example 6 with ExceptionSafeRunnable

use of org.bboxdb.commons.concurrent.ExceptionSafeRunnable in project bboxdb by jnidzwetzki.

the class TestExceptionSafeRunnable method testDefaultImplementation2.

@Test(timeout = 60000)
public void testDefaultImplementation2() throws InterruptedException {
    final ExceptionSafeRunnable runnable = new ExceptionSafeRunnable() {

        @Override
        protected void runThread() throws Exception {
            throw new RejectedException("Exception");
        }
    };
    final Thread thread = new Thread(runnable);
    thread.start();
    thread.join();
}
Also used : RejectedException(org.bboxdb.commons.RejectedException) ExceptionSafeRunnable(org.bboxdb.commons.concurrent.ExceptionSafeRunnable) Test(org.junit.Test)

Example 7 with ExceptionSafeRunnable

use of org.bboxdb.commons.concurrent.ExceptionSafeRunnable in project bboxdb by jnidzwetzki.

the class HandleKeyQuery method handleQuery.

@Override
public /**
 * Handle a key query
 */
void handleQuery(final ByteBuffer encodedPackage, final short packageSequence, final ClientConnectionHandler clientConnectionHandler) throws IOException, PackageEncodeException {
    final Runnable queryRunable = new ExceptionSafeRunnable() {

        @Override
        public void runThread() throws Exception {
            try {
                if (clientConnectionHandler.getActiveQueries().containsKey(packageSequence)) {
                    logger.error("Query sequence {} is allready known, please close old query first", packageSequence);
                    return;
                }
                final QueryKeyRequest queryKeyRequest = QueryKeyRequest.decodeTuple(encodedPackage);
                final TupleStoreName requestTable = queryKeyRequest.getTable();
                if (!QueryHelper.handleNonExstingTable(requestTable, packageSequence, clientConnectionHandler)) {
                    return;
                }
                final String key = queryKeyRequest.getKey();
                final ClientQuery clientQuery = new KeyClientQuery(key, queryKeyRequest.isPagingEnabled(), queryKeyRequest.getTuplesPerPage(), clientConnectionHandler, packageSequence, requestTable);
                clientConnectionHandler.getActiveQueries().put(packageSequence, clientQuery);
                clientConnectionHandler.sendNextResultsForQuery(packageSequence, packageSequence);
            } catch (PackageEncodeException e) {
                logger.warn("Got exception while decoding package", e);
                clientConnectionHandler.writeResultPackage(new ErrorResponse(packageSequence, ErrorMessages.ERROR_EXCEPTION));
            }
        }

        @Override
        protected void afterExceptionHook() {
            final ErrorResponse responsePackage = new ErrorResponse(packageSequence, ErrorMessages.ERROR_EXCEPTION);
            clientConnectionHandler.writeResultPackageNE(responsePackage);
        }
    };
    // Submit the runnable to our pool
    if (clientConnectionHandler.getThreadPool().isShutdown()) {
        logger.warn("Thread pool is shutting down, don't execute query: {}", packageSequence);
        final ErrorResponse responsePackage = new ErrorResponse(packageSequence, ErrorMessages.ERROR_QUERY_SHUTDOWN);
        clientConnectionHandler.writeResultPackage(responsePackage);
    } else {
        clientConnectionHandler.getThreadPool().submit(queryRunable);
    }
}
Also used : QueryKeyRequest(org.bboxdb.network.packages.request.QueryKeyRequest) KeyClientQuery(org.bboxdb.network.server.KeyClientQuery) ExceptionSafeRunnable(org.bboxdb.commons.concurrent.ExceptionSafeRunnable) ClientQuery(org.bboxdb.network.server.ClientQuery) KeyClientQuery(org.bboxdb.network.server.KeyClientQuery) PackageEncodeException(org.bboxdb.network.packages.PackageEncodeException) TupleStoreName(org.bboxdb.storage.entity.TupleStoreName) ExceptionSafeRunnable(org.bboxdb.commons.concurrent.ExceptionSafeRunnable) ErrorResponse(org.bboxdb.network.packages.response.ErrorResponse)

Example 8 with ExceptionSafeRunnable

use of org.bboxdb.commons.concurrent.ExceptionSafeRunnable in project bboxdb by jnidzwetzki.

the class Lifecycle method shutdown.

@Override
public void shutdown() {
    final Runnable shutdownRunable = new ExceptionSafeRunnable() {

        @Override
        protected void runThread() throws Exception {
            logger.info("Got shutdown call via MBean");
            try {
                bBoxDBMain.stop();
            } catch (Exception e) {
                logger.warn("Got an exception while stopping application");
            }
            System.exit(0);
        }
    };
    final Thread shutdownThread = new Thread(shutdownRunable);
    shutdownThread.setName("Shutdown thread");
    shutdownThread.start();
}
Also used : ExceptionSafeRunnable(org.bboxdb.commons.concurrent.ExceptionSafeRunnable) ExceptionSafeRunnable(org.bboxdb.commons.concurrent.ExceptionSafeRunnable)

Aggregations

ExceptionSafeRunnable (org.bboxdb.commons.concurrent.ExceptionSafeRunnable)8 Test (org.junit.Test)4 PackageEncodeException (org.bboxdb.network.packages.PackageEncodeException)3 ErrorResponse (org.bboxdb.network.packages.response.ErrorResponse)3 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 RejectedException (org.bboxdb.commons.RejectedException)2 IOException (java.io.IOException)1 QueryKeyRequest (org.bboxdb.network.packages.request.QueryKeyRequest)1 SuccessResponse (org.bboxdb.network.packages.response.SuccessResponse)1 ClientQuery (org.bboxdb.network.server.ClientQuery)1 KeyClientQuery (org.bboxdb.network.server.KeyClientQuery)1 TupleStoreName (org.bboxdb.storage.entity.TupleStoreName)1