]> source.dussan.org Git - archiva.git/commitdiff
managed repositories add link to do a directories scan immediate.
authorOlivier Lamy <olamy@apache.org>
Mon, 12 Mar 2012 16:43:41 +0000 (16:43 +0000)
committerOlivier Lamy <olamy@apache.org>
Mon, 12 Mar 2012 16:43:41 +0000 (16:43 +0000)
Take about correctly close jackrabbit session in case of exception and open session when it's closed.

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1299735 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repositories.js
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/repositories.html
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java
archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java
archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java

index c747d73f61da35b36d5c559db1dae6edddb63f7e..7d8ea76a72634312def833d81f6245a82ba69fbe 100644 (file)
@@ -54,7 +54,7 @@ public interface RepositoriesService
         throws ArchivaRestServiceException;
 
 
-    @Path( "scanRepositoryDirectories/{repositoryId}" )
+    @Path( "scanRepositoryDirectoriesNow/{repositoryId}" )
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_RUN_INDEXER )
@@ -62,7 +62,7 @@ public interface RepositoriesService
      * scan directories
      * @since 1.4-M3
      */
-    RepositoryScanStatistics scanRepositoryDirectories( @PathParam( "repositoryId" ) String repositoryId )
+    RepositoryScanStatistics scanRepositoryDirectoriesNow( @PathParam( "repositoryId" ) String repositoryId )
         throws ArchivaRestServiceException;
 
 
index 5ce90875badeae936f7fb3f32190d82938cd693c..df6a28744d171b676be430b01c9e147701fe403e 100644 (file)
@@ -771,7 +771,7 @@ public class DefaultRepositoriesService
         return Boolean.TRUE;
     }
 
