eXo Platform 3.5

- Prev
- Next

## Chapter 4. Management

In this chapter, the following topics are included:

- Introduction to eXo Platform management

- Management views of eXo Platform

  - PortalContainer management view

  - Cache management view

  - eXo Content management view

  - JCR management view

  - Portal management view

  - eXo Knowledge management view

  - eXo Collaboration management view

## Introduction to eXo Platform management

Managing resources of eXo Platform is critical for IT operators and system administrators to monitor and supervise the production system.

The eXo Platform product is exposed as a manageable set of resources that can be inspected at runtime to monitor and manage servers.

When it comes to Java, the Java Management Extension (also known as JMX) is the de-facto standard to expose managed resources externally.

This chapter explains various resources provided by the eXo Platform server, possible management actions, and how to obtain relevant metrics.

### JMX interface

The resources management is exposed via the JMX layer. eXo Platform registers a set of MBean entities in an MBeanServer.

At runtime, MBeans are registered by the eXo Kernel in the MBeanServer and directly viewable in the JMX console. However, it is strongly recommended that you use a better JMX client, such as JVisualVM, available since Java 6.

To enable JMX monitoring in Tomcat, you need to pass the following system property to the VM: -Dcom.sun.management.jmxremote.

### REST interface

The built-in REST Management Provider of eXo Platform makes some of the MBeans operations accessible as REST endpoints. Administrators can handle the system simply with a browser without performing any complex configurations.

Only members of the platform/administrators group are given permission to work on the REST management. The authentication requires you to log in by your own account.

The base URL to access the REST endpoints is http://localhost:8080/rest/management, with the last one followed by the parameter parsed in the managed resource's @RESTEndpoint annotation, leading slash then targeted operation. Consider the SkinService, which is annotated @RESTEndpoint("skinservice"); the full URL to access JMX 'getSkinList' method through the REST request is http://localhost:8080/rest/management/skinservice/getSkinList.

## Management views of eXo Platform

### PortalContainer management view

PortalContainer manages all objects and configurations of a given portal.

- The JMX name template of PortalContainer MBeans: exo:container=portal,name="portal".

Attribute | Description
--- | ---
`ConfigurationXML` | Configuration information of the specified portal container in the XML format.
`Name` | The name of the portal container.
`RegisteredComponentNames` | The list of the registered component names.
`Started` | Indicate the portal container is started or not.

Operation | Description
--- | ---
`getConfigurationXML` | Return configuration information of the portal container calculated by the loading mechanism. The returned value is an XML document in the eXo Kernel format.
`getName` | Return the portal container name.
`getRegisteredComponentNames` | Return the list of all registered component names.
`isStarted` | Check if the portal container is started or not. The portal container is only started once all its components have been started.

### Note

PortalContainer can be controlled through the following path:

- http://localhost:8080/rest/management/pcontainer.

### Cache management view

eXo Platform uses caches at several levels. Monitoring them can provide the critical performance information, especially useful for tuning the server. Each cache is exposed with statistics and management operations.

- The JMX name template of Cache MBeans: exo:service=cache,name={CacheName} where CacheName is the name of each cache instance.

Attribute | Description
--- | ---
`Name` | The name of the cache.
`Capacity` | The maximum capacity of the cache.
`HitCount` | The total number of times the cache was successfully queried.
`MissCount` | The total number of times the cache was queried without success.
`Size` | The number of entries in the cache.
`TimeToLive` | The valid period of the cache entry in seconds. If the value is set to -1, the entries are never expired.

Operation | Description
--- | ---
`clearCache()` | Evict all entries from the cache. This method can be used to force a programmatic flush of the cache.
`getName` | Return the cache name.
`getLiveTime` | Return the valid lifetime of an entry in the cache in seconds.
`setLiveTime` | Set the valid lifetime of an entry in the cache in seconds.
`getCacheHit` | Return the total number of successful hits.
`getCacheMiss` | Return the total number of unsuccessful hits.
`getMaxSize` | Return the maximum capacity of the cache.
`setMaxSize` | Set the maximum capacity of the cache.
`getCacheSize` | Return the number of entries in the cache.

#### Cache instances

- Portal

