@Test(expected = InternalErrorException.class) public void testDeployConfJvmNotStopped() throws IOException { reset(Config.jvmPersistenceService, Config.applicationPersistenceService, Config.mockResourceService); Jvm mockJvm = mock(Jvm.class); when(mockJvm.getState()).thenReturn(JvmState.JVM_STARTED); when(Config.jvmPersistenceService.findJvmByExactName(anyString())).thenReturn(mockJvm); when(Config.jvmPersistenceService.findJvm(anyString(), anyString())).thenReturn(mockJvm); when(Config.applicationPersistenceService.findApplication(anyString(), anyString(), anyString())).thenReturn(Config.mockApplication); when(Config.applicationPersistenceService.getResourceTemplate(anyString(), anyString(), anyString(), anyString())).thenReturn("IGNORED CONTENT"); ResourceTemplateMetaData mockMetaData = mock(ResourceTemplateMetaData.class); when(mockMetaData.isHotDeploy()).thenReturn(false); when(Config.mockResourceService.getResourceContent(any(ResourceIdentifier.class))).thenReturn(new ResourceContent("{\"test\":\"meta data\"}", "test resource content")); when(Config.mockResourceService.getTokenizedMetaData(anyString(), anyObject(), anyString())).thenReturn(mockMetaData); applicationService.deployConf("testApp", "testGroup", "testJvm", "HttpSslConfTemplate.tpl", mock(ResourceGroup.class), testUser); verify(Config.mockResourceService, never()).generateAndDeployFile(any(ResourceIdentifier.class), anyString(), anyString(), anyString()); }
@Override @Transactional public CommandOutput deployConf(final String appName, final String groupName, final String jvmName, final String resourceTemplateName, ResourceGroup resourceGroup, User user) { String lockKey = generateKey(groupName, jvmName, appName, resourceTemplateName); try { binaryDistributionLockManager.writeLock(lockKey); ResourceIdentifier resourceIdentifier = new ResourceIdentifier.Builder() .setResourceName(resourceTemplateName) .setGroupName(groupName) .setWebAppName(appName) .setJvmName(jvmName) .build(); final Jvm jvm = jvmPersistenceService.findJvmByExactName(jvmName); checkJvmStateBeforeDeploy(jvm, resourceIdentifier); String hostName = jvm.getHostName(); Group group = groupPersistenceService.getGroup(groupName); historyFacadeService.write(hostName, group, "Deploying application resource " + resourceTemplateName, EventType.USER_ACTION_INFO, user.getId()); return resourceService.generateAndDeployFile(resourceIdentifier, appName + "-" + jvmName, resourceTemplateName, jvm.getHostName()); } catch (ResourceFileGeneratorException e) { LOGGER.error("Fail to generate the resource file {}", resourceTemplateName, e); throw new DeployApplicationConfException(e); } finally { binaryDistributionLockManager.writeUnlock(lockKey); } }
ApplicationServiceImpl implements ApplicationService { @Override @Transactional public CommandOutput deployConf(final String appName, final String groupName, final String jvmName, final String resourceTemplateName, ResourceGroup resourceGroup, User user) { String lockKey = generateKey(groupName, jvmName, appName, resourceTemplateName); try { binaryDistributionLockManager.writeLock(lockKey); ResourceIdentifier resourceIdentifier = new ResourceIdentifier.Builder() .setResourceName(resourceTemplateName) .setGroupName(groupName) .setWebAppName(appName) .setJvmName(jvmName) .build(); final Jvm jvm = jvmPersistenceService.findJvmByExactName(jvmName); checkJvmStateBeforeDeploy(jvm, resourceIdentifier); String hostName = jvm.getHostName(); Group group = groupPersistenceService.getGroup(groupName); historyFacadeService.write(hostName, group, "Deploying application resource " + resourceTemplateName, EventType.USER_ACTION_INFO, user.getId()); return resourceService.generateAndDeployFile(resourceIdentifier, appName + "-" + jvmName, resourceTemplateName, jvm.getHostName()); } catch (ResourceFileGeneratorException e) { LOGGER.error("Fail to generate the resource file {}", resourceTemplateName, e); throw new DeployApplicationConfException(e); } finally { binaryDistributionLockManager.writeUnlock(lockKey); } } }
ApplicationServiceImpl implements ApplicationService { @Override @Transactional public CommandOutput deployConf(final String appName, final String groupName, final String jvmName, final String resourceTemplateName, ResourceGroup resourceGroup, User user) { String lockKey = generateKey(groupName, jvmName, appName, resourceTemplateName); try { binaryDistributionLockManager.writeLock(lockKey); ResourceIdentifier resourceIdentifier = new ResourceIdentifier.Builder() .setResourceName(resourceTemplateName) .setGroupName(groupName) .setWebAppName(appName) .setJvmName(jvmName) .build(); final Jvm jvm = jvmPersistenceService.findJvmByExactName(jvmName); checkJvmStateBeforeDeploy(jvm, resourceIdentifier); String hostName = jvm.getHostName(); Group group = groupPersistenceService.getGroup(groupName); historyFacadeService.write(hostName, group, "Deploying application resource " + resourceTemplateName, EventType.USER_ACTION_INFO, user.getId()); return resourceService.generateAndDeployFile(resourceIdentifier, appName + "-" + jvmName, resourceTemplateName, jvm.getHostName()); } catch (ResourceFileGeneratorException e) { LOGGER.error("Fail to generate the resource file {}", resourceTemplateName, e); throw new DeployApplicationConfException(e); } finally { binaryDistributionLockManager.writeUnlock(lockKey); } } ApplicationServiceImpl(final ApplicationPersistenceService applicationPersistenceService,
                                  final JvmPersistenceService jvmPersistenceService,
                                  final GroupPersistenceService groupPersistenceService,
                                  final ResourceService resourceService,
                                  final BinaryDistributionService binaryDistributionService,
                                  final HistoryFacadeService historyFacadeService,
                                  final BinaryDistributionLockManager binaryDistributionLockManager); }
ApplicationServiceImpl implements ApplicationService { @Override @Transactional public CommandOutput deployConf(final String appName, final String groupName, final String jvmName, final String resourceTemplateName, ResourceGroup resourceGroup, User user) { String lockKey = generateKey(groupName, jvmName, appName, resourceTemplateName); try { binaryDistributionLockManager.writeLock(lockKey); ResourceIdentifier resourceIdentifier = new ResourceIdentifier.Builder() .setResourceName(resourceTemplateName) .setGroupName(groupName) .setWebAppName(appName) .setJvmName(jvmName) .build(); final Jvm jvm = jvmPersistenceService.findJvmByExactName(jvmName); checkJvmStateBeforeDeploy(jvm, resourceIdentifier); String hostName = jvm.getHostName(); Group group = groupPersistenceService.getGroup(groupName); historyFacadeService.write(hostName, group, "Deploying application resource " + resourceTemplateName, EventType.USER_ACTION_INFO, user.getId()); return resourceService.generateAndDeployFile(resourceIdentifier, appName + "-" + jvmName, resourceTemplateName, jvm.getHostName()); } catch (ResourceFileGeneratorException e) { LOGGER.error("Fail to generate the resource file {}", resourceTemplateName, e); throw new DeployApplicationConfException(e); } finally { binaryDistributionLockManager.writeUnlock(lockKey); } } ApplicationServiceImpl(final ApplicationPersistenceService applicationPersistenceService,
                                  final JvmPersistenceService jvmPersistenceService,
                                  final GroupPersistenceService groupPersistenceService,
                                  final ResourceService resourceService,
                                  final BinaryDistributionService binaryDistributionService,
                                  final HistoryFacadeService historyFacadeService,
                                  final BinaryDistributionLockManager binaryDistributionLockManager); @Transactional(readOnly = true) @Override Application getApplication(Identifier<Application> aApplicationId); @Transactional(readOnly = true) @Override Application getApplication(final String name); @Transactional(readOnly = true) @Override List<Application> getApplications(); @Transactional(readOnly = true) @Override List<Application> findApplications(Identifier<Group> groupId); @Transactional(readOnly = true) @Override List<Application> findApplicationsByJvmId(Identifier<Jvm> jvmId); @Transactional @Override Application updateApplication(UpdateApplicationRequest updateApplicationRequest, User anUpdatingUser); @Transactional @Override Application createApplication(final CreateApplicationRequest createApplicationRequest,
                                         final User aCreatingUser); @Transactional @Override void removeApplication(Identifier<Application> anAppIdToRemove, User user); @Override @Transactional(readOnly = true) List<String> getResourceTemplateNames(final String appName, final String jvmName); @Override @Transactional String updateResourceTemplate(final String appName, final String resourceTemplateName, final String template, final String jvmName, final String groupName); @Override @Transactional // TODO: Have an option to do a hot deploy or not. CommandOutput deployConf(final String appName, final String groupName, final String jvmName,
                                    final String resourceTemplateName, ResourceGroup resourceGroup, User user); @Override @Transactional JpaApplicationConfigTemplate uploadAppTemplate(UploadAppTemplateRequest uploadAppTemplateRequest); @Override @Transactional String previewResourceTemplate(String fileName, String appName, String groupName, String jvmName, String template, ResourceGroup resourceGroup); @Override @Transactional void copyApplicationWarToGroupHosts(Application application); @Override void deployApplicationResourcesToGroupHosts(String groupName, Application app, ResourceGroup resourceGroup); @Override @Transactional void copyApplicationWarToHost(Application application, String hostName); @Override void deployConf(final String appName, final String hostName, final User user); }
