Point checkin for link validation.

Everything but that code that will bring virtualized staging archives up & apply diffs to href validity info.
Handles abort(), filters junk, graceful start/stop, etc.   Not usable yet, but soon (assuming no gaping bugs).


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6079 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jon Cox
2007-06-23 20:24:38 +00:00
parent b2a2ad8c94
commit 3700ab19c6
3 changed files with 175 additions and 63 deletions

View File

@@ -25,62 +25,61 @@
<beans>
<!-- ensure that the schema is bootstrapped -->
<bean id="schemaBootstrap" class="org.alfresco.repo.domain.schema.SchemaBootstrap" >
<property name="localSessionFactory">
<ref bean="&amp;sessionFactory"></ref> <!-- inject the actual factory, not a session -->
</property>
<property name="updateSchema">
<value>${db.schema.update}</value>
</property>
<property name="postCreateScriptUrls">
<list>
<value>classpath:alfresco/dbscripts/create/2.0/${db.script.dialect}/AlfrescoPostCreate-2.0-FKIndexes.sql</value>
</list>
</property>
<property name="validateUpdateScriptPatches">
<list>
</list>
</property>
<property name="preUpdateScriptPatches">
<list>
<ref bean="patch.schemaUpdateScript-V1.4-1" />
<ref bean="patch.schemaUpdateScript-V1.4-2" />
<ref bean="patch.db-V1.4-PostgresFKIndexes" />
</list>
</property>
<property name="postUpdateScriptPatches">
<list>
<ref bean="patch.db-V2.0-ExplicitIndexes" />
<ref bean="patch.db-V2.0-AVMFKIndexes" />
<ref bean="patch.db-V2.1-JBPMData" />
<ref bean="patch.db-V2.1-VersionColumns" />
</list>
</property>
</bean>
<!-- Bootstrap the AVM -->
<bean id="avmBootstrap" class="org.alfresco.repo.avm.AvmBootstrap" >
<property name="issuers">
<list>
<ref bean="nodeIssuer" />
<ref bean="layerIssuer" />
</list>
</property>
<property name="avmLockingAwareService">
<ref bean="avmLockingAwareService"/>
</property>
</bean>
<!-- Bootstrap AVM Locking Service. -->
<bean id="avmLockingBootstrap" class="org.alfresco.repo.avm.locking.AVMLockingBootstrap">
<property name="avmLockingService">
<ref bean="avmLockingService"/>
</property>
</bean>
<!-- Bootstrap Files -->
<!-- ensure that the schema is bootstrapped -->
<bean id="schemaBootstrap" class="org.alfresco.repo.domain.schema.SchemaBootstrap" >
<property name="localSessionFactory">
<ref bean="&amp;sessionFactory"></ref> <!-- inject the actual factory, not a session -->
</property>
<property name="updateSchema">
<value>${db.schema.update}</value>
</property>
<property name="postCreateScriptUrls">
<list>
<value>classpath:alfresco/dbscripts/create/2.0/${db.script.dialect}/AlfrescoPostCreate-2.0-FKIndexes.sql</value>
</list>
</property>
<property name="validateUpdateScriptPatches">
<list>
</list>
</property>
<property name="preUpdateScriptPatches">
<list>
<ref bean="patch.schemaUpdateScript-V1.4-1" />
<ref bean="patch.schemaUpdateScript-V1.4-2" />
<ref bean="patch.db-V1.4-PostgresFKIndexes" />
</list>
</property>
<property name="postUpdateScriptPatches">
<list>
<ref bean="patch.db-V2.0-ExplicitIndexes" />
<ref bean="patch.db-V2.0-AVMFKIndexes" />
<ref bean="patch.db-V2.1-JBPMData" />
<ref bean="patch.db-V2.1-VersionColumns" />
</list>
</property>
</bean>
<!-- Bootstrap the AVM -->
<bean id="avmBootstrap" class="org.alfresco.repo.avm.AvmBootstrap" >
<property name="issuers">
<list>
<ref bean="nodeIssuer" />
<ref bean="layerIssuer" />
</list>
</property>
<property name="avmLockingAwareService">
<ref bean="avmLockingAwareService"/>
</property>
</bean>
<!-- Bootstrap AVM Locking Service. -->
<bean id="avmLockingBootstrap" class="org.alfresco.repo.avm.locking.AVMLockingBootstrap">
<property name="avmLockingService">
<ref bean="avmLockingService"/>
</property>
</bean>
<!-- Bootstrap Files -->
<bean id="systemInfoBootstrap" parent="systemInfoImporter">
</bean>
@@ -279,13 +278,19 @@
</property>
</bean>
<bean id="avmIndexRecoveryBootstrap" class="org.alfresco.repo.node.index.IndexRecoveryBootstrapBean" >
<bean id="avmIndexRecoveryBootstrap" class="org.alfresco.repo.node.index.IndexRecoveryBootstrapBean" >
<property name="indexRecoveryComponent">
<ref bean="avmIndexRecoveryComponent"/>
<ref bean="avmIndexRecoveryComponent"/>
</property>
</bean>
<!-- LinkValidationService -->
<bean id="linkValidationServiceBootstrap"
class="org.alfresco.linkvalidation.LinkValidationServiceBootstrap">
</bean>
<!-- This component checks the interconnection between the metadata, indexes and content -->
<bean id="configurationChecker" class="org.alfresco.repo.admin.ConfigurationChecker">
<property name="strict">
@@ -317,7 +322,8 @@
<ref bean="contentService"/>
</property>
</bean>
<!-- This component ensures that patches get applied on startup -->
<bean id="patchExecuter" class="org.alfresco.repo.admin.patch.PatchExecuter">
@@ -329,6 +335,7 @@
</property>
</bean>
<!-- Start module components -->
<bean id="moduleStarter" class="org.alfresco.repo.module.ModuleStarter">

