Class AbstractSlingRepository2
- All Implemented Interfaces:
javax.jcr.Repository
,SlingRepository
AbstractSlingRepository2
is an abstract implementation of
the SlingRepository
version 2.3 interface (phasing
loginAdministrative(String)
out in favor of
loginService(String, String)
) which provides default support for
attached repositories.
Implementations of the SlingRepository
interface may wish to
extend this class to benefit from default implementations of most methods.
To be able to know the calling bundle to implement the
loginService(String, String)
method the bundle using the repository
service has to be provided in the
constructor
.
The premise of this abstract class is that an instance of an implementation
of this abstract class is handed out to each consumer of the
SlingRepository
service. Each instance is generally based on the same
delegated repository
instance.- Since:
- API version 2.4 (bundle version 2.3)
- See Also:
-
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
-
Constructor Summary
ModifierConstructorDescriptionprotected
AbstractSlingRepository2
(AbstractSlingRepositoryManager manager, org.osgi.framework.Bundle usingBundle) Sets up this abstract SlingRepository implementation. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract javax.jcr.Session
createAdministrativeSession
(String workspace) Creates an administrative session to access the indicated workspace.protected javax.jcr.Session
createServiceSession
(Iterable<String> servicePrincipalNames, String workspaceName) Creates a service-session for the service'sservicePrincipalNames
using a pre-authenticatedSubject
.protected javax.jcr.Session
createServiceSession
(String serviceUserName, String workspace) Creates a service-session for the service'sserviceUserName
by impersonating the user from an administrative session.final String
Returns the default workspace to login to if any of thelogin
andcreateSession
methods is called without an explicit workspace name.getDescriptor
(String name) String[]
javax.jcr.Value
getDescriptorValue
(String key) javax.jcr.Value[]
protected final javax.jcr.Repository
Returns the actual repository to which all JCR Repository interface methods implemented by this class are delegated.protected final AbstractSlingRepositoryManager
javax.jcr.Session
impersonateFromService
(String subServiceName, javax.jcr.Credentials credentials, String workspaceName) Default implementation of theimpersonateFromService(String, Credentials, String)
method taking into account the bundle calling this method.boolean
boolean
javax.jcr.Session
login()
Same as callinglogin(null, null)
.javax.jcr.Session
Same as callinglogin(null, workspace)
.javax.jcr.Session
login
(javax.jcr.Credentials credentials) Same as callinglogin(credentials, null)
.javax.jcr.Session
Logs into the repository at the givenworkspace
with the givencredentials
and returns the session returned from the repository.final javax.jcr.Session
loginAdministrative
(String workspace) Login as an administrative user.final javax.jcr.Session
loginService
(String subServiceName, String workspace) Actual implementation of theloginService(String, String)
method taking into account the bundle calling this method.
-
Constructor Details
-
AbstractSlingRepository2
protected AbstractSlingRepository2(AbstractSlingRepositoryManager manager, org.osgi.framework.Bundle usingBundle) Sets up this abstract SlingRepository implementation.- Parameters:
manager
- TheAbstractSlingRepositoryManager
controlling this instance as well as the actual JCR repository instance used by this.usingBundle
- The bundle using this instance. This is used by theloginService(String, String)
method, which will not be able to login if this parameter isnull
-
-
Method Details
-
getSlingRepositoryManager
- Returns:
- The
AbstractSlingRepositoryManager
controlling this instances
-
getRepository
protected final javax.jcr.Repository getRepository()Returns the actual repository to which all JCR Repository interface methods implemented by this class are delegated.- Returns:
- The delegated repository.
-
getDefaultWorkspace
Returns the default workspace to login to if any of thelogin
andcreateSession
methods is called without an explicit workspace name.This method may return
null
in which case the actual default workspace used depends on the underlying JCR Repository implementation.- Specified by:
getDefaultWorkspace
in interfaceSlingRepository
- Returns:
- null if the configured default workspace name is empty, SLING-256
-
createAdministrativeSession
protected abstract javax.jcr.Session createAdministrativeSession(String workspace) throws javax.jcr.RepositoryException Creates an administrative session to access the indicated workspace.This method is called by the
loginAdministrative(String)
andcreateServiceSession(String, String)
methods.- Parameters:
workspace
- The workspace to access ornull
to access thedefault workspace
- Returns:
- An administrative session
- Throws:
javax.jcr.RepositoryException
- If a general error occurs during login- See Also:
-
createServiceSession
protected javax.jcr.Session createServiceSession(String serviceUserName, String workspace) throws javax.jcr.RepositoryException Creates a service-session for the service'sserviceUserName
by impersonating the user from an administrative session.The administrative session is created calling
createAdministrativeSession(workspace)
and is logged out before this method returns.Implementations of this class may overwrite this method with a better implementation, notably one which does not involve a temporary creation of an administrative session.
- Parameters:
serviceUserName
- The name of the user to create the session forworkspace
- The workspace to access ornull
to access thedefault workspace
- Returns:
- A session for the given user
- Throws:
javax.jcr.RepositoryException
- If a general error occurs while creating the session
-
createServiceSession
protected javax.jcr.Session createServiceSession(Iterable<String> servicePrincipalNames, String workspaceName) throws javax.jcr.RepositoryException Creates a service-session for the service'sservicePrincipalNames
using a pre-authenticatedSubject
.Implementations of this class may overwrite this method to meet additional needs wrt the the nature of the principals, the
Subject
or additional attributes passed to the repository login.- Parameters:
servicePrincipalNames
- The names of the service principals to create the session forworkspaceName
- The workspace to access ornull
to access thedefault workspace
- Returns:
- A new service session
- Throws:
javax.jcr.RepositoryException
- If a general error occurs while creating the session.
-
login
public javax.jcr.Session login() throws javax.jcr.LoginException, javax.jcr.RepositoryExceptionSame as callinglogin(null, null)
.This method may be overwritten.
- Specified by:
login
in interfacejavax.jcr.Repository
- Returns:
- the result of calling
login(null, null)
. - Throws:
javax.jcr.LoginException
- If login is not possiblejavax.jcr.RepositoryException
- If another error occurrs during login- See Also:
-
login
public javax.jcr.Session login(javax.jcr.Credentials credentials) throws javax.jcr.LoginException, javax.jcr.RepositoryException Same as callinglogin(credentials, null)
.This method may be overwritten.
- Specified by:
login
in interfacejavax.jcr.Repository
- Parameters:
credentials
- TheCredentials
to use to login.- Returns:
- the result of calling
login(credentials, null)
. - Throws:
javax.jcr.LoginException
- If login is not possiblejavax.jcr.RepositoryException
- If another error occurrs during login- See Also:
-
login
public javax.jcr.Session login(String workspace) throws javax.jcr.LoginException, javax.jcr.NoSuchWorkspaceException, javax.jcr.RepositoryException Same as callinglogin(null, workspace)
.This method may be overwritten.
- Specified by:
login
in interfacejavax.jcr.Repository
- Parameters:
workspace
- The workspace to access ornull
to access thedefault workspace
- Returns:
- the result of calling
login(null, workspace)
. - Throws:
javax.jcr.LoginException
- If login is not possiblejavax.jcr.RepositoryException
- If another error occurrs during loginjavax.jcr.NoSuchWorkspaceException
- See Also:
-
login
public javax.jcr.Session login(javax.jcr.Credentials credentials, String workspace) throws javax.jcr.LoginException, javax.jcr.NoSuchWorkspaceException, javax.jcr.RepositoryException Logs into the repository at the givenworkspace
with the givencredentials
and returns the session returned from the repository.This method logs in as a guest if
null
credentials are provided. The method may be overwritten to implement a different behaviour as indicated by the JCR specification for this method to use external mechanisms to login instead of leveraging provided credentials.This method may be overwritten.
- Specified by:
login
in interfacejavax.jcr.Repository
- Parameters:
credentials
- TheCredentials
to use to login. If this isnull
JCRGuestCredentials
are used to login.workspace
- The workspace to access ornull
to access thedefault workspace
- Throws:
javax.jcr.LoginException
- If login is not possiblejavax.jcr.NoSuchWorkspaceException
- if the desired workspace is not availablejavax.jcr.RepositoryException
- If another error occurrs during login
-
loginService
public final javax.jcr.Session loginService(String subServiceName, String workspace) throws javax.jcr.LoginException, javax.jcr.RepositoryException Actual implementation of theloginService(String, String)
method taking into account the bundle calling this method. This method uses theServiceUserMapper
service to map the named service to a user and then calls thecreateServiceSession(String, String)
method actually create a session for that user.- Specified by:
loginService
in interfaceSlingRepository
- Parameters:
subServiceName
- An optional subService identifier (may benull
)workspace
- The workspace to access ornull
to access thedefault workspace
- Returns:
- A session authenticated with the service user
- Throws:
javax.jcr.LoginException
- if the service name cannot be derived or if logging is as the user to which the service name maps is not allowedjavax.jcr.RepositoryException
- If a general error occurs while creating the session- See Also:
-
impersonateFromService
public javax.jcr.Session impersonateFromService(String subServiceName, javax.jcr.Credentials credentials, String workspaceName) throws javax.jcr.LoginException, javax.jcr.RepositoryException Default implementation of theimpersonateFromService(String, Credentials, String)
method taking into account the bundle calling this method. This method uses theServiceUserMapper
service to map the named service to a user and then calls thecreateServiceSession(String, String)
method actually create a session for that user. This service session is then impersonated to the subject identified by the specifiedcredentials
.- Specified by:
impersonateFromService
in interfaceSlingRepository
- Parameters:
subServiceName
- An optional subService identifier (may benull
)credentials
- A valid non-nullCredentials
objectworkspaceName
- The workspace to access ornull
to access thedefault workspace
- 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.4
-
loginAdministrative
public final javax.jcr.Session loginAdministrative(String workspace) throws javax.jcr.RepositoryException Login as an administrative user. This method is deprecated and its use can be completely disabled by settingdisableLoginAdministrative
totrue
.This implementation cannot be overwritten but, unless disabled, forwards to the
createAdministrativeSession(String)
method.- Specified by:
loginAdministrative
in interfaceSlingRepository
- Parameters:
workspace
- The workspace to access ornull
to access thedefault workspace
- Returns:
- An administrative session
- Throws:
javax.jcr.RepositoryException
- If the login fails or has been disabled
-
getDescriptor
- Specified by:
getDescriptor
in interfacejavax.jcr.Repository
-
getDescriptorKeys
- Specified by:
getDescriptorKeys
in interfacejavax.jcr.Repository
-
getDescriptorValue
- Specified by:
getDescriptorValue
in interfacejavax.jcr.Repository
-
getDescriptorValues
- Specified by:
getDescriptorValues
in interfacejavax.jcr.Repository
-
isSingleValueDescriptor
- Specified by:
isSingleValueDescriptor
in interfacejavax.jcr.Repository
-
isStandardDescriptor
- Specified by:
isStandardDescriptor
in interfacejavax.jcr.Repository
-