private void initBpelServer(EndpointReferenceContextImpl eprContext) { if (__log.isDebugEnabled()) { __log.debug("ODE initializing"); } ThreadFactory threadFactory = new ThreadFactory() { int threadNumber = 0; public Thread newThread(Runnable r) { threadNumber += 1; Thread t = new Thread(r, "ODEServer-" + threadNumber); t.setDaemon(true); return t; } }; if (_odeConfig.getThreadPoolMaxSize() == 0) _executorService = Executors.newCachedThreadPool(threadFactory); else _executorService = Executors.newFixedThreadPool(_odeConfig.getThreadPoolMaxSize(), threadFactory); { List<String> targets = new ArrayList<String>(); Collections.addAll( targets, _odeConfig.getProperty("cluster.localRoute.targets", "").split(",")); _clusterUrlTransformer = new ClusterUrlTransformer( targets, _odeConfig.getProperty( "cluster.localRoute.base", "http://localhost:8080/ode/processes/")); } _bpelServer = new BpelServerImpl(); _scheduler = createScheduler(); _scheduler.setJobProcessor(_bpelServer); BpelServerImpl.PolledRunnableProcessor polledRunnableProcessor = new BpelServerImpl.PolledRunnableProcessor(); polledRunnableProcessor.setPolledRunnableExecutorService(_executorService); polledRunnableProcessor.setContexts(_bpelServer.getContexts()); _scheduler.setPolledRunnableProcesser(polledRunnableProcessor); _cronScheduler = new CronScheduler(); _cronScheduler.setScheduledTaskExec(_executorService); _cronScheduler.setContexts(_bpelServer.getContexts()); _bpelServer.setCronScheduler(_cronScheduler); _bpelServer.setDaoConnectionFactory(_daoCF); _bpelServer.setInMemDaoConnectionFactory( new BpelDAOConnectionFactoryImpl(_scheduler, _odeConfig.getInMemMexTtl())); _bpelServer.setEndpointReferenceContext(eprContext); _bpelServer.setMessageExchangeContext(new MessageExchangeContextImpl(this)); _bpelServer.setBindingContext(new BindingContextImpl(this)); _bpelServer.setScheduler(_scheduler); if (_odeConfig.isDehydrationEnabled()) { CountLRUDehydrationPolicy dehy = new CountLRUDehydrationPolicy(); dehy.setProcessMaxAge(_odeConfig.getDehydrationMaximumAge()); dehy.setProcessMaxCount(_odeConfig.getDehydrationMaximumCount()); _bpelServer.setDehydrationPolicy(dehy); } _bpelServer.setMigrationTransactionTimeout(_odeConfig.getMigrationTransactionTimeout()); _bpelServer.setConfigProperties(_odeConfig.getProperties()); _bpelServer.init(); _bpelServer.setInstanceThrottledMaximumCount(_odeConfig.getInstanceThrottledMaximumCount()); _bpelServer.setProcessThrottledMaximumCount(_odeConfig.getProcessThrottledMaximumCount()); _bpelServer.setProcessThrottledMaximumSize(_odeConfig.getProcessThrottledMaximumSize()); _bpelServer.setHydrationLazy(_odeConfig.isHydrationLazy()); _bpelServer.setHydrationLazyMinimumSize(_odeConfig.getHydrationLazyMinimumSize()); }
/** * Shutdown the service engine. This performs cleanup before the BPE is terminated. Once this * method has been called, init() must be called before the transformation engine can be started * again with a call to start(). * * @throws AxisFault if the engine is unable to shut down. */ public void shutDown() throws AxisFault { ClassLoader old = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); try { if (_poller != null) try { __log.debug("shutting down poller"); _poller.stop(); _poller = null; } catch (Throwable t) { __log.debug("Error stopping poller.", t); } if (_bpelServer != null) try { __log.debug("shutting down ODE server."); _bpelServer.shutdown(); _bpelServer = null; } catch (Throwable ex) { __log.debug("Error stopping services.", ex); } if (_cronScheduler != null) { try { __log.debug("shutting down cron scheduler."); _cronScheduler.shutdown(); _cronScheduler = null; } catch (Exception ex) { __log.debug("Cron scheduler couldn't be shutdown.", ex); } } if (_scheduler != null) try { __log.debug("shutting down scheduler."); _scheduler.shutdown(); _scheduler = null; } catch (Exception ex) { __log.debug("Scheduler couldn't be shutdown.", ex); } if (_store != null) try { _store.shutdown(); _store = null; } catch (Throwable t) { __log.debug("Store could not be shutdown.", t); } if (_daoCF != null) try { _daoCF.shutdown(); } catch (Throwable ex) { __log.debug("DOA shutdown failed.", ex); } finally { _daoCF = null; } if (_db != null) try { _db.shutdown(); } catch (Throwable ex) { __log.debug("DB shutdown failed.", ex); } finally { _db = null; } if (_txMgr != null) { __log.debug("shutting down transaction manager."); _txMgr = null; } if (_connector != null) { try { __log.debug("shutdown BpelConnector"); _connector.shutdown(); _connector = null; } catch (Throwable t) { __log.error("Unable to cleanup temp files.", t); } } if (httpConnectionManager != null) { __log.debug("shutting down HTTP connection manager."); try { httpConnectionManager.shutdown(); httpConnectionManager = null; } catch (Throwable t) { __log.error("Unable to shut down HTTP connection manager.", t); } } if (idleConnectionTimeoutThread != null) { __log.debug("shutting down Idle Connection Timeout Thread."); try { idleConnectionTimeoutThread.shutdown(); idleConnectionTimeoutThread = null; } catch (Throwable t) { __log.error("Unable to shut down Idle Connection Timeout Thread.", t); } } try { __log.debug("cleaning up temporary files."); TempFileManager.cleanup(); } catch (Throwable t) { __log.error("Unable to cleanup temp files.", t); } if (_executorService != null) { _executorService.shutdownNow(); _executorService = null; } __log.info(__msgs.msgOdeShutdownCompleted()); } finally { Thread.currentThread().setContextClassLoader(old); } }