def start(zope_layer_dotted_name): print(WAIT("Starting Zope robot server")) zsl = Zope2Server() zsl.start_zope_server(zope_layer_dotted_name) print(READY("Started Zope robot server")) listener = SimpleXMLRPCServer((LISTENER_HOST, LISTENER_PORT), logRequests=False) listener.allow_none = True listener.register_function(zsl.zodb_setup, 'zodb_setup') listener.register_function(zsl.zodb_teardown, 'zodb_teardown') print_urls(zsl.zope_layer, listener) try: listener.serve_forever() finally: print() print(WAIT("Stopping Zope robot server")) zsl.stop_zope_server() print(READY("Zope robot server stopped"))
class RPCServer(threading.Thread): """ The RPCServer thread provides an API for external programs to interact with MOM. """ def __init__(self, config, momFuncs): threading.Thread.__init__(self, name="RPCServer") self.setDaemon(True) self.config = config self.momFuncs = momFuncs self.logger = logging.getLogger('mom.RPCServer') self.server = None self.start() def thread_ok(self): if self.server is None: return True return self.isAlive() def create_server(self): try: unix_port = None port = self.config.getint('main', 'rpc-port') except ValueError: port = None unix_port = self.config.get('main', 'rpc-port') self.logger.info("Using unix socket "+unix_port) if unix_port is None and (port is None or port < 0): return None if unix_port: self.server = UnixXmlRpcServer(unix_port) else: self.server = SimpleXMLRPCServer( ("localhost", port), requestHandler=RequestHandler, logRequests=0 ) self.server.register_introspection_functions() self.server.register_instance(self.momFuncs) def shutdown(self): if self.server is not None: self.server.shutdown() def run(self): try: self.create_server() if self.server is not None: self.logger.info("RPC Server starting") self.server.serve_forever() self.logger.info("RPC Server ending") else: self.logger.info("RPC Server is disabled") except Exception as e: self.logger.error("RPC Server crashed", exc_info=True)