Cache Name | Description
--- | ---
`MOPSessionManager` | Cache all model objects of portal by storageId, such as pages, navigations, and preferences.
`ResourceBundleData` | Cache all resource bundles by name and locale.
`TemplateService` | Cache all Groovy templates of portal by its template path and ResourceResolver.

- JCR

Cache Name | Description
--- | ---
`org.exoplatform.services.jcr.impl.core.lock.LockManagerImpl` | Cache lockData by the lockToken. Cache lockData by the internal identifier of node.

- eXo Content

Cache Name | Description
--- | ---
`org.exoplatform.ecm.REST.viewer.PDFViewerRESTService` | Cache data of PDF files by the ObjectKey object.
`org.exoplatform.services.cms.drives.ManageDriveService` | Cache all drives of Sites Explorer by the drive group name (String constant).
`org.exoplatform.services.cms.scripts.impl.ScriptService` | Cache all Groovy script files by the script name.
`org.exoplatform.services.cms.templates.TemplateService` | Cache all Groovy templates by the mechanism of org.exoplatform.groovyscript.text.TemplateService.
`org.exoplatform.services.wcm.webcontent.InitialWebContentPlugin` | Cache all artifact data by sourcePath of deploymentDescriptor. These data are reused when a new portal is deployed.
`wcm.composer` | Cache published contents by the hash generated from path, version, remoteUser, language, recursive, orderBy, orderType, primaryType of cached nodes in eXo Content.

- Social

Cache Name | Description
--- | ---
`org.exoplatform.social.core.manager.ActivityManageractivityCache` | Cache an activity by its id.
`org.exoplatform.social.core.manager.ActivityManageractivityListCache` | Cache the list of all activities by identityId and their segments.
`org.exoplatform.social.core.manager.ActivityManagercommentsCache` | Cache all comments of an activity by its id.
`org.exoplatform.social.core.manager.IdentityManageridentityCache` | Cache an identity by its globalId.
`org.exoplatform.social.core.manager.IdentityManageridentityCacheById` | Cache an identity by its uuid. Cache an identity by providerId:remoteId.
`org.exoplatform.social.core.manager.IdentityManageridentityListCache` | Cache the list of identities by identityProvider.
`org.exoplatform.social.core.manager.RelationshipManagerrelationshipIdCache` | Cache the relationship by its id.
`org.exoplatform.social.core.manager.RelationshipManagerrelationshipListCache` | Cache the list of relationships by identityId.

#### CacheManager

The CacheManager management view enables you to control different caches.

- The JMX name template of CacheManager Mbeans: exo:service=cachemanager.

Operation | Description
--- | ---
`clearCaches()` | Force a programmatic flush of all the registered caches.

#### PicketLinkIDMCacheService

PicketLinkIDMCacheService is the default implementation for the organization model.

- The JMX name template of PicketLinkIDMCacheService MBeans: exo:portal="portal",service=PicketLinkIDMCacheService,name=plidmcache.

Operation | Description
--- | ---
`invalidateAll` | Invalidate all caches.
`invalidate(namespace)` | Invalidate a specific cache namespace.

### Note

PicketLinkIDMCacheService can be controlled through the following path:

- http://localhost:8080/rest/management/plidmcache.

However, the REST View managements of Cache instances and CacheManager are not currently exposed in this version.

### eXo Content management view

eXo Content provides a management view for three following services:

#### WCMComposer

WCMComposer is responsible for assembling pages, and is key for serving pages efficiently.

- The JMX name template of WCMComposer MBeans: exo:portal="portal",service=composer,view=portal,type=content.

Attribute | Description
--- | ---
`Cached` | Indicate the cache is used or not.
`CachedEntries` | The number of nodes in the cache.
`UsedLanguages` | The list of all languages accessible in the composer.
`UsedOrderBy` | The list of OrderBy properties accessible in the composer.
`UsedPrimaryTypes` | The list of primary types accessible in the composer.

Operation | Description
--- | ---
`cleanTemplates` | Clean all templates in the composer.
`setCached(iscached)` | Enable/Disable caching in the composer.
`useDefaultLanguage` | Check if the default language is used in case the translation is not published.
`getUsedPrimaryTypes` | Return the list of primary types accessible in the composer.
`getCachedEntries` | Return the number of nodes in the cache.
`isCached` | Check if the cache is used in the composer.
`getUsedLanguages` | Return the list of all languages accessible in the composer.
`getUsedOrderBy` | Return the list of OrderBy properties accessible in the composer.

