Package org.apache.sling.jcr.api

# Interface SlingRepository

All Superinterfaces:
  `javax.jcr.Repository`

@ProviderType public interface SlingRepository extends javax.jcr.Repository
The `SlingRepository` extends the standard JCR repository interface with two methods: `getDefaultWorkspace()` and `loginAdministrative(String)`. This method ease the use of a JCR repository in a Sling application in that the default (or standard) workspace to use by the application may be configured and application bundles may use a simple method to get an administrative session instead of being required to provide their own configuration of administrative session details.

Implementations of this interface will generally provide configurability of the default workspace name as well as the access details for the administrative session.

Implementations of SlingRepository are expected to invoke any available implementations of the `NamespaceMapper` interface before returning any `Session` to callers. This includes the methods defined in the `Repository` interface.

## Field Summary

### Fields inherited from interface javax.jcr.Repository

`IDENTIFIER_STABILITY, IDENTIFIER_STABILITY_INDEFINITE_DURATION, IDENTIFIER_STABILITY_METHOD_DURATION, IDENTIFIER_STABILITY_SAVE_DURATION, IDENTIFIER_STABILITY_SESSION_DURATION, LEVEL_1_SUPPORTED, LEVEL_2_SUPPORTED, NODE_TYPE_MANAGEMENT_AUTOCREATED_DEFINITIONS_SUPPORTED, NODE_TYPE_MANAGEMENT_INHERITANCE, NODE_TYPE_MANAGEMENT_INHERITANCE_MINIMAL, NODE_TYPE_MANAGEMENT_INHERITANCE_MULTIPLE, NODE_TYPE_MANAGEMENT_INHERITANCE_SINGLE, NODE_TYPE_MANAGEMENT_MULTIPLE_BINARY_PROPERTIES_SUPPORTED, NODE_TYPE_MANAGEMENT_MULTIVALUED_PROPERTIES_SUPPORTED, NODE_TYPE_MANAGEMENT_ORDERABLE_CHILD_NODES_SUPPORTED, NODE_TYPE_MANAGEMENT_OVERRIDES_SUPPORTED, NODE_TYPE_MANAGEMENT_PRIMARY_ITEM_NAME_SUPPORTED, NODE_TYPE_MANAGEMENT_PROPERTY_TYPES, NODE_TYPE_MANAGEMENT_RESIDUAL_DEFINITIONS_SUPPORTED, NODE_TYPE_MANAGEMENT_SAME_NAME_SIBLINGS_SUPPORTED, NODE_TYPE_MANAGEMENT_UPDATE_IN_USE_SUPORTED, NODE_TYPE_MANAGEMENT_VALUE_CONSTRAINTS_SUPPORTED, OPTION_ACCESS_CONTROL_SUPPORTED, OPTION_ACTIVITIES_SUPPORTED, OPTION_BASELINES_SUPPORTED, OPTION_JOURNALED_OBSERVATION_SUPPORTED, OPTION_LIFECYCLE_SUPPORTED, OPTION_LOCKING_SUPPORTED, OPTION_NODE_AND_PROPERTY_WITH_SAME_NAME_SUPPORTED, OPTION_NODE_TYPE_MANAGEMENT_SUPPORTED, OPTION_OBSERVATION_SUPPORTED, OPTION_QUERY_SQL_SUPPORTED, OPTION_RETENTION_SUPPORTED, OPTION_SHAREABLE_NODES_SUPPORTED, OPTION_SIMPLE_VERSIONING_SUPPORTED, OPTION_TRANSACTIONS_SUPPORTED, OPTION_UNFILED_CONTENT_SUPPORTED, OPTION_UPDATE_MIXIN_NODE_TYPES_SUPPORTED, OPTION_UPDATE_PRIMARY_NODE_TYPE_SUPPORTED, OPTION_VERSIONING_SUPPORTED, OPTION_WORKSPACE_MANAGEMENT_SUPPORTED, OPTION_XML_EXPORT_SUPPORTED, OPTION_XML_IMPORT_SUPPORTED, QUERY_FULL_TEXT_SEARCH_SUPPORTED, QUERY_JOINS, QUERY_JOINS_INNER, QUERY_JOINS_INNER_OUTER, QUERY_JOINS_NONE, QUERY_LANGUAGES, QUERY_STORED_QUERIES_SUPPORTED, QUERY_XPATH_DOC_ORDER, QUERY_XPATH_POS_INDEX, REP_NAME_DESC, REP_VENDOR_DESC, REP_VENDOR_URL_DESC, REP_VERSION_DESC, SPEC_NAME_DESC, SPEC_VERSION_DESC, WRITE_SUPPORTED`

## Method Summary