-    public RepositoryScanStatistics scanRepositoryDirectories( String repositoryId )
+    public RepositoryScanStatistics scanRepositoryDirectoriesNow( String repositoryId )
         throws ArchivaRestServiceException
     {
         long sinceWhen = RepositoryScanner.FRESH_SCAN;
index 1c43eb7466907eff987c25cc68c26d0e90ba0181..255f1cc59f901c3b00e51492c4353df4c0ae08b2 100644 (file)
@@ -58,7 +58,7 @@ managedrepository.delete.content=Delete Content too ?
 managedrepositories.grid.tab.title=Managed Repositories
 managedrepositories.grid.head=Managed Repositories Management
 type=Type
-managedrepository.stats=Stats
+managedrepository.stats=Managed Repository Stats
 snapshots.notincluded=Snapshots not included
 snapshots.included=Snapshots included
 managedrepository.pomsnippet=Pom Snippet
@@ -80,6 +80,13 @@ managedrepository.updated=Managed Repository {0} updated.
 managed.repository.bulk.save.confirm=Are you sure to update {0} Managed Repository(ies)
 managed.repository.bulk.save.confirm.title=Network Proxy Bulk Save
 managedrepository.scan.started=Scan Started for Managed Repository {0}
+managedrepository.scan.grid.header=Index Scanning
+managedrepository.scan.index=Update your Maven Index.
+managedrepository.stats.grid.header=Stats
+managedrepository.scan.directories=Immediate Full directories transversal scanning.
+managedrepository.scan.directories.grid.header=Directories Scanning
+managedrepository.scan.directories.finished=Managed Repository {0} fully scanned.
+managedrepository.scan.directories.started= Managed Repository {0} full scan started.
 
 # remote repositories screen
 remoterepository.downloadremoteindex.now=Download Remote Index Now
index 0a0e09e4c0dd420890c49240c82d9f9f16b16550..8c386d52328b72e945c5510018c0c66b438cf0c6 100644 (file)
@@ -321,21 +321,21 @@ $(function() {
             $.ajax(url,
               {
                 type: "GET",
-                  beforeSend:function(){
-                    displayInfoMessage($.i18n.prop("managedrepository.scan.started",managedRepository.id()));
-                    closeDialogConfirm();
-                  },
-                  success: function(data) {
-                    displaySuccessMessage($.i18n.prop("managedrepository.scanned",managedRepository.name()));
-                  },
-                  error: function(data) {
-                    var res = $.parseJSON(data.responseText);
-                    displayRestError(res);
-                  },
-                  complete: function(){
-                    removeSmallSpinnerImg();
-                    closeDialogConfirm();
-                  }
+                beforeSend:function(){
+                  displayInfoMessage($.i18n.prop("managedrepository.scan.started",managedRepository.id()));
+                  closeDialogConfirm();
+                },
+                success: function(data) {
+                  displaySuccessMessage($.i18n.prop("managedrepository.scanned",managedRepository.name()));
+                },
+                error: function(data) {
+                  var res = $.parseJSON(data.responseText);
+                  displayRestError(res);
+                },
+                complete: function(){
+                  removeSmallSpinnerImg();
+                  closeDialogConfirm();
+                }
               }
             );
           },
@@ -415,6 +415,32 @@ $(function() {
                         $.i18n.prop('managed.repository.bulk.save.confirm',repos.length));
     }
 
+    directoriesScan=function(managedRepository){
+      $.log("directoriesScan:"+managedRepository.id());
+      var url = "restServices/archivaServices/repositoriesService/scanRepositoryDirectoriesNow/"+managedRepository.id();
+      $.ajax(url,
+        {
+          type: "GET",
+          dataType: 'json',
+          beforeSend:function(){
+            displayInfoMessage($.i18n.prop("managedrepository.scan.directories.started", managedRepository.id()));
+          },
+          success: function(data) {
+            $.log(" scanRepositoryDirectoriesNow finished ");
+            displaySuccessMessage( $.i18n.prop("managedrepository.scan.directories.finished", managedRepository.id()));
+          },
+          error: function(data) {
+            var res = $.parseJSON(data.responseText);
+            displayRestError(res);
+          },
+          complete: function(){
+            removeSmallSpinnerImg();
+          }
+
+        }
+      );
+    }
+
     showStats=function(managedRepository){
       if ($(calculatePopoverId(managedRepository)).html()){
         // we ask stats all the time ? if no uncomment return
index 4efb24d78a5f43b0aacdc2456559cedec4af5d29..104453eddcc2c87c6b6266732de54792726192ac 100644 (file)
         {{/each}}
         <th>Releases</th>
         <th>Snapshots</th>
-        <th>Scan</th>
+        <th title="${$.i18n.prop('managedrepository.scan.index')}">${$.i18n.prop('managedrepository.scan.grid.header')}</th>
         <th>${$.i18n.prop('edit')}</th>
         <th>${$.i18n.prop('delete')}</th>
         <th>${$.i18n.prop('modified')}</th>
         <th>${$.i18n.prop('managedrepository.pomsnippet')}</th>
-        <th title="${$.i18n.prop('managedrepository.stats')}">Stats</th>
+        <th title="${$.i18n.prop('managedrepository.stats')}">${$.i18n.prop('managedrepository.stats.grid.header')}</th>
+        <th title="${$.i18n.prop('managedrepository.scan.directories')}">${$.i18n.prop('managedrepository.scan.directories.grid.header')}</th>
       </tr>
   </thead>
   <tbody>
                    data-bind="event: { mouseover: function(){ showStats(row) }, mouseout: function(){ hideStats(row) },}"
                    id="managedrepository-stats-img-${row.id()}"/>
             </td>
+            <td>
+              <a href="#" data-bind="click: function(){directoriesScan(row)}">Scan directories</a>
+            </td>
           </tr>
       {{/each}}
   </tbody>
index 4d484f51ecf67fece1856e1bbfb9a9d7a29592b0..4ab65c6427286c06bf08c2c1167e1ecd077338e3 100644 (file)
@@ -132,11 +132,13 @@ public interface MetadataRepository
 
     void save();
 
-    void close();
+    void close()
+        throws MetadataRepositoryException;
 
     void revert();
 
     boolean canObtainAccess( Class<?> aClass );
 
-    Object obtainAccess( Class<?> aClass );
+    Object obtainAccess( Class<?> aClass )
+        throws MetadataRepositoryException;
 }
index 31bc8843588d76d206aa9a9628a6c659113f9dcb..f861ac0d958fe8942387f8465928248cffecb85f 100644 (file)
@@ -94,10 +94,18 @@ public class RepositorySession
         }
         finally
         {
-            repository.close();
+            try
+            {
+                repository.close();
+            }
+            catch ( MetadataRepositoryException e )
+            {
+                throw new RuntimeException( e.getMessage(), e );
+            }
         }
     }
 
+
     public void markDirty()
     {
         this.dirty = true;
index 24b9632f50a4b562eb0fdd927996f22d4882f7c0..2665e86794025cdd1cc549aff855a21bcbf51083 100644 (file)
@@ -93,7 +93,7 @@ public class JcrMetadataRepository
 
     private Repository repository;
 
-    private Session session;
+    private Session jcrSession;
 
     public JcrMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories, Repository repository )
         throws RepositoryException
@@ -101,9 +101,10 @@ public class JcrMetadataRepository
         this.metadataFacetFactories = metadataFacetFactories;
         this.repository = repository;
 
-        session = repository.login( new SimpleCredentials( "admin", "admin".toCharArray() ) );
+        //session = repository.login( new SimpleCredentials( "admin", "admin".toCharArray() ) );
     }
 
