Merged branch 'jetty-9.2.x' into 'master'.
This commit is contained in:
commit
379f9f6c43
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.annotations;
|
|||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
|
@ -726,7 +727,15 @@ public class AnnotationConfiguration extends AbstractConfiguration
|
|||
public Resource getJarFor (ServletContainerInitializer service)
|
||||
throws MalformedURLException, IOException
|
||||
{
|
||||
String loadingJarName = Thread.currentThread().getContextClassLoader().getResource(service.getClass().getName().replace('.','/')+".class").toString();
|
||||
//try the thread context classloader to get the jar that loaded the class
|
||||
URL jarURL = Thread.currentThread().getContextClassLoader().getResource(service.getClass().getName().replace('.','/')+".class");
|
||||
|
||||
//if for some reason that failed (eg we're in osgi and the TCCL does not know about the service) try the classloader that
|
||||
//loaded the class
|
||||
if (jarURL == null)
|
||||
jarURL = service.getClass().getClassLoader().getResource(service.getClass().getName().replace('.','/')+".class");
|
||||
|
||||
String loadingJarName = jarURL.toString();
|
||||
|
||||
int i = loadingJarName.indexOf(".jar");
|
||||
if (i < 0)
|
||||
|
@ -830,7 +839,6 @@ public class AnnotationConfiguration extends AbstractConfiguration
|
|||
{
|
||||
ArrayList<ServletContainerInitializer> nonExcludedInitializers = new ArrayList<ServletContainerInitializer>();
|
||||
|
||||
|
||||
//We use the ServiceLoader mechanism to find the ServletContainerInitializer classes to inspect
|
||||
long start = 0;
|
||||
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
<!-- ======================================================================== -->
|
||||
<!-- Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd. -->
|
||||
<!-- -->
|
||||
<!-- All rights reserved. This program and the accompanying materials -->
|
||||
<!-- are made available under the terms of the Eclipse Public License v1.0 -->
|
||||
<!-- and Apache License v2.0 which accompanies this distribution. -->
|
||||
<!-- -->
|
||||
<!-- The Eclipse Public License is available at -->
|
||||
<!-- http://www.eclipse.org/legal/epl-v10.html -->
|
||||
<!-- -->
|
||||
<!-- The Apache License v2.0 is available at -->
|
||||
<!-- http://www.opensource.org/licenses/apache2.0.php -->
|
||||
<!-- -->
|
||||
<!-- You may elect to redistribute this code under either of these licenses. -->
|
||||
<!-- ======================================================================== -->
|
||||
|
||||
<lifecycleMappingMetadata>
|
||||
<pluginExecutions>
|
||||
<pluginExecution>
|
||||
<pluginExecutionFilter>
|
||||
<goals>
|
||||
<goal>jspc</goal>
|
||||
</goals>
|
||||
</pluginExecutionFilter>
|
||||
<action>
|
||||
<ignore />
|
||||
</action>
|
||||
</pluginExecution>
|
||||
</pluginExecutions>
|
||||
</lifecycleMappingMetadata>
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.osgi.boot;
|
|||
import org.eclipse.jetty.deploy.App;
|
||||
import org.eclipse.jetty.deploy.bindings.StandardDeployer;
|
||||
import org.eclipse.jetty.deploy.graph.Node;
|
||||
import org.eclipse.jetty.osgi.boot.internal.serverfactory.ServerInstanceWrapper;
|
||||
import org.eclipse.jetty.osgi.boot.utils.EventSender;
|
||||
|
||||
|
||||
|
@ -34,6 +35,15 @@ import org.eclipse.jetty.osgi.boot.utils.EventSender;
|
|||
public class OSGiDeployer extends StandardDeployer
|
||||
{
|
||||
|
||||
private ServerInstanceWrapper _server;
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
public OSGiDeployer (ServerInstanceWrapper server)
|
||||
{
|
||||
_server = server;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
public void processBinding(Node node, App app) throws Exception
|
||||
{
|
||||
|
@ -41,14 +51,14 @@ public class OSGiDeployer extends StandardDeployer
|
|||
//OSGi Enterprise Spec only wants an event sent if its a webapp bundle (ie not a ContextHandler)
|
||||
if (!(app instanceof AbstractOSGiApp))
|
||||
{
|
||||
super.processBinding(node,app);
|
||||
doProcessBinding(node,app);
|
||||
}
|
||||
else
|
||||
{
|
||||
EventSender.getInstance().send(EventSender.DEPLOYING_EVENT, ((AbstractOSGiApp)app).getBundle(), app.getContextPath());
|
||||
try
|
||||
{
|
||||
super.processBinding(node,app);
|
||||
doProcessBinding(node,app);
|
||||
((AbstractOSGiApp)app).registerAsOSGiService();
|
||||
EventSender.getInstance().send(EventSender.DEPLOYED_EVENT, ((AbstractOSGiApp)app).getBundle(), app.getContextPath());
|
||||
}
|
||||
|
@ -58,6 +68,21 @@ public class OSGiDeployer extends StandardDeployer
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
protected void doProcessBinding (Node node, App app) throws Exception
|
||||
{
|
||||
ClassLoader old = Thread.currentThread().getContextClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(_server.getParentClassLoaderForWebapps());
|
||||
try
|
||||
{
|
||||
super.processBinding(node,app);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Thread.currentThread().setContextClassLoader(old);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.osgi.boot;
|
|||
import org.eclipse.jetty.deploy.App;
|
||||
import org.eclipse.jetty.deploy.bindings.StandardUndeployer;
|
||||
import org.eclipse.jetty.deploy.graph.Node;
|
||||
import org.eclipse.jetty.osgi.boot.internal.serverfactory.ServerInstanceWrapper;
|
||||
import org.eclipse.jetty.osgi.boot.utils.EventSender;
|
||||
|
||||
|
||||
|
@ -35,11 +36,30 @@ import org.eclipse.jetty.osgi.boot.utils.EventSender;
|
|||
*/
|
||||
public class OSGiUndeployer extends StandardUndeployer
|
||||
{
|
||||
private ServerInstanceWrapper _server;
|
||||
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
public OSGiUndeployer (ServerInstanceWrapper server)
|
||||
{
|
||||
_server = server;
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
public void processBinding(Node node, App app) throws Exception
|
||||
{
|
||||
EventSender.getInstance().send(EventSender.UNDEPLOYING_EVENT, ((AbstractOSGiApp)app).getBundle(), app.getContextPath());
|
||||
super.processBinding(node,app);
|
||||
ClassLoader old = Thread.currentThread().getContextClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(_server.getParentClassLoaderForWebapps());
|
||||
try
|
||||
{
|
||||
super.processBinding(node,app);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Thread.currentThread().setContextClassLoader(old);
|
||||
}
|
||||
EventSender.getInstance().send(EventSender.UNDEPLOYED_EVENT, ((AbstractOSGiApp)app).getBundle(), app.getContextPath());
|
||||
((AbstractOSGiApp)app).deregisterAsOSGiService();
|
||||
}
|
||||
|
|
|
@ -376,10 +376,10 @@ public class ServerInstanceWrapper
|
|||
|
||||
_deploymentManager.setUseStandardBindings(false);
|
||||
List<AppLifeCycle.Binding> deploymentLifeCycleBindings = new ArrayList<AppLifeCycle.Binding>();
|
||||
deploymentLifeCycleBindings.add(new OSGiDeployer());
|
||||
deploymentLifeCycleBindings.add(new OSGiDeployer(this));
|
||||
deploymentLifeCycleBindings.add(new StandardStarter());
|
||||
deploymentLifeCycleBindings.add(new StandardStopper());
|
||||
deploymentLifeCycleBindings.add(new OSGiUndeployer());
|
||||
deploymentLifeCycleBindings.add(new OSGiUndeployer(this));
|
||||
_deploymentManager.setLifeCycleBindings(deploymentLifeCycleBindings);
|
||||
|
||||
if (!providerClassNames.contains(BundleWebAppProvider.class.getName()))
|
||||
|
|
|
@ -185,26 +185,20 @@ public class EnvConfiguration extends AbstractConfiguration
|
|||
@Override
|
||||
public void destroy (WebAppContext context) throws Exception
|
||||
{
|
||||
ClassLoader old_loader = Thread.currentThread().getContextClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(context.getClassLoader());
|
||||
ContextFactory.associateClassLoader(context.getClassLoader());
|
||||
|
||||
try
|
||||
{
|
||||
//unbind any NamingEntries that were configured in this webapp's name space
|
||||
|
||||
//unbind any NamingEntries that were configured in this webapp's name space
|
||||
NamingContext scopeContext = (NamingContext)NamingEntryUtil.getContextForScope(context);
|
||||
scopeContext.getParent().destroySubcontext(scopeContext.getName());
|
||||
}
|
||||
catch (NameNotFoundException e)
|
||||
{
|
||||
LOG.ignore(e);
|
||||
LOG.debug("No naming entries configured in environment for webapp "+context);
|
||||
LOG.debug("No jndi entries scoped to webapp {}", context);
|
||||
}
|
||||
finally
|
||||
catch (NamingException e)
|
||||
{
|
||||
ContextFactory.disassociateClassLoader();
|
||||
Thread.currentThread().setContextClassLoader(old_loader);
|
||||
LOG.debug("Error unbinding jndi entries scoped to webapp "+context, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -268,7 +268,7 @@ public class SslContextFactory extends AbstractLifeCycle
|
|||
}
|
||||
|
||||
SecureRandom secureRandom = (_secureRandomAlgorithm == null)?null:SecureRandom.getInstance(_secureRandomAlgorithm);
|
||||
SSLContext context = SSLContext.getInstance(_sslProtocol);
|
||||
SSLContext context = _sslProvider == null ? SSLContext.getInstance(_sslProtocol) : SSLContext.getInstance(_sslProtocol, _sslProvider);
|
||||
context.init(null, trust_managers, secureRandom);
|
||||
_context = context;
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ public class SslContextFactory extends AbstractLifeCycle
|
|||
TrustManager[] trustManagers = getTrustManagers(trustStore,crls);
|
||||
|
||||
SecureRandom secureRandom = (_secureRandomAlgorithm == null)?null:SecureRandom.getInstance(_secureRandomAlgorithm);
|
||||
SSLContext context = _sslProvider == null ? SSLContext.getInstance(_sslProtocol) : SSLContext.getInstance(_sslProtocol,_sslProvider);
|
||||
SSLContext context = _sslProvider == null ? SSLContext.getInstance(_sslProtocol) : SSLContext.getInstance(_sslProtocol, _sslProvider);
|
||||
context.init(keyManagers,trustManagers,secureRandom);
|
||||
_context = context;
|
||||
}
|
||||
|
|
|
@ -405,6 +405,15 @@ public class QueuedThreadPool extends AbstractLifeCycle implements SizedThreadPo
|
|||
return _threadsIdle.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The number of busy threads in the pool
|
||||
*/
|
||||
@ManagedAttribute("total number of busy threads in the pool")
|
||||
public int getBusyThreads()
|
||||
{
|
||||
return getThreads() - getIdleThreads();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return True if the pool is at maxThreads and there are not more idle threads than queued jobs
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue