/** * Default constructor to create a new <code>SessionPool</code>. * * @param engineConfiguration * The top-level {@link DiagnosisEngineConfiguration}. Must not be null! * @throws DiagnosisEngineException * If {@link DiagnosisEngineConfiguration} is invalid. * @see DiagnosisEngineConfiguration */ public SessionPool(DiagnosisEngineConfiguration<I, R> engineConfiguration) throws DiagnosisEngineException { this(engineConfiguration, defaultConfig(engineConfiguration)); }
/** * Checks whether the {@link DiagnosisEngine} is shut down. * * @return Returns true, if engine is shut down. */ private boolean isShutdown() { return sessionExecutor.isShutdown() || sessionPool.isClosed(); } }
/** * Default constructor to create a new DiagnosisEngine instance. * * @param configuration * The {@link DiagnosisEngineConfiguration} to be used. Must not be null. * @throws DiagnosisEngineException * If the provided configuration is not valid. */ public DiagnosisEngine(DiagnosisEngineConfiguration<I, R> configuration) throws DiagnosisEngineException { this.configuration = checkNotNull(configuration, "The configuration must not be null."); this.configuration.validate(); this.sessionPool = new SessionPool<>(configuration); // Wrap in listing executor this.sessionExecutor = MoreExecutors.listeningDecorator(configuration.getExecutorService()); }
private void returnSession() { try { sessionPool.returnObject(session); } catch (Exception e) { for (ISessionCallback<R> handler : configuration.getSessionCallbacks()) { handler.onFailure(new DiagnosisEngineException("Failed to return Session to ObjectPool.", e)); } } } });
session = sessionPool.borrowObject(input, variables); } catch (Exception e) { throw new DiagnosisEngineException("Failed to borrow Object from SessionPool.", e);
/** * {@inheritDoc} */ @Override public void shutdown(boolean awaitShutdown) { // 1. Shutdown the ExecutorService if (!sessionExecutor.isShutdown()) { sessionExecutor.shutdown(); if (awaitShutdown) { try { if (!sessionExecutor.awaitTermination(configuration.getShutdownTimeout(), TimeUnit.SECONDS)) { log.error("DiagnosisEngine executor did not shutdown within: {} seconds.", configuration.getShutdownTimeout()); } } catch (InterruptedException e) { log.error("InterruptedException occured during termination of the DiagnosisEngine executor.", e); } } } // 2. Shutdown the session pool try { sessionPool.close(); } catch (Exception e) { log.error("Failed closing DiagnosisEngine session pool.", e); } }