+
     static void initialize( Session session )
         throws RepositoryException
     {
@@ -175,8 +176,8 @@ public class JcrMetadataRepository
 
         try
         {
-            Node node = getOrAddArtifactNode( repositoryId, namespace, projectId, projectVersion,
-                                              artifactMeta.getId() );
+            Node node =
+                getOrAddArtifactNode( repositoryId, namespace, projectId, projectVersion, artifactMeta.getId() );
 
             Calendar cal = Calendar.getInstance();
             cal.setTime( artifactMeta.getFileLastModified() );
@@ -223,8 +224,8 @@ public class JcrMetadataRepository
 
         try
         {
-            Node versionNode = getOrAddProjectVersionNode( repositoryId, namespace, projectId,
-                                                           versionMetadata.getId() );
+            Node versionNode =
+                getOrAddProjectVersionNode( repositoryId, namespace, projectId, versionMetadata.getId() );
 
             versionNode.setProperty( "name", versionMetadata.getName() );
             versionNode.setProperty( "description", versionMetadata.getDescription() );
@@ -268,8 +269,8 @@ public class JcrMetadataRepository
                 versionNode.setProperty( "mailingList." + i + ".post", mailingList.getPostAddress() );
                 versionNode.setProperty( "mailingList." + i + ".unsubscribe", mailingList.getUnsubscribeAddress() );
                 versionNode.setProperty( "mailingList." + i + ".subscribe", mailingList.getSubscribeAddress() );
-                versionNode.setProperty( "mailingList." + i + ".otherArchives", join(
-                    mailingList.getOtherArchives() ) );
+                versionNode.setProperty( "mailingList." + i + ".otherArchives",
+                                         join( mailingList.getOtherArchives() ) );
                 i++;
             }
 
@@ -368,7 +369,7 @@ public class JcrMetadataRepository
         {
             // no need to construct node-by-node here, as we'll find in the next instance, the facet names have / and
             // are paths themselves
-            Node node = session.getRootNode().getNode( getFacetPath( repositoryId, facetId ) );
+            Node node = getJcrSession().getRootNode().getNode( getFacetPath( repositoryId, facetId ) );
 
             // TODO: this is a bit awkward. Might be better to review the purpose of this function - why is the list of
             //   paths helpful?
@@ -409,7 +410,7 @@ public class JcrMetadataRepository
         MetadataFacet metadataFacet = null;
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
             Node node = root.getNode( getFacetPath( repositoryId, facetId, name ) );
 
             MetadataFacetFactory metadataFacetFactory = metadataFacetFactories.get( facetId );
@@ -468,7 +469,7 @@ public class JcrMetadataRepository
     {
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
             String path = getFacetPath( repositoryId, facetId );
             if ( root.hasNode( path ) )
             {
@@ -486,7 +487,7 @@ public class JcrMetadataRepository
     {
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
             String path = getFacetPath( repositoryId, facetId, name );
             if ( root.hasNode( path ) )
             {
@@ -525,8 +526,8 @@ public class JcrMetadataRepository
 
         try
         {
-            Query query = session.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
-            ValueFactory valueFactory = session.getValueFactory();
+            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            ValueFactory valueFactory = getJcrSession().getValueFactory();
             if ( startTime != null )
             {
                 query.bindValue( "start", valueFactory.createValue( createCalendar( startTime ) ) );
@@ -557,7 +558,7 @@ public class JcrMetadataRepository
 
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
             if ( root.hasNode( "repositories" ) )
             {
                 Node node = root.getNode( "repositories" );
@@ -591,8 +592,8 @@ public class JcrMetadataRepository
 
         try
         {
-            Query query = session.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
-            ValueFactory valueFactory = session.getValueFactory();
+            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            ValueFactory valueFactory = getJcrSession().getValueFactory();
             query.bindValue( "checksum", valueFactory.createValue( checksum ) );
             QueryResult result = query.execute();
 
@@ -615,7 +616,7 @@ public class JcrMetadataRepository
     {
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
             String path = getArtifactPath( repositoryId, namespace, projectId, projectVersion, id );
             if ( root.hasNode( path ) )
             {
@@ -633,7 +634,7 @@ public class JcrMetadataRepository
     {
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
             String path = getRepositoryPath( repositoryId );
             if ( root.hasNode( path ) )
             {
@@ -655,7 +656,7 @@ public class JcrMetadataRepository
 
         try
         {
-            Query query = session.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
             QueryResult result = query.execute();
 
             artifacts = new ArrayList<ArtifactMetadata>();
@@ -687,7 +688,7 @@ public class JcrMetadataRepository
 
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
 
             // basically just checking it exists
             String path = getProjectPath( repositoryId, namespace, projectId );
@@ -714,7 +715,7 @@ public class JcrMetadataRepository
 
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
 
             String path = getProjectVersionPath( repositoryId, namespace, projectId, projectVersion );
             if ( !root.hasNode( path ) )
@@ -729,8 +730,8 @@ public class JcrMetadataRepository
             versionMetadata.setName( getPropertyString( node, "name" ) );
             versionMetadata.setDescription( getPropertyString( node, "description" ) );
             versionMetadata.setUrl( getPropertyString( node, "url" ) );
-            versionMetadata.setIncomplete( node.hasProperty( "incomplete" ) && node.getProperty(
-                "incomplete" ).getBoolean() );
+            versionMetadata.setIncomplete(
+                node.hasProperty( "incomplete" ) && node.getProperty( "incomplete" ).getBoolean() );
 
             // FIXME: decide how to treat these in the content repo
             String scmConnection = getPropertyString( node, "scm.connection" );
@@ -892,7 +893,7 @@ public class JcrMetadataRepository
 
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
 
             Node node = root.getNode( getProjectVersionPath( repositoryId, namespace, projectId, projectVersion ) );
 
@@ -928,7 +929,7 @@ public class JcrMetadataRepository
         }
         try
         {
-            Query query = session.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
             QueryResult result = query.execute();
 
             for ( Node n : JcrUtils.getNodes( result ) )
@@ -996,7 +997,7 @@ public class JcrMetadataRepository
 
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
             String path = getProjectVersionPath( repositoryId, namespace, projectId, projectVersion );
 
             if ( root.hasNode( path ) )
@@ -1024,7 +1025,7 @@ public class JcrMetadataRepository
     {
         try
         {
-            session.save();
+            getJcrSession().save();
         }
         catch ( RepositoryException e )
         {
@@ -1036,7 +1037,7 @@ public class JcrMetadataRepository
     {
         try
         {
-            session.refresh( false );
+            getJcrSession().refresh( false );
         }
         catch ( RepositoryException e )
         {
@@ -1050,18 +1051,39 @@ public class JcrMetadataRepository
     }
 
     public Object obtainAccess( Class<?> aClass )
+        throws MetadataRepositoryException
     {
         if ( aClass == Session.class )
         {
-            return session;
+            try
+            {
+                return getJcrSession();
+            }
+            catch ( RepositoryException e )
+            {
+                log.error( e.getMessage(), e );
+                throw new MetadataRepositoryException( e.getMessage(), e );
+            }
         }
         throw new IllegalArgumentException(
             "Access using " + aClass + " is not supported on the JCR metadata storage" );
     }
 
     public void close()
+        throws MetadataRepositoryException
     {
-        session.logout();
+        try
+        {
+            if ( getJcrSession().isLive() )
+            {
+                getJcrSession().logout();
+            }
+        }
+        catch ( RepositoryException e )
+        {
+            log.error( e.getMessage(), e );
+            throw new MetadataRepositoryException( e.getMessage(), e );
+        }
     }
 
     private ArtifactMetadata getArtifactFromNode( String repositoryId, Node artifactNode )
@@ -1152,7 +1174,7 @@ public class JcrMetadataRepository
 
         try
         {
-            Node root = session.getRootNode();
+            Node root = getJcrSession().getRootNode();
 
             Node nodeAtPath = root.getNode( path );
 
@@ -1242,7 +1264,7 @@ public class JcrMetadataRepository
     private Node getOrAddRepositoryNode( String repositoryId )
         throws RepositoryException
     {
-        Node root = session.getRootNode();
+        Node root = getJcrSession().getRootNode();
         Node node = JcrUtils.getOrAddNode( root, "repositories" );
         node = JcrUtils.getOrAddNode( node, repositoryId );
         return node;
@@ -1314,7 +1336,14 @@ public class JcrMetadataRepository
     }
 
     public Session getJcrSession()
+        throws RepositoryException
     {
-        return session;
+        if ( this.jcrSession == null || !this.jcrSession.isLive() )
+        {
+
+            jcrSession = repository.login( new SimpleCredentials( "admin", "admin".toCharArray() ) );
+
+        }
+        return this.jcrSession;
     }
 }
index 7c7f4586156cb037466b5226a8e9f87ce4b472bc..5f9fde8e5bd467e102489ba59ce4efd15690ecc4 100644 (file)
@@ -85,6 +85,7 @@ public class JcrRepositorySessionFactory
 
     @PostConstruct
     public void initialize()
+        throws Exception
     {
         metadataFacetFactories = applicationContext.getBeansOfType( MetadataFacetFactory.class );
         // olamy with spring the "id" is now "metadataFacetFactory#hint"
index 3b4917390a20f50cd525d14c4cf8d11a9d044ed9..648e06addbee15626e9ca54c5b831c855fd5c558 100644 (file)
@@ -181,6 +181,7 @@ public class DuplicateArtifactsConsumer
         }
         catch ( MetadataRepositoryException e )
         {
+            repositorySession.close();
             throw new ConsumerException( e.getMessage(), e );
         }