]> source.dussan.org Git - archiva.git/blob
a7b380ddd1b47ac534caf8a521ed901c6cc40764
[archiva.git] /
1 package org.apache.maven.archiva.scheduled.executors;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
23 import org.apache.maven.archiva.configuration.Configuration;
24 import org.apache.maven.archiva.database.ArchivaDatabaseException;
25 import org.apache.maven.archiva.database.updater.DatabaseUpdater;
26 import org.apache.maven.archiva.scheduled.tasks.DatabaseTask;
27 import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
28
29 import org.codehaus.plexus.logging.AbstractLogEnabled;
30 import org.codehaus.plexus.taskqueue.Task;
31 import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
32 import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
33
34 import java.io.IOException;
35 import java.util.ArrayList;
36 import java.util.Iterator;
37 import java.util.List;
38
39 /**
40  *
41  * @author <a href="mailto:jmcconnell@apache.org">Jesse McConnell</a>
42  * @version $Id:$
43  * 
44  * @plexus.component role="org.codehaus.plexus.taskqueue.execution.TaskExecutor" 
45  *      role-hint="archiva-task-executor"
46  */
47 public class ArchivaScheduledTaskExecutor extends AbstractLogEnabled implements TaskExecutor
48 {
49     /**
50      * Configuration store.
51      *
52      * @plexus.requirement
53      */
54     private ArchivaConfiguration archivaConfiguration;
55
56     /**
57      * @plexus.requirement role-hint="jdo"
58      */
59     private DatabaseUpdater databaseUpdater;
60     
61     public void executeTask( Task task ) throws TaskExecutionException
62     {
63         
64         if ( task instanceof DatabaseTask )          
65         {  
66             executeDatabaseTask( (DatabaseTask) task );
67         }
68         else if ( task instanceof RepositoryTask )
69         {
70             executeRepositoryTask( (RepositoryTask) task );
71         }
72         else
73         {
74             throw new TaskExecutionException( "Unknown Task: " + task.toString() );
75         }
76         
77     }
78
79     private void executeDatabaseTask( DatabaseTask task ) throws TaskExecutionException
80     {
81         getLogger().info( "Executing task from queue with job name: " + task.getName() );
82         long time = System.currentTimeMillis();
83
84         
85         try
86         {
87             databaseUpdater.updateAllUnprocessed();
88         }
89         catch ( ArchivaDatabaseException e )
90         {
91             throw new TaskExecutionException( "Error running unprocessed updater", e );
92         }
93        
94         try 
95         {
96             databaseUpdater.updateAllProcessed();
97         }
98         catch ( ArchivaDatabaseException e )
99         {
100             throw new TaskExecutionException( "Error running processed updater", e );
101         }       
102         
103         time = System.currentTimeMillis() - time;
104
105         getLogger().info( "Finished database task in " + time + "ms." );
106         
107     }
108     
109     private void executeRepositoryTask ( RepositoryTask task ) throws TaskExecutionException
110     {
111         getLogger().info( "Executing task from queue with job name: " + task.getName() );
112         
113         long time = System.currentTimeMillis();
114
115         // insert repository scanning codelets here
116         
117         time = System.currentTimeMillis() - time;
118
119         getLogger().info( "Finished repository task for " + time + "ms." );
120     }
121 }