All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jetty.osgi.AbstractContextProvider Maven / Gradle / Ivy

There is a newer version: 12.1.0.alpha0
Show newest version
//
// ========================================================================
// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
// which is available at https://www.apache.org/licenses/LICENSE-2.0.
//
// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
// ========================================================================
//

package org.eclipse.jetty.osgi;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

import org.eclipse.jetty.deploy.App;
import org.eclipse.jetty.deploy.AppProvider;
import org.eclipse.jetty.deploy.DeploymentManager;
import org.eclipse.jetty.server.Deployable;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.component.AbstractLifeCycle;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * AbstractContextProvider
 *
 * 

* Base class for DeploymentManager Providers that can deploy ContextHandlers into * Jetty that have been discovered via OSGI either as bundles or services. *

*/ public abstract class AbstractContextProvider extends AbstractLifeCycle implements AppProvider { private static final Logger LOG = LoggerFactory.getLogger(AbstractContextProvider.class); private DeploymentManager _deploymentManager; private Server _server; private ContextFactory _contextFactory; private String _environment; private final Map _properties = new HashMap<>(); public AbstractContextProvider(String environment, Server server, ContextFactory contextFactory) { _environment = Objects.requireNonNull(environment); _server = Objects.requireNonNull(server); _contextFactory = Objects.requireNonNull(contextFactory); } public Server getServer() { return _server; } public Map getProperties() { return _properties; } @Override public ContextHandler createContextHandler(App app) throws Exception { if (app == null) return null; //Create a ContextHandler suitable to deploy in OSGi ContextHandler h = _contextFactory.createContextHandler(this, app); return h; } @Override public void setDeploymentManager(DeploymentManager deploymentManager) { _deploymentManager = deploymentManager; } @Override public String getEnvironmentName() { return _environment; } public DeploymentManager getDeploymentManager() { return _deploymentManager; } /** * Get the extractWars. * This is equivalent to getting the {@link Deployable#EXTRACT_WARS} property. * * @return the extractWars */ public boolean isExtractWars() { return Boolean.parseBoolean(_properties.get(Deployable.EXTRACT_WARS)); } /** * Set the extractWars. * This is equivalent to setting the {@link Deployable#EXTRACT_WARS} property. * * @param extractWars the extractWars to set */ public void setExtractWars(boolean extractWars) { _properties.put(Deployable.EXTRACT_WARS, Boolean.toString(extractWars)); } /** * Get the parentLoaderPriority. * This is equivalent to getting the {@link Deployable#PARENT_LOADER_PRIORITY} property. * * @return the parentLoaderPriority */ public boolean isParentLoaderPriority() { return Boolean.parseBoolean(_properties.get(Deployable.PARENT_LOADER_PRIORITY)); } /** * Set the parentLoaderPriority. * This is equivalent to setting the {@link Deployable#PARENT_LOADER_PRIORITY} property. * * @param parentLoaderPriority the parentLoaderPriority to set */ public void setParentLoaderPriority(boolean parentLoaderPriority) { _properties.put(Deployable.PARENT_LOADER_PRIORITY, Boolean.toString(parentLoaderPriority)); } /** * Get the defaultsDescriptor. * This is equivalent to getting the {@link Deployable#DEFAULTS_DESCRIPTOR} property. * * @return the defaultsDescriptor */ public String getDefaultsDescriptor() { return _properties.get(Deployable.DEFAULTS_DESCRIPTOR); } /** * Set the defaultsDescriptor. * This is equivalent to setting the {@link Deployable#DEFAULTS_DESCRIPTOR} property. * * @param defaultsDescriptor the defaultsDescriptor to set */ public void setDefaultsDescriptor(String defaultsDescriptor) { _properties.put(Deployable.DEFAULTS_DESCRIPTOR, defaultsDescriptor); } /** * This is equivalent to setting the {@link Deployable#CONFIGURATION_CLASSES} property. * @param configurations The configuration class names as a comma separated list */ public void setConfigurationClasses(String configurations) { setConfigurationClasses(StringUtil.isBlank(configurations) ? null : configurations.split(",")); } /** * This is equivalent to setting the {@link Deployable#CONFIGURATION_CLASSES} property. * @param configurations The configuration class names. */ public void setConfigurationClasses(String[] configurations) { _properties.put(Deployable.CONFIGURATION_CLASSES, (configurations == null) ? null : String.join(",", configurations)); } /** * * This is equivalent to getting the {@link Deployable#CONFIGURATION_CLASSES} property. * @return The configuration class names. */ public String[] getConfigurationClasses() { String cc = _properties.get(Deployable.CONFIGURATION_CLASSES); return cc == null ? new String[0] : cc.split(","); } /** * @param tldBundles Comma separated list of bundles that contain tld jars * that should be setup on the context instances created here. */ public void setTldBundles(String tldBundles) { _properties.put(OSGiWebappConstants.REQUIRE_TLD_BUNDLE, tldBundles); } /** * @return The list of bundles that contain tld jars that should be setup on * the contexts create here. */ public String getTldBundles() { return _properties.get(OSGiWebappConstants.REQUIRE_TLD_BUNDLE); } public boolean isDeployable(Bundle bundle) { if (bundle == null) return false; //check environment matches if (getEnvironmentName().equalsIgnoreCase(bundle.getHeaders().get(OSGiWebappConstants.JETTY_ENVIRONMENT))) return true; return false; } public boolean isDeployable(ServiceReference service) { if (service == null) return false; //has it been deployed before? if (!StringUtil.isBlank((String)service.getProperty(OSGiWebappConstants.WATERMARK))) return false; //destined for our environment? if (getEnvironmentName().equalsIgnoreCase((String)service.getProperty(OSGiWebappConstants.JETTY_ENVIRONMENT))) return true; return false; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy