From: Olivier Lamy Date: Mon, 12 Mar 2012 16:43:41 +0000 (+0000) Subject: managed repositories add link to do a directories scan immediate. X-Git-Tag: archiva-1.4-M3~1048 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5ff0f0ee146a5eaef9b191edca69a21aff457150;p=archiva.git managed repositories add link to do a directories scan immediate. 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 --- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java index c747d73f6..7d8ea76a7 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java @@ -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; diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java index 5ce90875b..df6a28744 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java @@ -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; diff --git a/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties b/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties index 1c43eb746..255f1cc59 100644 --- a/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties +++ b/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties @@ -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 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repositories.js b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repositories.js index 0a0e09e4c..8c386d523 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repositories.js +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/repositories.js @@ -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 diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/repositories.html b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/repositories.html index 4efb24d78..104453edd 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/repositories.html +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/repositories.html @@ -86,12 +86,13 @@ {{/each}} Releases Snapshots - Scan + ${$.i18n.prop('managedrepository.scan.grid.header')} ${$.i18n.prop('edit')} ${$.i18n.prop('delete')} ${$.i18n.prop('modified')} ${$.i18n.prop('managedrepository.pomsnippet')} - Stats + ${$.i18n.prop('managedrepository.stats.grid.header')} + ${$.i18n.prop('managedrepository.scan.directories.grid.header')} @@ -143,6 +144,9 @@ data-bind="event: { mouseover: function(){ showStats(row) }, mouseout: function(){ hideStats(row) },}" id="managedrepository-stats-img-${row.id()}"/> + + Scan directories + {{/each}} diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java index 4d484f51e..4ab65c642 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java @@ -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; } diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java index 31bc88435..f861ac0d9 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java +++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java @@ -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; diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java index 24b9632f5..2665e8679 100644 --- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java +++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java @@ -93,7 +93,7 @@ public class JcrMetadataRepository private Repository repository; - private Session session; + private Session jcrSession; public JcrMetadataRepository( Map 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(); @@ -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; } } diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java index 7c7f45861..5f9fde8e5 100644 --- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java +++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java @@ -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" diff --git a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java index 3b4917390..648e06add 100644 --- a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java +++ b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java @@ -181,6 +181,7 @@ public class DuplicateArtifactsConsumer } catch ( MetadataRepositoryException e ) { + repositorySession.close(); throw new ConsumerException( e.getMessage(), e ); }