ApplicationServiceImpl implements ApplicationService { @Override @Transactional public CommandOutput deployConf(final String appName, final String groupName, final String jvmName, final String resourceTemplateName, ResourceGroup resourceGroup, User user) { String lockKey = generateKey(groupName, jvmName, appName, resourceTemplateName); try { binaryDistributionLockManager.writeLock(lockKey); ResourceIdentifier resourceIdentifier = new ResourceIdentifier.Builder() .setResourceName(resourceTemplateName) .setGroupName(groupName) .setWebAppName(appName) .setJvmName(jvmName) .build(); final Jvm jvm = jvmPersistenceService.findJvmByExactName(jvmName); checkJvmStateBeforeDeploy(jvm, resourceIdentifier); String hostName = jvm.getHostName(); Group group = groupPersistenceService.getGroup(groupName); historyFacadeService.write(hostName, group, "Deploying application resource " + resourceTemplateName, EventType.USER_ACTION_INFO, user.getId()); return resourceService.generateAndDeployFile(resourceIdentifier, appName + "-" + jvmName, resourceTemplateName, jvm.getHostName()); } catch (ResourceFileGeneratorException e) { LOGGER.error("Fail to generate the resource file {}", resourceTemplateName, e); throw new DeployApplicationConfException(e); } finally { binaryDistributionLockManager.writeUnlock(lockKey); } } ApplicationServiceImpl(final ApplicationPersistenceService applicationPersistenceService,
                                  final JvmPersistenceService jvmPersistenceService,
                                  final GroupPersistenceService groupPersistenceService,
                                  final ResourceService resourceService,
                                  final BinaryDistributionService binaryDistributionService,
                                  final HistoryFacadeService historyFacadeService,
                                  final BinaryDistributionLockManager binaryDistributionLockManager); @Transactional(readOnly = true) @Override Application getApplication(Identifier<Application> aApplicationId); @Transactional(readOnly = true) @Override Application getApplication(final String name); @Transactional(readOnly = true) @Override List<Application> getApplications(); @Transactional(readOnly = true) @Override List<Application> findApplications(Identifier<Group> groupId); @Transactional(readOnly = true) @Override List<Application> findApplicationsByJvmId(Identifier<Jvm> jvmId); @Transactional @Override Application updateApplication(UpdateApplicationRequest updateApplicationRequest, User anUpdatingUser); @Transactional @Override Application createApplication(final CreateApplicationRequest createApplicationRequest,
                                         final User aCreatingUser); @Transactional @Override void removeApplication(Identifier<Application> anAppIdToRemove, User user); @Override @Transactional(readOnly = true) List<String> getResourceTemplateNames(final String appName, final String jvmName); @Override @Transactional String updateResourceTemplate(final String appName, final String resourceTemplateName, final String template, final String jvmName, final String groupName); @Override @Transactional // TODO: Have an option to do a hot deploy or not. CommandOutput deployConf(final String appName, final String groupName, final String jvmName,
                                    final String resourceTemplateName, ResourceGroup resourceGroup, User user); @Override @Transactional JpaApplicationConfigTemplate uploadAppTemplate(UploadAppTemplateRequest uploadAppTemplateRequest); @Override @Transactional String previewResourceTemplate(String fileName, String appName, String groupName, String jvmName, String template, ResourceGroup resourceGroup); @Override @Transactional void copyApplicationWarToGroupHosts(Application application); @Override void deployApplicationResourcesToGroupHosts(String groupName, Application app, ResourceGroup resourceGroup); @Override @Transactional void copyApplicationWarToHost(Application application, String hostName); @Override void deployConf(final String appName, final String hostName, final User user);  }