From f07faf00b0b542140b0429989bd4695badd410d2 Mon Sep 17 00:00:00 2001 From: Steven Glover Date: Thu, 21 Jul 2011 11:01:19 +0000 Subject: [PATCH] Checkin of remaining files for ALF-8793: "RSOLR 036: Update IndexChecker to call SOLR check APIs" git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29244 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/repository.properties | 1 + .../Search/common-search-context.xml | 19 +++++- .../alfresco/repo/solr/SolrActiveEvent.java | 13 ++++ .../solr/SolrTrackingMethodInterceptor.java | 66 +++++++++++++++++++ 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 source/java/org/alfresco/repo/solr/SolrActiveEvent.java create mode 100644 source/java/org/alfresco/repo/solr/SolrTrackingMethodInterceptor.java diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties index a4c848e585..7eb93d9d30 100644 --- a/config/alfresco/repository.properties +++ b/config/alfresco/repository.properties @@ -672,6 +672,7 @@ encryption.macAlgorithm=HmacSHA1 # SOLR connection details solr.solrHost=localhost +solr.solrAdminPort=8834 solr.solrUrl=http://${solr.solrHost}:8080/solr solr.solrUser=solr solr.solrPassword=solr diff --git a/config/alfresco/subsystems/Search/common-search-context.xml b/config/alfresco/subsystems/Search/common-search-context.xml index 6ea9820784..9e9b4cece3 100644 --- a/config/alfresco/subsystems/Search/common-search-context.xml +++ b/config/alfresco/subsystems/Search/common-search-context.xml @@ -6,7 +6,7 @@ - + @@ -20,6 +20,23 @@ + + + + + + org.alfresco.repo.solr.SOLRTrackingComponent + + + + + + + + + + + diff --git a/source/java/org/alfresco/repo/solr/SolrActiveEvent.java b/source/java/org/alfresco/repo/solr/SolrActiveEvent.java new file mode 100644 index 0000000000..5dba6afc70 --- /dev/null +++ b/source/java/org/alfresco/repo/solr/SolrActiveEvent.java @@ -0,0 +1,13 @@ +package org.alfresco.repo.solr; + +import org.springframework.context.ApplicationEvent; + +public class SolrActiveEvent extends ApplicationEvent +{ + private static final long serialVersionUID = -7361024456694701653L; + + public SolrActiveEvent(Object source) { + super(source); + } + +} diff --git a/source/java/org/alfresco/repo/solr/SolrTrackingMethodInterceptor.java b/source/java/org/alfresco/repo/solr/SolrTrackingMethodInterceptor.java new file mode 100644 index 0000000000..7492a19a5c --- /dev/null +++ b/source/java/org/alfresco/repo/solr/SolrTrackingMethodInterceptor.java @@ -0,0 +1,66 @@ +package org.alfresco.repo.solr; + +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; + +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; + +/** + * A method interceptor that intercepts method calls on the {@link SOLRTrackingComponent} + * in order to determine if a remote Solr instance is active. If so, an application event + * is generated to indicate this. + * + * This is used by the Solr JMX code to export Solr mbeans only if the remote Solr instance + * is active. + * + * since 4.0 + * + */ +public class SolrTrackingMethodInterceptor implements MethodInterceptor, ApplicationEventPublisherAware +{ + private final WriteLock writeLock; + private boolean solrActive = false; + private ApplicationEventPublisher applicationEventPublisher; + + public SolrTrackingMethodInterceptor() + { + ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + writeLock = lock.writeLock(); + } + + private void broadcastSolrActive() + { + applicationEventPublisher.publishEvent(new SolrActiveEvent(this)); + solrActive = true; + } + + @Override + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) + { + this.applicationEventPublisher = applicationEventPublisher; + } + + public Object invoke(MethodInvocation mi) throws Throwable + { + writeLock.lock(); + try + { + if(!solrActive) + { + broadcastSolrActive(); + solrActive = true; + } + } + finally + { + writeLock.unlock(); + } + + return mi.proceed(); + } + +}