You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/05/25 20:34:00 UTC
svn commit: r541744 - in /maven/archiva/trunk:
archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/
archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/
archiva-web/archiva-weba...
Author: joakime
Date: Fri May 25 11:33:59 2007
New Revision: 541744
URL: http://svn.apache.org/viewvc?view=rev&rev=541744
Log:
[MRM-331]: Finding an Artifact gives an HTTP 500
Added:
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java
- copied, changed from r541739, maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java
Removed:
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java
Modified:
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java
maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/webwork.properties
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java?view=diff&rev=541744&r1=541743&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java Fri May 25 11:33:59 2007
@@ -19,12 +19,30 @@
* under the License.
*/
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.ConfigurationNames;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
import org.apache.maven.archiva.consumers.ConsumerException;
import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.hashcodes.HashcodesRecord;
import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.ArchivaConfigurationAdaptor;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.registry.RegistryListener;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
/**
* IndexArtifactConsumer
@@ -38,41 +56,88 @@
*/
public class IndexArtifactConsumer
extends AbstractMonitoredConsumer
- implements DatabaseUnprocessedArtifactConsumer
+ implements DatabaseUnprocessedArtifactConsumer, RegistryListener, Initializable
{
+ private static final String INDEX_ERROR = "indexing_error";
+
/**
* @plexus.configuration default-value="index-artifact"
*/
private String id;
/**
- * @plexus.configuration default-value="Index the artifact details for Full Text Search."
+ * @plexus.configuration default-value="Index the artifact checksums for Find functionality."
*/
private String description;
+
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration configuration;
+
+ /**
+ * @plexus.requirement role="org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout"
+ */
+ private Map bidirectionalLayoutMap;
+
+ /**
+ * @plexus.requirement role-hint="lucene"
+ */
+ private RepositoryContentIndexFactory indexFactory;
+
+ private Map repositoryMap = new HashMap();
public void beginScan()
{
- // TODO Auto-generated method stub
-
+ /* nothing to do here */
}
public void completeScan()
{
- // TODO Auto-generated method stub
-
+ /* nothing to do here */
}
public List getIncludedTypes()
{
- // TODO Auto-generated method stub
- return null;
+ return null; // TODO: define these as a list of artifacts.
}
public void processArchivaArtifact( ArchivaArtifact artifact )
throws ConsumerException
{
- // TODO Auto-generated method stub
+ HashcodesRecord record = new HashcodesRecord();
+ record.setRepositoryId( artifact.getModel().getRepositoryId() );
+ record.setArtifact( artifact );
+
+ IndexedRepositoryDetails pnl = getIndexedRepositoryDetails( artifact );
+ String artifactPath = pnl.layout.toPath( artifact );
+ record.setFilename( artifactPath );
+
+ try
+ {
+ pnl.index.modifyRecord( record );
+ }
+ catch ( RepositoryIndexException e )
+ {
+ triggerConsumerError( INDEX_ERROR, "Unable to index hashcodes: " + e.getMessage() );
+ }
+ }
+
+ private IndexedRepositoryDetails getIndexedRepositoryDetails( ArchivaArtifact artifact )
+ {
+ String repoId = artifact.getModel().getRepositoryId();
+ if ( StringUtils.isBlank( repoId ) )
+ {
+ throw new IllegalStateException( "Unable to process artifact [" + artifact
+ + "] as it has no repository id associated with it." );
+ }
+
+ return getIndexedRepositoryDetails( repoId );
+ }
+ private IndexedRepositoryDetails getIndexedRepositoryDetails( String id )
+ {
+ return (IndexedRepositoryDetails) this.repositoryMap.get( id );
}
public String getDescription()
@@ -90,4 +155,60 @@
return false;
}
+ public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ if ( ConfigurationNames.isRepositories( propertyName ) )
+ {
+ initRepositoryMap();
+ }
+ }
+
+ public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ /* do nothing */
+ }
+
+ public void initialize()
+ throws InitializationException
+ {
+ initRepositoryMap();
+ configuration.addChangeListener( this );
+ }
+
+ private void initRepositoryMap()
+ {
+ synchronized ( this.repositoryMap )
+ {
+ this.repositoryMap.clear();
+
+ Iterator it = configuration.getConfiguration().getRepositories().iterator();
+ while ( it.hasNext() )
+ {
+ RepositoryConfiguration repoconfig = (RepositoryConfiguration) it.next();
+ if ( !repoconfig.isManaged() )
+ {
+ continue;
+ }
+
+ ArchivaRepository repository = ArchivaConfigurationAdaptor.toArchivaRepository( repoconfig );
+ IndexedRepositoryDetails pnl = new IndexedRepositoryDetails();
+
+ pnl.path = repository.getUrl().getPath();
+ pnl.layout = (BidirectionalRepositoryLayout) this.bidirectionalLayoutMap.get( repoconfig.getLayout() );
+
+ pnl.index = indexFactory.createHashcodeIndex( repository );
+
+ this.repositoryMap.put( repoconfig.getId(), pnl );
+ }
+ }
+ }
+
+ class IndexedRepositoryDetails
+ {
+ public String path;
+
+ public BidirectionalRepositoryLayout layout;
+
+ public RepositoryContentIndex index;
+ }
}
Modified: maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java?view=diff&rev=541744&r1=541743&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java (original)
+++ maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java Fri May 25 11:33:59 2007
@@ -176,6 +176,15 @@
dataMap.put( DatabaseTaskJob.TASK_QUEUE, databaseUpdateQueue );
databaseJob.setJobDataMap( dataMap );
+ CronExpressionValidator cronValidator = new CronExpressionValidator();
+ if ( !cronValidator.validate( cronString ) )
+ {
+ getLogger().warn(
+ "Cron expression [" + cronString
+ + "] for database update is invalid. Defaulting to hourly." );
+ cronString = CRON_HOURLY;
+ }
+
try
{
CronTrigger trigger = new CronTrigger( DATABASE_JOB_TRIGGER, DATABASE_SCAN_GROUP, cronString );
Copied: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java (from r541739, maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java)
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java?view=diff&rev=541744&p1=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java&r1=541739&p2=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/IndexRepositoryAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/SchedulerAction.java Fri May 25 11:33:59 2007
@@ -24,6 +24,7 @@
import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler;
import org.apache.maven.archiva.scheduled.DefaultArchivaTaskScheduler;
import org.apache.maven.archiva.scheduled.tasks.ArchivaTask;
+import org.apache.maven.archiva.scheduled.tasks.DatabaseTask;
import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
import org.apache.maven.archiva.security.ArchivaRoleConstants;
import org.codehaus.plexus.redback.rbac.Resource;
@@ -36,12 +37,16 @@
/**
* Configures the application.
*
- * @plexus.component role="com.opensymphony.xwork.Action" role-hint="indexRepositoryAction"
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="schedulerAction"
*/
-public class IndexRepositoryAction
+public class SchedulerAction
extends PlexusActionSupport
implements SecureAction
{
+ private static final String REPO_SUCCESS = "repoSucces";
+
+ private static final String DB_SUCCESS = "dbSuccess";
+
/**
* @plexus.requirement
*/
@@ -49,7 +54,7 @@
private String repoid;
- public String run()
+ public String scanRepository()
{
if ( StringUtils.isBlank( repoid ) )
{
@@ -103,6 +108,48 @@
}
// Return to the repositories screen.
+ return SUCCESS;
+ }
+
+ public String updateDatabase()
+ {
+ DatabaseTask task = new DatabaseTask();
+ task.setName( DefaultArchivaTaskScheduler.DATABASE_JOB + ":user-requested" );
+ task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT );
+
+ boolean scheduleTask = false;
+
+ try
+ {
+ if ( taskScheduler.isProcessingDatabaseTask() )
+ {
+ addActionError( "Database task was already queued." );
+ }
+ else
+ {
+ scheduleTask = true;
+ }
+ }
+ catch ( ArchivaException e )
+ {
+ scheduleTask = false;
+ addActionError( e.getMessage() );
+ }
+
+ if ( scheduleTask )
+ {
+ try
+ {
+ taskScheduler.queueDatabaseTask( task );
+ addActionMessage( "Your request to update the database has been queued." );
+ }
+ catch ( TaskQueueException e )
+ {
+ addActionError( "Unable to queue your request to update the database: " + e.getMessage() );
+ }
+ }
+
+ // Return to the database screen.
return SUCCESS;
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java?view=diff&rev=541744&r1=541743&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/ConfigurationSynchronization.java Fri May 25 11:33:59 2007
@@ -144,5 +144,6 @@
{
Banner.display( getLogger(), ArchivaVersion.determineVersion( this.getClass().getClassLoader() ) );
synchConfiguration();
+ archivaConfiguration.addChangeListener( this );
}
}
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/webwork.properties
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/webwork.properties?view=diff&rev=541744&r1=541743&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/webwork.properties (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/webwork.properties Fri May 25 11:33:59 2007
@@ -22,6 +22,6 @@
webwork.objectFactory = org.codehaus.plexus.xwork.PlexusObjectFactory
webwork.url.includeParams = none
-webwork.devMode = true
+# webwork.devMode = true
# TODO: package up a theme and share with Continuum. Should contain everything from xhtml, and set templateDir to WEB-INF/themes
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml?view=diff&rev=541744&r1=541743&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml Fri May 25 11:33:59 2007
@@ -238,7 +238,7 @@
<result name="confirm" type="redirect-action">deleteRepository</result>
</action>
- <action name="indexRepository" class="indexRepositoryAction" method="run">
+ <action name="indexRepository" class="schedulerAction" method="scanRepository">
<result type="redirect-action">repositories</result>
</action>
@@ -342,6 +342,10 @@
<action name="database" class="databaseAction" method="input">
<result name="input">/WEB-INF/jsp/admin/database.jsp</result>
+ </action>
+
+ <action name="updateDatabase" class="schedulerAction" method="updateDatabase">
+ <result type="redirect-action">database</result>
</action>
<!-- .\ CONFIGURATION \.___________________________________________ -->
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp?view=diff&rev=541744&r1=541743&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/database.jsp Fri May 25 11:33:59 2007
@@ -56,6 +56,10 @@
</tr>
</table>
</ww:form>
+
+ <ww:form action="updateDatabase" theme="simple">
+ <ww:submit value="Update Database Now"/>
+ </ww:form>
<h2>Database - Unprocessed Artifacts Scanning</h2>
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp?view=diff&rev=541744&r1=541743&r2=541744
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp Fri May 25 11:33:59 2007
@@ -157,7 +157,7 @@
<tr>
<td>
<redback:ifAuthorized permission="archiva-run-indexer">
- <ww:form action="indexRepository">
+ <ww:form action="indexRepository" theme="simple">
<ww:hidden name="repoid" value="%{'${repository.id}'}"/>
<ww:submit value="Scan Repository Now"/>
</ww:form>