#### FriendlyService

FriendlyService is to make URIs more friendly.

- The JMX name template of FriendlyService MBeans: exo:portal="portal",service=friendly,view=portal,type=content.

Attribute | Description
--- | ---
`Enabled` | Indicate the service is enabled or not.
`Friendlies` | The list of registered Friendly URIs.
`ServletName` | The name of the servlet referenced in the service.

Operation | Description
--- | ---
`addFriendly(friendlyUri, unfriendlyUri)` | Add a new Frienly Uri to the list with two parameters: friendlyUri and unfrienlyUri. The value entered in the friendlyUri field replaces that of the unfriendlyUri field.
`removeFriendly(friendlyUri)` | Remove a friendly URI from the list by entering that Uri into the friendlyUri field.
`isEnabled` | Check if the service is enabled or not. If the value is returned as "True", the service is enabled. If "False", the serive is disabled.
`setEnabled(isEnabled)` | Set the service as activated or deactivated by entering "True" or "False" respectively into the isEnabled field.
`getServletName` | Return the name of servlet referenced in the service.
`getFriendlies` | Return the list of registered friendly URIs.

#### WCMService

- The JMX name template of WCMService MBeans: exo:portal="portal",service=wcm,view=portal,type=content.

Attribute | Description
--- | ---
`PortletExpirationCache` | The expiration period of portlet cache in seconds.

Operation | Description
--- | ---
`getPortletExpirationCache` | Return the expiration period of porlet cache in seconds.
`setPortletExpirationCache(expirationCache)` | Set the expiration period of portlet cache by entering the value into the expirationCache field.

### Note

WCMComposer, FriendlyService, and WCMService can be controlled through the following paths respectively:

- http://localhost:8080/rest/management/wcmcomposerservice/.

- http://localhost:8080/rest/management/friendlyservice/.

- http://localhost:8080/rest/management/wcmservice/.

### JCR management view

Java Content Repository (JCR) provides a management view to monitor sessions, locks, repository configurations, and workspace configurations.

#### SessionRegistry

- The JMX name template of SessionRegistry MBeans: exo:portal="portal",service=SessionRegistry,repository="portal-repository".

Attribute | Description
--- | ---
`TimeOut` | The expiration period of a JCR session.
`Size` | The number of currently active sessions.

Operation | Description
--- | ---
`runCleanup` | Clean all JCR sessions timed out.
`getTimeOut` | Return the timeout of a JCR session.
`getSize` | Return the number of currently active sessions.

#### LockManager

LockManager stores lock objects and is reponsible for removing expired locks.

- The JMX name template of LockManager MBeans: exo:portal="portal",service=lockmanager,repository="repository",workspace={WorkspaceName} where WorkspaceName is the name of each workspace.

Attribute | Description
--- | ---
`NumLocks` | The number of active locks.

Operation | Desription
--- | ---
`cleanExpiredLocks` | Remove all expired JCR locks.
`getNumLocks` | Return the number of active JCR locks.

- Each LockManager instance controls all locks of each corresponding workspace, including:

Workspace Name | Description
--- | ---
`backup` | Data backed up.
`collaboration` | Data of collaboration, such as sites content, documents, groups, records space, tags, and users.
`dev-monit` | Data of the IDE application.
`dms-system` | Data of DMS, including node types, templates, views, taxonomy trees.
`knowledge` | Data of knowledge, including exo:applications, and groups.
`pc-system` | State information of producer portlets and remote portlet registry.
`portal-system` | Data of the Portal model objects, such as navigations, pages, portals, application registry.
`portal-work` | Information of Gadget token and Remember me token.
`social` | Data of Social, including activity, identity, profile, relationship and space.
`system` | Data of system, including versions storage, node types, namespaces.
`wsrp-system` | Data of remote portlets.

#### Repository

- The JMX name template of Repository MBeans: exo:portal="portal",container=repository,name="repository".

Attribute | Description
--- | ---
`Name` | The name of the repository container.
`RegisteredComponentNames` | The list of registered component names in the repository.

Operation | Description
--- | ---
`getName` | Return the repository container name.
`getRegisteredComponentNames` | Return the list of registered component names in the repository.

#### Workspace

