public function __invoke($params) { try { $persistenceId = isset($params[0]) ? $params[0] : 'default'; $persistence = \common_persistence_Manager::getPersistence($persistenceId); } catch (\common_Exception $e) { $report = new Report(Report::TYPE_INFO, __('Usage: InitRdsQueue PERSISTENCE_ID')); $report->add(new Report(Report::TYPE_ERROR, __('Persistence "%s" could not be loaded', $persistenceId))); return $report; } $schemaManager = $persistence->getDriver()->getSchemaManager(); $schema = $schemaManager->createSchema(); $fromSchema = clone $schema; try { $queueTable = $schema->createtable(RdsQueue::QUEUE_TABLE_NAME); $queueTable->addOption('engine', 'MyISAM'); $queueTable->addColumn(RdsQueue::QUEUE_ID, "string", array("notnull" => true, "length" => 255)); $queueTable->addColumn(RdsQueue::QUEUE_STATUS, "string", array("notnull" => true, "length" => 50)); $queueTable->addColumn(RdsQueue::QUEUE_ADDED, "string", array("notnull" => true)); $queueTable->addColumn(RdsQueue::QUEUE_UPDATED, "string", array("notnull" => true)); $queueTable->addColumn(RdsQueue::QUEUE_OWNER, "string", array("notnull" => false, "length" => 255)); $queueTable->addColumn(RdsQueue::QUEUE_TASK, "string", array("notnull" => true, "length" => 4000)); $queueTable->addColumn(RdsQueue::QUEUE_REPORT, "text", array("default" => null, "notnull" => false)); $queueTable->setPrimaryKey(array(RdsQueue::QUEUE_ID)); $queries = $persistence->getPlatform()->getMigrateSchemaSql($fromSchema, $schema); foreach ($queries as $query) { $persistence->exec($query); } } catch (SchemaException $e) { \common_Logger::i('Database Schema already up to date.'); } $queue = new RdsQueue(array(RdsQueue::OPTION_PERSISTENCE => $persistenceId)); $queue->setServiceLocator($this->getServiceLocator()); $this->getServiceLocator()->register(Queue::CONFIG_ID, $queue); return new \common_report_Report(\common_report_Report::TYPE_SUCCESS, __('Setup rds queue successfully using persistence "%s"', $persistenceId)); }
/** * @return RdsQueue */ protected function getInstance() { $serviceManager = ServiceManager::getServiceManager(); try { $rdsQueueService = $serviceManager->get(RdsQueue::CONFIG_ID); } catch (ServiceNotFoundException $e) { $rdsQueueService = null; } if (!$rdsQueueService instanceof RdsQueue || $rdsQueueService === null) { $rdsQueueService = new RdsQueue([RdsQueue::OPTION_PERSISTENCE => 'default']); $rdsQueueService->setServiceManager($serviceManager); } return $rdsQueueService; }