Package org.apache.solr.rest
Class ManagedResource
- java.lang.Object
-
- org.apache.solr.rest.ManagedResource
-
- Direct Known Subclasses:
ManagedSynonymFilterFactory.SynonymManager
,ManagedSynonymGraphFilterFactory.SynonymManager
,ManagedWordSetResource
public abstract class ManagedResource extends Object
Supports Solr components that have external data that needs to be managed using the REST API.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
ManagedResource.ChildResourceSupport
Marker interface to indicate a ManagedResource implementation class also supports managing child resources at path: /<resource>/{child}
-
Field Summary
Fields Modifier and Type Field Description static String
INIT_ARGS_JSON_FIELD
static String
INITIALIZED_ON_JSON_FIELD
protected Date
initializedOn
protected Date
lastUpdateSinceInitialization
static String
MANAGED_JSON_LIST_FIELD
static String
MANAGED_JSON_MAP_FIELD
protected NamedList<Object>
managedInitArgs
protected SolrResourceLoader
solrResourceLoader
protected ManagedResourceStorage
storage
static String
UPDATED_SINCE_INIT_JSON_FIELD
-
Constructor Summary
Constructors Modifier Constructor Description protected
ManagedResource(String resourceId, SolrResourceLoader loader, ManagedResourceStorage.StorageIO storageIO)
Initializes this managed resource, including setting up JSON-based storage using the provided storageIO implementation, such as ZK.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract Object
applyUpdatesToManagedData(Object updates)
Called during PUT/POST processing to apply updates to the managed data passed from the client.protected Map<String,Object>
buildMapToStore(Object managedData)
Builds the JSON object to be stored, containing initArgs and managed data fields.protected Map<String,Object>
convertNamedListToMap(NamedList<?> args)
Converts a NamedList<?> into an ordered Map for returning as JSON.protected ManagedResourceStorage
createStorage(ManagedResourceStorage.StorageIO storageIO, SolrResourceLoader loader)
Potential extension point allowing concrete implementations to supply their own storage implementation.abstract void
doDeleteChild(BaseSolrResource endpoint, String childId)
Called byRestManager.ManagedEndpoint.delete()
to delete a named part (the given childId) of the resource at the given endpointabstract void
doGet(BaseSolrResource endpoint, String childId)
Called byRestManager.ManagedEndpoint.get()
to retrieve a named part (the given childId) of the resource at the given endpointvoid
doPost(BaseSolrResource endpoint, org.restlet.representation.Representation entity, Object json)
Just callsdoPut(BaseSolrResource,Representation,Object)
; override to change the behavior of POST handling.void
doPut(BaseSolrResource endpoint, org.restlet.representation.Representation entity, Object json)
Applies changes to initArgs or managed data.String
getInitializedOn()
Returns this resource's initialization timestamp.String
getResourceId()
Gets the resource ID for this managed resource.SolrResourceLoader
getResourceLoader()
Returns the resource loader used by this resource.Class<? extends BaseSolrResource>
getServerResourceClass()
Gets the ServerResource class to register this endpoint with the Rest API router; in most cases, the default RestManager.ManagedEndpoint class is sufficient but ManagedResource implementations can override this method if a different ServerResource class is needed.String
getUpdatedSinceInitialization()
Returns the timestamp of the most recent update, or null if this resource has not been updated since initialization.boolean
hasChangesSinceInitialization()
Returns true if this resource has been changed since initialization.void
loadManagedDataAndNotify(List<ManagedResourceObserver> observers)
Called once during core initialization to get the managed data loaded from storage and notify observers.protected void
notifyObserversDuringInit(NamedList<?> args, List<ManagedResourceObserver> observers)
Notifies all registered observers that the ManagedResource is initialized.protected abstract void
onManagedDataLoadedFromStorage(NamedList<?> managedInitArgs, Object managedData)
Method called after data has been loaded from storage to give the concrete implementation a chance to post-process the data.void
onResourceDeleted()
Called by the RestManager framework after this resource has been deleted to allow this resource to close and clean-up any resources used by this.protected Object
processStoredData(Object data)
Processes the stored data.protected void
reloadFromStorage()
Invoked when this object determines it needs to reload the stored data.void
storeManagedData(Object managedData)
Persists managed data to the configured storage IO as a JSON object.protected boolean
updateInitArgs(NamedList<?> updatedArgs)
Called fromdoPut(BaseSolrResource,Representation,Object)
to update this resource's init args using the given updatedArgs
-
-
-
Field Detail
-
INIT_ARGS_JSON_FIELD
public static final String INIT_ARGS_JSON_FIELD
- See Also:
- Constant Field Values
-
MANAGED_JSON_LIST_FIELD
public static final String MANAGED_JSON_LIST_FIELD
- See Also:
- Constant Field Values
-
MANAGED_JSON_MAP_FIELD
public static final String MANAGED_JSON_MAP_FIELD
- See Also:
- Constant Field Values
-
INITIALIZED_ON_JSON_FIELD
public static final String INITIALIZED_ON_JSON_FIELD
- See Also:
- Constant Field Values
-
UPDATED_SINCE_INIT_JSON_FIELD
public static final String UPDATED_SINCE_INIT_JSON_FIELD
- See Also:
- Constant Field Values
-
solrResourceLoader
protected final SolrResourceLoader solrResourceLoader
-
storage
protected final ManagedResourceStorage storage
-
initializedOn
protected Date initializedOn
-
lastUpdateSinceInitialization
protected Date lastUpdateSinceInitialization
-
-
Constructor Detail
-
ManagedResource
protected ManagedResource(String resourceId, SolrResourceLoader loader, ManagedResourceStorage.StorageIO storageIO) throws SolrException
Initializes this managed resource, including setting up JSON-based storage using the provided storageIO implementation, such as ZK.- Throws:
SolrException
-
-
Method Detail
-
loadManagedDataAndNotify
public void loadManagedDataAndNotify(List<ManagedResourceObserver> observers) throws SolrException
Called once during core initialization to get the managed data loaded from storage and notify observers.- Throws:
SolrException
-
notifyObserversDuringInit
protected void notifyObserversDuringInit(NamedList<?> args, List<ManagedResourceObserver> observers) throws SolrException
Notifies all registered observers that the ManagedResource is initialized. This event only occurs once when the core is loaded. Thus, you need to reload the core to get updates applied to the analysis components that depend on the ManagedResource data.- Throws:
SolrException
-
createStorage
protected ManagedResourceStorage createStorage(ManagedResourceStorage.StorageIO storageIO, SolrResourceLoader loader) throws SolrException
Potential extension point allowing concrete implementations to supply their own storage implementation. The default implementation uses JSON as the storage format and delegates the loading and saving of JSON bytes to the supplied StorageIO class.- Throws:
SolrException
-
getResourceLoader
public SolrResourceLoader getResourceLoader()
Returns the resource loader used by this resource.
-
getResourceId
public String getResourceId()
Gets the resource ID for this managed resource.
-
getServerResourceClass
public Class<? extends BaseSolrResource> getServerResourceClass()
Gets the ServerResource class to register this endpoint with the Rest API router; in most cases, the default RestManager.ManagedEndpoint class is sufficient but ManagedResource implementations can override this method if a different ServerResource class is needed.
-
updateInitArgs
protected boolean updateInitArgs(NamedList<?> updatedArgs)
Called fromdoPut(BaseSolrResource,Representation,Object)
to update this resource's init args using the given updatedArgs
-
reloadFromStorage
protected void reloadFromStorage() throws SolrException
Invoked when this object determines it needs to reload the stored data.- Throws:
SolrException
-
processStoredData
protected Object processStoredData(Object data) throws SolrException
Processes the stored data.- Throws:
SolrException
-
onManagedDataLoadedFromStorage
protected abstract void onManagedDataLoadedFromStorage(NamedList<?> managedInitArgs, Object managedData) throws SolrException
Method called after data has been loaded from storage to give the concrete implementation a chance to post-process the data.- Throws:
SolrException
-
storeManagedData
public void storeManagedData(Object managedData)
Persists managed data to the configured storage IO as a JSON object.
-
getInitializedOn
public String getInitializedOn()
Returns this resource's initialization timestamp.
-
getUpdatedSinceInitialization
public String getUpdatedSinceInitialization()
Returns the timestamp of the most recent update, or null if this resource has not been updated since initialization.
-
hasChangesSinceInitialization
public boolean hasChangesSinceInitialization()
Returns true if this resource has been changed since initialization.
-
buildMapToStore
protected Map<String,Object> buildMapToStore(Object managedData)
Builds the JSON object to be stored, containing initArgs and managed data fields.
-
convertNamedListToMap
protected Map<String,Object> convertNamedListToMap(NamedList<?> args)
Converts a NamedList<?> into an ordered Map for returning as JSON.
-
doPost
public void doPost(BaseSolrResource endpoint, org.restlet.representation.Representation entity, Object json)
Just callsdoPut(BaseSolrResource,Representation,Object)
; override to change the behavior of POST handling.
-
doPut
public void doPut(BaseSolrResource endpoint, org.restlet.representation.Representation entity, Object json)
Applies changes to initArgs or managed data.
-
onResourceDeleted
public void onResourceDeleted() throws IOException
Called by the RestManager framework after this resource has been deleted to allow this resource to close and clean-up any resources used by this.- Throws:
IOException
- if an error occurs in the underlying storage when trying to delete
-
applyUpdatesToManagedData
protected abstract Object applyUpdatesToManagedData(Object updates)
Called during PUT/POST processing to apply updates to the managed data passed from the client.
-
doDeleteChild
public abstract void doDeleteChild(BaseSolrResource endpoint, String childId)
Called byRestManager.ManagedEndpoint.delete()
to delete a named part (the given childId) of the resource at the given endpoint
-
doGet
public abstract void doGet(BaseSolrResource endpoint, String childId)
Called byRestManager.ManagedEndpoint.get()
to retrieve a named part (the given childId) of the resource at the given endpoint
-
-