Modifier and Type
Method
Description
`@Nullable String`
`getDefaultWorkspace()`
Returns the default workspace to use on login.
`@NotNull javax.jcr.Session`
`impersonateFromService(String subServiceName, @NotNull javax.jcr.Credentials credentials, String workspaceName)`
Impersonates the service session provided by the calling bundle (and further specialized by `subServiceName`) to a new session in accordance with the specified (new) `Credentials`.
`@NotNull javax.jcr.Session`
`loginAdministrative(String workspace)`
Deprecated.
as of 2.2 (bundle version 2.2.0) because of inherent security issues.
`@NotNull javax.jcr.Session`
`loginService(String subServiceName, String workspace)`
Returns a session to the given workspace with privileges assigned to the service provided by the calling bundle.

### Methods inherited from interface javax.jcr.Repository

`getDescriptor, getDescriptorKeys, getDescriptorValue, getDescriptorValues, isSingleValueDescriptor, isStandardDescriptor, login, login, login, login`

## Method Details

### getDefaultWorkspace

@Nullable @Nullable String getDefaultWorkspace()
Returns the default workspace to use on login.

Returns:
  null if the configured default workspace name is empty, SLING-256

### loginAdministrative

@Deprecated @NotNull @NotNull javax.jcr.Session loginAdministrative(String workspace) throws javax.jcr.LoginException, javax.jcr.RepositoryException
Deprecated.
as of 2.2 (bundle version 2.2.0) because of inherent security issues. Services requiring specific permissions should use the `loginService(String, String)` instead.
Returns a session to the given workspace which has administrative powers.

NOTE: This method is intended for use by infrastructure bundles to access the repository and provide general services. This method MUST not be used to handle client requests of whatever kinds. To handle client requests a regular authenticated session retrieved through `Repository.login(javax.jcr.Credentials, String)` or `Session.impersonate(javax.jcr.Credentials)` must be used.

This method is deprecated. Services running in the Sling system should use the `loginService(String serviceInfo, String workspace)` method instead. Implementations of this method must throw `javax.jcr.LoginException` if they don't support it.

Parameters:
  `workspace` - The name of the workspace to which to get an administrative session. If `null` the `getDefaultWorkspace()` default workspace is assumed.
Returns:
  The administrative Session
Throws:
  `javax.jcr.LoginException` - If this method is not supported or is disabled by the implementation.
  `javax.jcr.RepositoryException` - If an error occurs creating the administrative session

### loginService

@NotNull @NotNull javax.jcr.Session loginService(String subServiceName, String workspace) throws javax.jcr.LoginException, javax.jcr.RepositoryException
Returns a session to the given workspace with privileges assigned to the service provided by the calling bundle. The `subServiceName` argument can be used to further specialize the service account to be used.

Parameters:
  `subServiceName` - Optional Subservice Name to specialize account selection for the service. This may be `null`.
  `workspace` - The name of the workspace to which to get an administrative session. If `null` the `getDefaultWorkspace()` default workspace is assumed.
Returns:
  A Session with appropriate permissions to execute the service.
Throws:
  `javax.jcr.LoginException` - If there is no service account defined for the calling bundle or the defined service account does not exist.
  `javax.jcr.RepositoryException` - if an error occurs.
Since:
  2.2 (bundle version 2.2.0) to replace `loginAdministrative(String)`
See Also:
  - Service Authentication

### impersonateFromService

@NotNull @NotNull javax.jcr.Session impersonateFromService(String subServiceName, @NotNull @NotNull javax.jcr.Credentials credentials, String workspaceName) throws javax.jcr.LoginException, javax.jcr.RepositoryException
Impersonates the service session provided by the calling bundle (and further specialized by `subServiceName`) to a new session in accordance with the specified (new) `Credentials`. The nature of the `Credentials` is an implementation detail which may allow relaxed credentials requirements (perhaps including a user ID but no password, for example).

The impersonation will fail with `LoginException` if the service session is not allowed to impersonate the subject associated with the target session or if the specified `Credentials credentials` are not valid.

The new, impersonated `Session` is tied to a new `Workspace` instance with the specified `workspaceName` or to the `default workspace` if the `workspaceName` is `null`.

Parameters:
  `subServiceName` - Optional sub-service name to specialize account selection for the service. This may be `null`.
  `credentials` - A valid non-null `Credentials` object
  `workspaceName` - The name of the workspace to which to get an administrative session. If `null` the `getDefaultWorkspace()` default workspace is assumed.
Returns:
  a new `Session` object
Throws:
  `javax.jcr.LoginException` - If the current session does not have sufficient access to perform the operation.
  `javax.jcr.RepositoryException` - If another error occurs.
Since:
  2.3