AppserverIo\Appserver\Application\ApplicationStateKeys::get PHP Метод

get() публичный статический Метод

Factory method to create a new application state instance.
public static get ( integer $applicationState ) : ApplicationStateKeys
$applicationState integer The application state to create an instance for
Результат ApplicationStateKeys The application state key instance
    public static function get($applicationState)
    {
        // check if the requested container state is available and create a new instance
        if (in_array($applicationState, ApplicationStateKeys::getApplicationStates())) {
            return new ApplicationStateKeys($applicationState);
        }
        // throw a exception if the requested runlevel is not available
        throw new InvalidApplicationStateException(sprintf('Requested application state %s is not available (choose on of: %s)', $applicationState, implode(',', ApplicationStateKeys::getApplicationStates())));
    }

Usage Example

Пример #1
0
 /**
  * This is the threads main() method that initializes the application with the autoloader and
  * instantiates all the necessary manager instances.
  *
  * @return void
  * @codeCoverageIgnore
  */
 public function run()
 {
     try {
         // register the default autoloader
         require SERVER_AUTOLOADER;
         // register shutdown handler
         register_shutdown_function(array(&$this, "shutdown"));
         // log a message that we now start to connect the application
         $this->getInitialContext()->getSystemLogger()->debug(sprintf('%s wait to be connected', $this->getName()));
         // register the class loaders
         $this->registerClassLoaders();
         // initialize the managers
         $this->initializeManagers();
         // provision the application
         if ($this->getContainer()->hasProvisioningEnabled()) {
             $this->provision();
         }
         // initialize the profile logger and the thread context
         $profileLogger = null;
         /** @var \AppserverIo\Logger\ThreadSafeLoggerInterface $profileLogger */
         if ($profileLogger = $this->getInitialContext()->getLogger(LoggerUtils::PROFILE)) {
             $profileLogger->appendThreadContext('application');
         }
         // log a message that we has successfully been connected now
         $this->getNamingDirectory()->search(NamingDirectoryKeys::SYSTEM_LOGGER)->info(sprintf('%s has successfully been connected', $this->getName()));
         // the application has successfully been initialized
         $this->synchronized(function ($self) {
             $self->applicationState = ApplicationStateKeys::get(ApplicationStateKeys::INITIALIZATION_SUCCESSFUL);
         }, $this);
         // initialize the flag to keep the application running
         $keepRunning = true;
         // wait till application will be shutdown
         while ($keepRunning) {
             // query whether we've a profile logger, log resource usage
             if ($profileLogger) {
                 $profileLogger->debug(sprintf('Application %s is running', $this->getName()));
             }
             // wait a second to lower system load
             $keepRunning = $this->synchronized(function ($self) {
                 $self->wait(100000 * Application::TIME_TO_LIVE);
                 return $self->applicationState->equals(ApplicationStateKeys::get(ApplicationStateKeys::INITIALIZATION_SUCCESSFUL));
             }, $this);
         }
         // log a message that we has successfully been shutdown now
         $this->getNamingDirectory()->search(NamingDirectoryKeys::SYSTEM_LOGGER)->info(sprintf('%s start to shutdown managers', $this->getName()));
         // array for the manager shutdown threads
         $shutdownThreads = array();
         // we need to stop all managers, because they've probably running threads
         /** @var \AppserverIo\Psr\Application\ManagerInterface $manager */
         foreach ($this->getManagers() as $manager) {
             $shutdownThreads[] = new ManagerShutdownThread($manager);
         }
         // wait till all managers have been shutdown
         /** @var \AppserverIo\Appserver\Application\ManagerShutdownThread $shutdownThread */
         foreach ($shutdownThreads as $shutdownThread) {
             $shutdownThread->join();
         }
         // the application has been shutdown successfully
         $this->synchronized(function ($self) {
             $self->applicationState = ApplicationStateKeys::get(ApplicationStateKeys::SHUTDOWN);
         }, $this);
         // cleanup the naming directory with the application entries
         $this->unload();
         // log a message that we has successfully been shutdown now
         $this->getNamingDirectory()->search(NamingDirectoryKeys::SYSTEM_LOGGER)->info(sprintf('%s has successfully been shutdown', $this->getName()));
     } catch (\Exception $e) {
         $this->getNamingDirectory()->search(NamingDirectoryKeys::SYSTEM_LOGGER)->error($e->__toString());
     }
 }