@Override
public void handleTopologyEvent( List<TopologyEvent> events ) {
synchronized ( GatewayServer.this ) {
for( TopologyEvent event : events ) {
Topology topology = event.getTopology();
File deployDir = calculateAbsoluteDeploymentsDir();
if( event.getType().equals( TopologyEvent.Type.DELETED ) ) {
File[] files = deployDir.listFiles( new WarDirFilter( topology.getName() + "\\.war\\.[0-9A-Fa-f]+" ) );
if( files != null ) {
for( File file : files ) {
auditor.audit( Action.UNDEPLOY, topology.getName(), ResourceType.TOPOLOGY, ActionOutcome.UNAVAILABLE );
log.deletingDeployment( file.getAbsolutePath() );
internalUndeploy( topology );
FileUtils.deleteQuietly( file );
}
}
} else {
try {
File warDir = calculateDeploymentDir( topology );
if( !warDir.exists() ) {
auditor.audit( Action.DEPLOY, topology.getName(), ResourceType.TOPOLOGY, ActionOutcome.UNAVAILABLE );
log.deployingTopology( topology.getName(), warDir.getAbsolutePath() );
internalUndeploy( topology ); // KNOX-152
WebArchive war = null;
war = DeploymentFactory.createDeployment( config, topology );
if( !deployDir.exists() ) {
deployDir.mkdirs();
}
File tmp = war.as( ExplodedExporter.class ).exportExploded( deployDir, warDir.getName() + ".tmp" );
tmp.renameTo( warDir );
internalDeploy( topology, warDir );
//log.deployedTopology( topology.getName());
} else {
auditor.audit( Action.REDEPLOY, topology.getName(), ResourceType.TOPOLOGY, ActionOutcome.UNAVAILABLE );
log.redeployingTopology( topology.getName(), warDir.getAbsolutePath() );
internalDeploy( topology, warDir );
//log.redeployedTopology( topology.getName() );
}
} catch( Throwable e ) {
auditor.audit( Action.DEPLOY, topology.getName(), ResourceType.TOPOLOGY, ActionOutcome.FAILURE );
log.failedToDeployTopology( topology.getName(), e );
}
}
}
}
}