- The JMX name template of Workspace MBeans: exo:portal="portal",container=workspace,repository="repository",name={WorkspaceName} where WorkspaceName is the name of each workspace.

Attribute | Description
--- | ---
`Name` | The name of the workspace container.
`RegisteredComponentNames` | The list of registered component names in the workspace.

Operation | Description
--- | ---
`getName` | Return the workspace container name.
`getRegisteredComponentNames` | Return the list of registered component names in the workspace.

### Note

Currently, the REST View managements of SessionRegistry, LockManager, Repository and Workspace are not exposed in this version.

### Portal management view

#### Template statistics

Template statistics exposes various templates used by the portal and its components to render markups. Various statistics are available for individual templates, and aggregated statistics, such as the list of the slowest templates. Most management operations are performed on a single template; those operations take the template identifier as an argument.

- The JMX name template of Template statistics MBeans: exo:portal="portal",service=statistic,view=portal,type=template.

Attribute | Description
--- | ---
`TemplateList` | The list of templates loaded.
`SlowestTemplates` | The list of the 10 slowest templates.
`MostExecutedTemplates` | The list of the 10 most used templates.
`FastestTemplates` | The list of 10 fastest templates.

Operation | Description
--- | ---
`getAverageTime(templateId)` | Return the average rendering time of a specified template in seconds.
`getExecutionCount(templateId)` | Return the number of times the specified template has been executed.
`getMinTime(templateId)` | Return the minimum rendering time of the specified template in seconds.
`getMaxTime(templateId)` | Return the maximum rendering time of the specified template in seconds.
`getSlowestTemplates` | Return the list of the 10 slowest templates.
`getMostExecutedTemplates` | Return the list of the 10 most used templates.
`getTemplateList` | Return the list of templates loaded.
`getFastestTemplates` | Return the list of the 10 fastest templates.

#### Template management

Template management provides the capability to force the reload of a specified template.

- The JMX name template of Template management MBeans: exo:portal="portal",service=management,view=portal,type=template.

Operation | Description
--- | ---
`reloadTemplates` | Clear the template cache.
`listCachedTemplates` | List identifiers of the cached templates.
`reloadTemplate(templateId)` | Clear the template cache for a specified template identifier.

#### Skin management

- The JMX name template of Skin management MBeans: exo:portal="portal",service=management,view=portal,type=skin.

Attribute | Description
--- | ---
`SkinList` | The list of loaded skins by the skin service.

Operation | Description
--- | ---
`reloadSkin(skinId)` | Force a reload of the specified skin and the operation.
`reloadSkins` | Force a reload of the loaded skins.
`getSkinList` | Return the list of loaded skins by the skin service.

#### TokenStore

- The JMX name template of TokenStore MBeans: exo:service=TokenStore, name={Name} where Name is the name of each specific token.

Attribute | Description
--- | ---
`Name` | The name of one specific token.
`ValidityTime` | The expiration period of one specific token in seconds.
`PeriodTime` | The expiration daemon period of one specific token in seconds. The token is deleted after the specified period.

Operation | Description
--- | ---
`cleanExpiredTokens` | Remove all expired tokens.
`size` | Return the number of tokens, including valid tokens and expired tokens undeleted yet.
`getName` | Return the token name.
`getValidityTime` | Return the expiration time of one specific token in seconds.
`getPeriodTime` | Return the expiration daemon period of one specific token in seconds.

eXo Platform provides the following TokenStore instances:

Token Name | Description
--- | ---
`gadget-token` | Store tokens of the Oauth gadget into the JCR node, such as org.exoplatform.portal.gadget.core.GadgetTokenInfoService.
`jcr-token` | Store common tokens into the JCR node, such as org.exoplatform.web.security.security.CookieTokenService, and org.exoplatform.web.security.security.RemindPasswordTokenService.
`memory-token` | Store temporary tokens into the transient memory, such as org.exoplatform.web.security.security.TransientTokenService.
`getPortalList` | Return the list of identifiers of all loaded portals.

#### Portal statistics

- The JMX name template of Portal statistics MBeans: exo:portal="portal",service=statistic,view=portal,type=portal.

Attribute | Description
--- | ---
`PortalList` | The list of identifiers of loaded portals.

