use of org.apache.sling.api.resource.LoginException in project sling by apache.
the class ScriptCacheImpl method activate.
@Activate
protected void activate(ScriptCacheImplConfiguration configuration, BundleContext bundleCtx) {
threadPool = threadPoolManager.get("Script Cache Thread Pool");
bundleContext = bundleCtx;
additionalExtensions = configuration.org_apache_sling_scripting_cache_additional__extensions();
int newMaxCacheSize = configuration.org_apache_sling_scripting_cache_size();
if (newMaxCacheSize != DEFAULT_CACHE_SIZE) {
// change the map only if there's a configuration change regarding the cache's max size
CachingMap<CachedScript> newMap = new CachingMap<>(newMaxCacheSize);
newMap.putAll(internalMap);
internalMap = newMap;
}
ResourceResolver resolver = null;
try {
resolver = rrf.getServiceResourceResolver(null);
searchPaths = resolver.getSearchPath();
} catch (LoginException e) {
LOGGER.error("Unable to retrieve a ResourceResolver for determining the search paths.", e);
} finally {
if (resolver != null) {
resolver.close();
}
}
configureCache();
active = true;
}
use of org.apache.sling.api.resource.LoginException in project sling by apache.
the class ScriptingResourceResolverProviderImpl method getRequestScopedResourceResolver.
@Override
public ResourceResolver getRequestScopedResourceResolver() {
ScriptingResourceResolver threadResolver = perThreadResourceResolver.get();
if (threadResolver == null) {
try {
ResourceResolver delegate = rrf.getServiceResourceResolver(null);
threadResolver = new ScriptingResourceResolver(logStackTraceOnResolverClose, delegate);
perThreadResourceResolver.set(threadResolver);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Set per thread resource resolver for thread {}.", Thread.currentThread().getId());
}
} catch (LoginException e) {
throw new IllegalStateException("Cannot create per thread resource resolver.", e);
}
}
return threadResolver;
}
use of org.apache.sling.api.resource.LoginException in project sling by apache.
the class AnnouncementRegistryImpl method listAnnouncementsInSameCluster.
@Override
public synchronized Collection<Announcement> listAnnouncementsInSameCluster(final ClusterView localClusterView) {
logger.debug("listAnnouncementsInSameCluster: start. localClusterView: {}", localClusterView);
if (localClusterView == null) {
throw new IllegalArgumentException("clusterView must not be null");
}
ResourceResolver resourceResolver = null;
final Collection<Announcement> incomingAnnouncements = new LinkedList<Announcement>();
final InstanceDescription localInstance = getLocalInstanceDescription(localClusterView);
try {
resourceResolver = resourceResolverFactory.getServiceResourceResolver(null);
Resource clusterInstancesResource = ResourceHelper.getOrCreateResource(resourceResolver, config.getClusterInstancesPath());
Iterator<Resource> it0 = clusterInstancesResource.getChildren().iterator();
while (it0.hasNext()) {
Resource aClusterInstanceResource = it0.next();
final String instanceId = aClusterInstanceResource.getName();
logger.debug("listAnnouncementsInSameCluster: handling clusterInstance: {}", instanceId);
if (localInstance != null && localInstance.getSlingId().equals(instanceId)) {
// this is the local instance then - which we serve from the cache only
logger.debug("listAnnouncementsInSameCluster: matched localInstance, filling with cache: {}", instanceId);
fillWithCachedAnnouncements(incomingAnnouncements);
continue;
}
//TODO: add ClusterView.contains(instanceSlingId) for convenience to next api change
if (!contains(localClusterView, instanceId)) {
logger.debug("listAnnouncementsInSameCluster: instance is not in my view, ignoring: {}", instanceId);
// (corresponds to earlier expiry-handling)
continue;
}
final Resource announcementsResource = aClusterInstanceResource.getChild("announcements");
if (announcementsResource == null) {
logger.debug("listAnnouncementsInSameCluster: instance has no announcements: {}", instanceId);
continue;
}
logger.debug("listAnnouncementsInSameCluster: instance has announcements: {}", instanceId);
Iterator<Resource> it = announcementsResource.getChildren().iterator();
Announcement topologyAnnouncement;
while (it.hasNext()) {
Resource anAnnouncement = it.next();
topologyAnnouncement = Announcement.fromJSON(anAnnouncement.adaptTo(ValueMap.class).get("topologyAnnouncement", String.class));
logger.debug("listAnnouncementsInSameCluster: found announcement: {}", topologyAnnouncement);
incomingAnnouncements.add(topologyAnnouncement);
// SLING-3389: no longer check for expired announcements -
// instead make use of the fact that this instance
// has a clusterView and that every live instance
// is responsible of cleaning up expired announcements
// with the repository
}
}
// since SLING-3389 this method does only read operations, hence
// no commit necessary anymore - close happens in below finally block
} catch (LoginException e) {
logger.error("listAnnouncementsInSameCluster: could not log in administratively: " + e, e);
throw new RuntimeException("Could not log in to repository (" + e + ")", e);
} catch (PersistenceException e) {
logger.error("listAnnouncementsInSameCluster: got a PersistenceException: " + e, e);
throw new RuntimeException("Exception while talking to repository (" + e + ")", e);
} catch (JsonException e) {
logger.error("listAnnouncementsInSameCluster: got a JSONException: " + e, e);
throw new RuntimeException("Exception while converting json (" + e + ")", e);
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
if (logger.isDebugEnabled()) {
logger.debug("listAnnouncementsInSameCluster: result: " + incomingAnnouncements.size());
}
return incomingAnnouncements;
}
use of org.apache.sling.api.resource.LoginException in project sling by apache.
the class AnnouncementRegistryImpl method unregisterAnnouncement.
@Override
public synchronized void unregisterAnnouncement(final String ownerId) {
if (ownerId == null || ownerId.length() == 0) {
throw new IllegalArgumentException("ownerId must not be null or empty");
}
// remove from the cache - even if there's an error afterwards
ownAnnouncementsCache.remove(ownerId);
if (resourceResolverFactory == null) {
logger.error("unregisterAnnouncement: resourceResolverFactory is null");
return;
}
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory.getServiceResourceResolver(null);
final String path = config.getClusterInstancesPath() + "/" + slingId + "/announcements/" + ownerId;
final Resource announcementsResource = resourceResolver.getResource(path);
if (announcementsResource != null) {
resourceResolver.delete(announcementsResource);
resourceResolver.commit();
}
} catch (LoginException e) {
logger.error("unregisterAnnouncement: could not log in administratively: " + e, e);
throw new RuntimeException("Could not log in to repository (" + e + ")", e);
} catch (PersistenceException e) {
logger.error("unregisterAnnouncement: got a PersistenceException: " + e, e);
throw new RuntimeException("Exception while talking to repository (" + e + ")", e);
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}
use of org.apache.sling.api.resource.LoginException in project sling by apache.
the class DistributedEventReceiver method cleanUpObsoleteInstances.
private void cleanUpObsoleteInstances() {
final Set<String> slingIds = this.instances;
if (slingIds != null) {
this.instances = null;
this.logger.debug("Checking for old instance trees for distributed events.");
ResourceResolver resolver = null;
try {
resolver = this.resourceResolverFactory.getServiceResourceResolver(null);
final Resource baseResource = resolver.getResource(this.rootPath);
// sanity check - should never be null
if (baseResource != null) {
final ResourceHelper.BatchResourceRemover brr = ResourceHelper.getBatchResourceRemover(50);
final Iterator<Resource> iter = baseResource.listChildren();
while (iter.hasNext()) {
final Resource rootResource = iter.next();
if (!slingIds.contains(rootResource.getName())) {
brr.delete(rootResource);
}
}
// final commit for outstanding deletes
resolver.commit();
}
} catch (final PersistenceException pe) {
// in the case of an error, we just log this as a warning
this.logger.warn("Exception during job resource tree cleanup.", pe);
} catch (final LoginException ignore) {
this.ignoreException(ignore);
} finally {
if (resolver != null) {
resolver.close();
}
}
}
}
Aggregations