public synchronized void startJettyIfNecessary()

in taverna-interaction-activity/src/main/java/org/apache/taverna/activities/interaction/jetty/InteractionJetty.java [72:160]


	public synchronized void startJettyIfNecessary(CredentialManager credentialManager) {
		if (server != null) {
			return;
		}
		
//		final ClassLoader previousContextClassLoader = Thread.currentThread()
//				.getContextClassLoader();
//		Thread.currentThread().setContextClassLoader(
//				InteractionJetty.class.getClassLoader());

		final String port = interactionPreference.getPort();

		server = new Server(Integer.parseInt(port));
		server.setStopAtShutdown(true);

		final WebdavServlet interactionServlet = new WebdavServlet();

		final ServletHolder interactionHolder = new ServletHolder();
		interactionHolder.setServlet(interactionServlet);

		try {

			interactionHolder.setInitParameter("rootpath",
					getInteractionDirectory().getCanonicalPath());
		} catch (final IOException e1) {
			logger.error("Unable to set root of interaction", e1);
		}

		final HandlerList handlers = new HandlerList();
		final Context overallContext = new Context(handlers, "/",
				Context.SESSIONS);
		overallContext.setContextPath("/");
		server.setHandler(overallContext);

		final AbderaServlet abderaServlet = new AbderaServlet();
		final ServletHolder abderaHolder = new ServletHolder(abderaServlet);
		abderaHolder.setInitParameter(ServiceManager.PROVIDER,
				BasicProvider.class.getName());

		overallContext.addServlet(abderaHolder, "/*");
		overallContext.addServlet(interactionHolder, "/interaction/*");

		if (interactionPreference.getUseUsername()) {
			final Constraint constraint = new Constraint();
			constraint.setName(Constraint.__BASIC_AUTH);

			constraint.setRoles(new String[] { "user", "admin", "moderator" });
			constraint.setAuthenticate(true);

			final ConstraintMapping cm = new ConstraintMapping();
			cm.setConstraint(constraint);
			cm.setPathSpec("/*");

			final SecurityHandler sh = new SecurityHandler();
			try {
				final HashUserRealm realm = new HashUserRealm(REALM_NAME);
				final URI serviceURI = createServiceURI(port);
				final UsernamePassword up = credentialManager
						.getUsernameAndPasswordForService(serviceURI, true,
								"Please specify the username and password to secure your interactions");
				if (up != null) {
					final String username = up.getUsername();
					realm.put(username, up.getPasswordAsString());
					realm.addUserToRole(username, "user");
				}
				sh.setUserRealm(realm);
			} catch (final CMException e) {
				logger.error(e);
			} catch (final URISyntaxException e) {
				logger.error(e);
			}
			sh.setConstraintMappings(new ConstraintMapping[] { cm });
			overallContext.addHandler(sh);

		}

		getFeedDirectory();

		try {
			server.start();
			while (!server.isRunning()) {
				Thread.sleep(5000);
			}
		} catch (final Exception e) {
			logger.error("Unable to start Jetty");
		}
//		Thread.currentThread()
//				.setContextClassLoader(previousContextClassLoader);
	}