Operation | Description
--- | ---
`getThroughput(portalId)` | Return the number of requests for the specified portal per second.
`getAverageTime(portalId)` | Return the average execution time of the specified portal in seconds.
`getExecutionCount(portalId)` | Return the number of times the specified portal has been executed.
`getMinTime(portalId)` | Return the minimum time of the specified portal in seconds.
`getMaxTime(portalId)` | Return the maximum time of the specified portal in seconds.
`getPortalList` | Return the list of identifiers of loaded portals.

#### Application statistics

Various applications are exposed to provide relevant statistics.

- The JMX name template of Application statistics MBeans: exo:portal="portal",service=statistic,view=portal,type=application.

Attribute | Description
--- | ---
`ApplicationList` | The list of loaded applications.
`SlowestApplications` | The list of the 10 slowest applications.
`MostExecutedApplications` | The list of the 10 most executed applications.
`FastestApplications` | The list of the 10 fastest applications.

Operation | Description
--- | ---
`getAverageTime(applicationId)` | Return the average time spent of the specified application.
`getExecutionCount(applicationId)` | Return the number of times the specified application has been executed.
`getMinTime(applicationId)` | Return the minimum time spent of the specified application.
`getMaxTime(applicationId)` | Return the maximum time spent of the specified application.
`getSlowestApplications` | Return the list of the 10 slowest applications.
`getMostExecutedApplications` | Return the list of the 10 most executed applications.
`getFastestApplications` | Return the list of the 10 fastest applications.
`getApplicationList` | Return the list of application identifiers classified in the alphabetic order.

### Note

Template statistics, Template management, Skin management, Portal statistics and Application statistics can be controlled through the following paths respectively:

- http://localhost:8080/rest/management/templatestatistics.

- http://localhost:8080/rest/management/templateservice.

- http://localhost:8080/rest/management/skinservice.

- http://localhost:8080/rest/management/portalstatistic.

- http://localhost:8080/rest/management/applicationstatistic

However, the REST View management of TokenStore is currently not exposed in this version.

### eXo Knowledge management view

eXo Knowledge provides a management view, enabling you to control rules, statistics, information of data storage in Forum and Answers.

#### Forum

With the Forum Service management view, you can view ADMIN rules, statistics, such as the number of online users, and information of Mail Service configuration.

- The JMX name template of Forum MBeans: exo:portal="portal",service=forum.

Attribute | Description
--- | ---
`AdminRules` | The list of rules defining administrators.
`ContactProvider` | The string containing the specific ContactProvider implementation name which provides user profile to the forum, including org.exoplatform.ks.common.user.BusinessProfileContactProvider, org.exoplatform.ks.common.user.DefaultContactProvider, and org.exoplatform.ks.common.user.PersonalProfileContactProvider.
`MailServiceConfig` | The string containing the configuration of the Mail service used for the notifications in eXo Knowledge.
`OnlineUsers` | The list of currently online users.

Operation | Description
--- | ---
`countOnlineUsers` | Return the number of currently online users.
`hasForumAdminRole(String username)` | Check if the user is the forum administrator or not.
`getAdminRules` | Return the list of rules defining administrators.
`getOnlineUsers` | Return the list of online users.
`getContactProvider` | Return the name of a specific ContactProvider implementation.
`setContactProvider(String contactProviderClassName` | Set a specific ContactProvider implementation. The user profile on portal is obtained to populate into that of Forum.
`getMailServiceConfig` | Return the Mail service configuration used to send notifications in eXo Knowledge.

#### Job

The Job management view enables you to view state information of Jobs used in eXo Knowledge.

- The JMX name template of Job MBeans: exo:portal="portal",service=forum,view=jobs,name={Name} where Name is the name of each specific Job instance.

Attribute | Description
--- | ---
`DataMap` | The map containing the state information for Job instances.
`Name` | The name of the Job.

Operation | Description
--- | ---
`getName` | Return the names of Job instances.
`getDataMap` | Return the state information of Job instances.

eXo Knowledge provides the following Job instances:

Job | Description
--- | ---
`DeactiveJob` | Deactivate topics which meet TWO predefined deactivation properties: inactiveDays and forumName in Forum.
`LoginJob` | Update information of users logged in, serving for statistics.
`NotifyJob` | Send email notifications in Answers.
`RecountActiveUserJob` | Indicate the number of active users in Forum.
`SendMailJob` | Send email notifications in Forum.
`UpdateDataJob` | Update Forum statistics, such as posts or topics of users.

