/** {@inheritDoc} */ public Endpoint publish( final ServiceDomain domain, final String context, final List<Object> instances, final Map<String, String> contextParams) throws Exception { if (LOGGER.isTraceEnabled()) { LOGGER.trace( "Publishing StandaloneResource: context=" + context + ", resources=" + instances + ", contextParams=" + contextParams); } List<Object> resourceInstances = new ArrayList<Object>(); String path = _contextBuilder.getPath(); if (path.startsWith("/")) { path = path.substring(1); } if (path.equals(context)) { _contextBuilder.cleanup(); try { _httpServer.removeContext(_contextBuilder.getPath()); } catch (IllegalArgumentException iae) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("", iae); } } resourceInstances = _contextBuilder.getDeployment().getResources(); _contextBuilder.getDeployment().getDefaultContextObjects().clear(); } // Add as singleton instance for (Object instance : instances) { resourceInstances.add(instance); } _contextBuilder.getDeployment().setResources(resourceInstances); // Register @Provider classes final List<String> providers = RESTEasyUtil.getParamValues(contextParams, ResteasyContextParameters.RESTEASY_PROVIDERS); _contextBuilder .getDeployment() .setScannedProviderClasses(providers != null ? providers : Collections.<String>emptyList()); _contextBuilder.setPath(context); if (LOGGER.isTraceEnabled()) { LOGGER.trace( "Published StandaloneResource - Refreshing Sun HTTP Server: context=" + context + ", resources=" + resourceInstances + ", providers=" + providers); } _contextBuilder.bind(_httpServer); return new StandaloneResource( new StandaloneResource.Callback() { @Override public void onStart() { if (LOGGER.isTraceEnabled()) { LOGGER.trace( "Starting StandaloneResource: context=" + context + ", resources=" + instances + ", providers=" + providers); } } @Override public void onStop() { if (LOGGER.isTraceEnabled()) { LOGGER.trace( "Stopping StandaloneResource: context=" + context + ", resouces=" + instances + ", providers=" + providers); } List<Object> resources = new ArrayList<Object>(_contextBuilder.getDeployment().getResources()); List<String> scannedProviderClasses = new ArrayList<String>(_contextBuilder.getDeployment().getScannedProviderClasses()); String path = _contextBuilder.getPath(); if (path.startsWith("/")) { path = path.substring(1); } if (path.equals(context)) { _contextBuilder.cleanup(); try { _httpServer.removeContext(_contextBuilder.getPath()); } catch (IllegalArgumentException iae) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("", iae); } _contextBuilder.getDeployment().getDefaultContextObjects().clear(); } } for (int i = 0; instances != null && i < instances.size(); i++) { if (instances.get(i) != null) { if (LOGGER.isTraceEnabled()) { LOGGER.trace("Removing RESTEasy Resource: " + instances.get(i)); } resources.remove(instances.get(i)); } } _contextBuilder.getDeployment().setResources(resources); for (int i = 0; providers != null && i < providers.size(); i++) { if (providers.get(i) != null) { scannedProviderClasses.remove(providers.get(i)); } } _contextBuilder.getDeployment().setScannedProviderClasses(scannedProviderClasses); if (LOGGER.isTraceEnabled()) { LOGGER.trace( "Stopped StandaloneResource - Refreshing Sun HTTP Server: context=" + context + ", resources=" + resources + ", providers=" + scannedProviderClasses); } _contextBuilder.setPath(context); _contextBuilder.bind(_httpServer); } }); }