AppContext::~AppContext() { if(m_cleaner) { m_cleaner->stop(); delete m_cleaner; } killAllSessions(); std::string empty; destroyServlets(); // Calls destroy() on all servlets, before unloading them RHServletRemover rh; SMFunctor<AppContext> unl(this, &AppContext::unloadServlet); // This will block till all requests being processed by this servlet // are done. Alternatively we may want to kill all processes that are // in this servlet. Maybe there should be some timeout m_maptop.forEachServletPath(rh, empty); m_maptop.forEachServletPath(unl, empty); #ifdef HAVE_LIBMAGIC if(m_mime_cookie) ::magic_close(m_mime_cookie); #endif }
shared_ptr<recommender_base> recommender_factory::create_recommender( const string& name, const config& param, const string& id) { if (name == "inverted_index") { if (!param.is_null()) { inverted_index_config conf = config_cast_check<inverted_index_config>(param); if (conf.unlearner) { if (!conf.unlearner_parameter) { throw JUBATUS_EXCEPTION( common::config_exception() << common::exception::error_message( "unlearner is set but unlearner_parameter is not found")); } return shared_ptr<recommender_base>( new inverted_index(unlearner::create_unlearner( *conf.unlearner, common::jsonconfig::config( *conf.unlearner_parameter)))); } else { if (conf.unlearner_parameter) { throw JUBATUS_EXCEPTION( common::config_exception() << common::exception::error_message( "unlearner_parameter is set but unlearner is not found")); } } } return shared_ptr<recommender_base>(new inverted_index); } else if (name == "inverted_index_euclid") { if (!param.is_null()) { return shared_ptr<recommender_base>( new inverted_index_euclid( config_cast_check<inverted_index_euclid::config>(param))); } else { return shared_ptr<recommender_base>(new inverted_index_euclid); } } else if (name == "minhash") { return shared_ptr<recommender_base>( new minhash(config_cast_check<minhash::config>(param))); } else if (name == "lsh") { return shared_ptr<recommender_base>( new lsh(config_cast_check<lsh::config>(param))); } else if (name == "euclid_lsh") { return shared_ptr<recommender_base>( new euclid_lsh(config_cast_check<euclid_lsh::config>(param))); } else if (name == "nearest_neighbor_recommender") { nearest_neighbor_recommender_config conf = config_cast_check<nearest_neighbor_recommender_config>(param); shared_ptr<storage::column_table> table(new storage::column_table); shared_ptr<nearest_neighbor::nearest_neighbor_base> nearest_neighbor_engine(nearest_neighbor::create_nearest_neighbor( conf.method, conf.parameter, table, id)); if (conf.unlearner) { if (!conf.unlearner_parameter) { throw JUBATUS_EXCEPTION( common::config_exception() << common::exception::error_message( "unlearner is set but unlearner_parameter is not found")); } shared_ptr<unlearner::unlearner_base> unl(unlearner::create_unlearner( *conf.unlearner, common::jsonconfig::config( *conf.unlearner_parameter))); return shared_ptr<recommender_base>( new nearest_neighbor_recommender(nearest_neighbor_engine, unl)); } return shared_ptr<recommender_base>( new nearest_neighbor_recommender(nearest_neighbor_engine)); } else { throw JUBATUS_EXCEPTION(common::unsupported_method(name)); } }