#### Plugin

##### RoleRulesPlugin

- The JMX name template of RoleRulesPlugin MBeans: exo:portal="portal",service=forum,view=plugins,name="add.role.rules.plugin".

Attribute | Description
--- | ---
`AllRules` | The list of all rules of RoleRulesPlugin. For example, the rule defining 'root' user as an administrator follows the form of ADMIN=root.
`Description` | The brief description of RoleRulesPlugin functions.
`Name` | The name of RoleRulesPlugin.
`RuleNames` | The list of possible rule names; for example, the rule defining administrators is named ADMIN.

Operation | Description
--- | ---
`addRule` | Add a rule. For example, to add the ADMIN rule for the 'demo' user, you need to input two parameters: ADMIN in the p1 and demo in the p2.
`getRules` | Return the list of rules defining the user with the role inputed in p1.
`getName` | Return the name of the plugin.
`getRuleNames` | Return the list of possible rule names. For example, if 'demo' and 'mary' are defined as ADMIN (ADMIN=demo, mary), the list of returned rule names will be ADMIN.
`getDescription` | Return the brief description of the plugin.
`getAllRules` | Return all rules added to the plugin.

##### BBCodePlugin

- The JMX name template of BBCodePlugin MBeans: exo:portal="portal",service=ks,view=plugins,name="forum.default.bbcodes".

Attribute | Description
--- | ---
`BBCodes` | The list of BBCodes defined in the plugin.

Operation | Description
--- | ---
`getBBCodes` | Return the list of BBCodes. The Forum application currently provides the following BBCodes: URL, JUSTIFY, B, HIGHLIGHT, I, U, RIGHT, EMAIL, LIST, EMAIL, COLOR, URL, CODE, CENTER, CODE, QUOTE, LIST, CSS, LEFT, FONT, GOTO, QUOTE, SIZE, SLIDESHARE, IMG.

##### ForumInitialDataPlugin

- The JMX name template of ForumInitialDataPlugin MBeans: exo:portal="portal",service=forum,view=plugins,name={Name}.

Attribute | Description
--- | ---
`Location` | The location where the Forum export file is stored.

Operation | Description
--- | ---
`getLocation` | Return the location where the Forum export file is stored, for example war:/data/forum/data-full-forum.zip.

##### InitialDataPlugin

- The JMX name template of InitialDataPlugin MBeans: exo:portal="portal",service=faq,view=plugins,name={Name}.

Attribute | Description
--- | ---
`Location` | The location where the FAQ export file is stored.

Operation | Description
--- | ---
`getLocation` | Return the location where the FAQ export file is stored, for example war:/data/Technical-FAQ.zip.
`isForceXML` | Indicate if the data loaded from the FAQ export file should override any data found in the existing database.

#### Storage

The Storage management view enables you to get storage information in eXo Knowledge, such as data path, repository and workspace.

- The JMX name template of Forum Storage MBeans: exo:portal="portal",service=forum,view=storage.

Attribute | Description
--- | ---
`Path` | The JCR data path of the Forum Storage.
`Repository` | The name of repository containing the workspace where Forum data are stored.
`Workspace` | The name of workspace containing Forum data.

Operation | Description
--- | ---
`getRepository` | Return the name of repository of the Forum Storage.
`getWorkspace` | Return the name of workspace of the Forum Storage.
`getPath` | Return the JCR data path of the Forum Storage.

### Note

Currently, the REST View managements of Forum, Job, Plugin, Storage are not exposed in this version.

### eXo Collaboration management view

eXo Collaboration provides a management view, enabling you to view some state information of Jobs used in itself.

Attribute | Description
--- | ---
`DataMap` | The map containing the state information for the Job instances.
`Name` | The name of the Job.

Operation | Description
--- | ---
`getName` | Return the name of Job instances.
`getDataMap` | Return the state information of Job instances.

eXo Collaboration provides the following Job instances:

Job Name | Description
--- | ---
`PopupReminderJob` | Show pop-up reminders in the Calendar application.
`ReminderJob` | Send email reminders in the Calendar application.
`messageToHistoricalMessageJob` | Save messages in the Chat application in the data storage of eXo Collaboration.

### Note

Currently, the REST View management of eXo Collaboration is not exposed.

- Prev
- Up
- Home
- Next