View File

@@ -31,9 +31,14 @@ import java.util.List;
import org.alfresco.service.cmr.avm.AVMNotFoundException;
import org.alfresco.util.NameMatcher;
import java.net.SocketException;
import javax.net.ssl.SSLException;
public interface LinkValidationService
{
public void onBootstrap();
public void onShutdown();
/**
* Updates href status and href file dependencies for path.
*
@@ -61,7 +66,7 @@ public interface LinkValidationService
* @param nthreads
* Number of threads to use when fetching URLs (e.g.: 5)
*
* @param status
* @param progress
* While updateHrefInfo() is a synchronous function,
* 'status' may be polled in a separate thread to
* observe its progress.
@@ -73,8 +78,10 @@ public interface LinkValidationService
int nthreads,
HrefValidationProgress progress
)
throws AVMNotFoundException;
throws AVMNotFoundException,
SocketException,
SSLException,
LinkValidationAbortedException;
/**
* Fetches information on broken hrefs within a store name or path
@@ -186,13 +193,47 @@ public interface LinkValidationService
int nthreads,
HrefValidationProgress progress)
throws AVMNotFoundException,
SocketException,
SSLException,
LinkValidationAbortedException;
/**
* Fetches a manifest of all hyperlinks broken by files
* deleted in a HrefDifference between two webapps.
*
* @param hdiff The difference between two webapps obtained by calling getHrefDifference().
*/
public HrefManifest getHrefManifestBrokenByDelete(HrefDifference hdiff);
/**
* Fetches a manifest of all hyperlinks broken in new or modified files in
* an HrefDifference.
*
* @param hdiff The difference between two webapps obtained by calling getHrefDifference().
*/
public HrefManifest getHrefManifestBrokenByNewOrMod(HrefDifference hdiff);
/**
* Merges an HrefDifference into the master href info table.
*/
public void mergeHrefDiff( HrefDifference hdiff);
public void mergeHrefDiff( HrefDifference hdiff)
throws AVMNotFoundException,
SocketException,
SSLException,
LinkValidationAbortedException;
/**
*
*/
public void updateHrefInfo( String webappPath,
boolean incremental,
boolean validateExternal,
int connectTimeout,
int readTimeout,
int nthreads,
HrefValidationProgress progress)
throws AVMNotFoundException,
SocketException,
SSLException,
LinkValidationAbortedException;
}

View File

@@ -0,0 +1,64 @@
/*-----------------------------------------------------------------------------
* Copyright 2007 Alfresco Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. As a special
* exception to the terms and conditions of version 2.0 of the GPL, you may
* redistribute this Program in connection with Free/Libre and Open Source
* Software ("FLOSS") applications as described in Alfresco's FLOSS exception.
* You should have received a copy of the text describing the FLOSS exception,
* and it is also available here: http://www.alfresco.com/legal/licensing
*
*
* Author Jon Cox <jcox@alfresco.com>
* File LinkValidationServiceBootstrap.java
*----------------------------------------------------------------------------*/
package org.alfresco.linkvalidation;
import org.alfresco.util.AbstractLifecycleBean;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationContext;
import org.alfresco.service.cmr.avm.AVMNotFoundException;
import org.alfresco.repo.avm.util.RawServices;
/**
* Bootstrap for LinkValidationService
*/
public class LinkValidationServiceBootstrap extends AbstractLifecycleBean
{
private LinkValidationService linkValidationService_;
/* (non-Javadoc)
* @see org.alfresco.util.AbstractLifecycleBean#onBootstrap(org.springframework.context.ApplicationEvent)
*/
@Override
protected void onBootstrap(ApplicationEvent event)
{
ApplicationContext springContext = RawServices.Instance().getContext();
linkValidationService_ = (LinkValidationService)
springContext.getBean("LinkValidationService");
linkValidationService_.onBootstrap();
}
/* (non-Javadoc)
* @see org.alfresco.util.AbstractLifecycleBean#onShutdown(org.springframework.context.ApplicationEvent)
*/
@Override
protected void onShutdown(ApplicationEvent event)
{
linkValidationService_.onShutdown();
}
}