2016-10-11 8 views
1

Ich möchte auf ein Artefakt zugreifen (zip-Datei mit einer Lieferung) auf einen Sonaytype Nexus 2.14.0-01 hochgeladen, um es in einem tmp-Verzeichnis zu entpacken und seinen Inhalt zu untersuchen.Zugang Sonatype Nexus Artefakt von Nexus Plugin nach dem Upload

Ich bin in der Lage, in die on-Handle-Anfrage für die Erstellungsaktion einzubinden, aber zu diesem Zeitpunkt ist das Artefakt noch nicht in das Repository hochgeladen.

public void onHandle(Repository repository, ResourceStoreRequest resourceStoreRequest, Action action) throws ItemNotFoundException, IllegalOperationException 
{ 
    log.info("got onHandle Request for " + repository.toString() + " " + action.toString() + " " + resourceStoreRequest.toString()); 
    log.info("that is the file to process: " + resourceStoreRequest.getRequestPath()); 
} 

Log-Einträge:

2016-10-11 18:01:23,760+0200 INFO [qtp1685232414-73] admin DeliveryRequestProcessor - got onHandle Request for M2Repository(id=deliveries) create ResourceStoreRequest{requestPath='/fakepath/configurationmanagement/0.1/configurationmanagement-0.1.zip', requestContext=RequestContext{[email protected], parent=null}, pathStack=[], processedRepositories=[], appliedMappings={}}(GAVCE=fakepath:configurationmanagement:0.1:c=null:e=zip, for "deliveries" [id=deliveries]) 

aber ein Anruf für

repository.getLocalStorage().retrieveItem(repository,resourceStoreRequest) 

versagt (natürlich).

Gibt es einen Hinweis, welcher Hook verwendet werden soll, nachdem eine Datei hochgeladen wurde und verarbeitet werden kann?

Mit freundlichen Grüßen, Eduard

Antwort

0

benutzte ich eine nicht so schöne Abhilfe die benötigte Funktionalität zu implementieren.

In der ursprünglichen Klasse registriere ich einen Listener zum EventBus.

@Named(DeliveryRequestProcessor.ID) 
public class DeliveryRequestProcessor extends ComponentSupport 
    implements RequestStrategy { 

    @Inject 
    public DeliveryRequestProcessor(final EventBus eventBus) 
    { 
     this.eventBus = Preconditions.checkNotNull(eventBus); 
     eventBus.register(new EventBusListener()); 
    } 
} 

Ich habe eine andere Klasse erstellt, die alle Ereignisse abonniert Nexus sendet.

@Named 
@EagerSingleton 
public class EventBusListener 
{ 
    public void onEvent (RepositoryItemEventStoreCreate e) 
    { 
     ... the functionality to access the item 
     e.getItem() // -> that is the Storage Item I was looking for 
    } 
} 

Die Lösung hat einige Nachteile, z.B. Das Ereignis wird mehrmals ausgelöst, und Sie müssen sicherstellen, dass die Verarbeitung nur für einen Fall durchgeführt wird, aber für eine erste Lösung ist es akzeptabel (für mich).

Mit freundlichen Grüßen, Eduard

Verwandte Themen