Support jetty-eeX-env.xml, as per jetty-eeX-web.xml (#11752)
* Support jetty-eeX-env.xml, as per jetty-eeX-web.xml --------- Co-authored-by: Greg Wilkins <gregw@webtide.com>
This commit is contained in:
parent
312bc340b1
commit
1e0f012f66
|
@ -47,6 +47,8 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(EnvConfiguration.class);
|
private static final Logger LOG = LoggerFactory.getLogger(EnvConfiguration.class);
|
||||||
|
|
||||||
private static final String JETTY_ENV_BINDINGS = "org.eclipse.jetty.jndi.EnvConfiguration";
|
private static final String JETTY_ENV_BINDINGS = "org.eclipse.jetty.jndi.EnvConfiguration";
|
||||||
|
private static final String JETTY_EE10_ENV_XML_FILENAME = "jetty-ee10-env.xml";
|
||||||
|
private static final String JETTY_ENV_XML_FILENAME = "jetty-env.xml";
|
||||||
|
|
||||||
public EnvConfiguration()
|
public EnvConfiguration()
|
||||||
{
|
{
|
||||||
|
@ -69,25 +71,12 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Created java:comp/env for webapp {}", context.getContextPath());
|
LOG.debug("Created java:comp/env for webapp {}", context.getContextPath());
|
||||||
|
|
||||||
//check to see if an explicit file has been set, if not,
|
//check to see if an explicit file has been set
|
||||||
//look in WEB-INF/jetty-env.xml
|
|
||||||
|
|
||||||
Resource jettyEnvXmlResource = (Resource)context.getAttribute(JETTY_ENV_XML);
|
Resource jettyEnvXmlResource = (Resource)context.getAttribute(JETTY_ENV_XML);
|
||||||
if (jettyEnvXmlResource == null)
|
if (jettyEnvXmlResource == null)
|
||||||
{
|
{
|
||||||
//look for a file called WEB-INF/jetty-env.xml
|
//otherwise find jetty-ee10-env.xml or fallback to jetty-env.xml
|
||||||
//and process it if it exists
|
jettyEnvXmlResource = resolveJettyEnvXml(context.getWebInf());
|
||||||
Resource webInf = context.getWebInf();
|
|
||||||
if (webInf != null && webInf.isDirectory())
|
|
||||||
{
|
|
||||||
// TODO: should never return from WEB-INF/lib/foo.jar!/WEB-INF/jetty-env.xml
|
|
||||||
// TODO: should also never return from a META-INF/versions/#/WEB-INF/jetty-env.xml location
|
|
||||||
Resource jettyEnv = webInf.resolve("jetty-env.xml");
|
|
||||||
if (Resources.exists(jettyEnv))
|
|
||||||
{
|
|
||||||
jettyEnvXmlResource = jettyEnv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jettyEnvXmlResource != null)
|
if (jettyEnvXmlResource != null)
|
||||||
|
@ -241,6 +230,40 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a WEB-INF/jetty-ee10-env.xml, falling back to
|
||||||
|
* looking for WEB-INF/jetty-env.xml.
|
||||||
|
*
|
||||||
|
* @param webInf the WEB-INF of the context to search
|
||||||
|
* @return the file if it exists or null otherwise
|
||||||
|
*/
|
||||||
|
private Resource resolveJettyEnvXml(Resource webInf)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (webInf == null || !webInf.isDirectory())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
//try to find jetty-ee10-env.xml
|
||||||
|
Resource xmlResource = webInf.resolve(JETTY_EE10_ENV_XML_FILENAME);
|
||||||
|
if (!Resources.missing(xmlResource))
|
||||||
|
return xmlResource;
|
||||||
|
|
||||||
|
//failing that, look for jetty-env.xml
|
||||||
|
xmlResource = webInf.resolve(JETTY_ENV_XML_FILENAME);
|
||||||
|
if (!Resources.missing(xmlResource))
|
||||||
|
return xmlResource;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Error resolving", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class Dumper extends NamingDump
|
private static class Dumper extends NamingDump
|
||||||
{
|
{
|
||||||
Dumper(ClassLoader loader, String name)
|
Dumper(ClassLoader loader, String name)
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// 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.ee10.plus.webapp;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.ee10.webapp.WebAppContext;
|
||||||
|
import org.eclipse.jetty.plus.jndi.NamingEntryUtil;
|
||||||
|
import org.eclipse.jetty.server.Server;
|
||||||
|
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class EnvConfigurationTest
|
||||||
|
{
|
||||||
|
Server _server;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp()
|
||||||
|
{
|
||||||
|
_server = new Server();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
public void tearDown() throws Exception
|
||||||
|
{
|
||||||
|
if (_server != null)
|
||||||
|
_server.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithOnlyJettyWebXml() throws Exception
|
||||||
|
{
|
||||||
|
Path testWebappDir = MavenTestingUtils.getTargetPath("test-classes/webapp-with-jetty-env-xml");
|
||||||
|
assertTrue(Files.exists(testWebappDir));
|
||||||
|
|
||||||
|
WebAppContext context = new WebAppContext();
|
||||||
|
context.setContextPath("/");
|
||||||
|
_server.setHandler(context);
|
||||||
|
context.setWar(testWebappDir.toFile().getAbsolutePath());
|
||||||
|
_server.start();
|
||||||
|
assertNotNull(NamingEntryUtil.lookupNamingEntry(context, "apricot"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithJettyEEWebXml() throws Exception
|
||||||
|
{
|
||||||
|
Path testWebappDir = MavenTestingUtils.getTargetPath("test-classes/webapp-with-jetty-ee10-env-xml");
|
||||||
|
assertTrue(Files.exists(testWebappDir));
|
||||||
|
|
||||||
|
WebAppContext context = new WebAppContext();
|
||||||
|
context.setContextPath("/");
|
||||||
|
_server.setHandler(context);
|
||||||
|
context.setWar(testWebappDir.toFile().getAbsolutePath());
|
||||||
|
_server.start();
|
||||||
|
assertNotNull(NamingEntryUtil.lookupNamingEntry(context, "peach"));
|
||||||
|
assertNull(NamingEntryUtil.lookupNamingEntry(context, "cabbage"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee10.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>peach</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee10.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>cabbage</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee10.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee10.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -47,6 +47,8 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(EnvConfiguration.class);
|
private static final Logger LOG = LoggerFactory.getLogger(EnvConfiguration.class);
|
||||||
|
|
||||||
private static final String JETTY_ENV_BINDINGS = "org.eclipse.jetty.jndi.EnvConfiguration";
|
private static final String JETTY_ENV_BINDINGS = "org.eclipse.jetty.jndi.EnvConfiguration";
|
||||||
|
private static final String JETTY_EE11_ENV_XML_FILENAME = "jetty-ee11-env.xml";
|
||||||
|
private static final String JETTY_ENV_XML_FILENAME = "jetty-env.xml";
|
||||||
|
|
||||||
public EnvConfiguration()
|
public EnvConfiguration()
|
||||||
{
|
{
|
||||||
|
@ -69,25 +71,11 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Created java:comp/env for webapp {}", context.getContextPath());
|
LOG.debug("Created java:comp/env for webapp {}", context.getContextPath());
|
||||||
|
|
||||||
//check to see if an explicit file has been set, if not,
|
//check to see if an explicit file has been set,
|
||||||
//look in WEB-INF/jetty-env.xml
|
|
||||||
|
|
||||||
Resource jettyEnvXmlResource = (Resource)context.getAttribute(JETTY_ENV_XML);
|
Resource jettyEnvXmlResource = (Resource)context.getAttribute(JETTY_ENV_XML);
|
||||||
if (jettyEnvXmlResource == null)
|
if (jettyEnvXmlResource == null)
|
||||||
{
|
{
|
||||||
//look for a file called WEB-INF/jetty-env.xml
|
jettyEnvXmlResource = resolveJettyEnvXml(context.getWebInf());
|
||||||
//and process it if it exists
|
|
||||||
Resource webInf = context.getWebInf();
|
|
||||||
if (webInf != null && webInf.isDirectory())
|
|
||||||
{
|
|
||||||
// TODO: should never return from WEB-INF/lib/foo.jar!/WEB-INF/jetty-env.xml
|
|
||||||
// TODO: should also never return from a META-INF/versions/#/WEB-INF/jetty-env.xml location
|
|
||||||
Resource jettyEnv = webInf.resolve("jetty-env.xml");
|
|
||||||
if (Resources.exists(jettyEnv))
|
|
||||||
{
|
|
||||||
jettyEnvXmlResource = jettyEnv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jettyEnvXmlResource != null)
|
if (jettyEnvXmlResource != null)
|
||||||
|
@ -241,6 +229,40 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a WEB-INF/jetty-ee11-env.xml, falling back to
|
||||||
|
* looking for WEB-INF/jetty-env.xml.
|
||||||
|
*
|
||||||
|
* @param webInf the WEB-INF of the context to search
|
||||||
|
* @return the file if it exists or null otherwise
|
||||||
|
*/
|
||||||
|
private Resource resolveJettyEnvXml(Resource webInf)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (webInf == null || !webInf.isDirectory())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
//try to find jetty-ee10-env.xml
|
||||||
|
Resource xmlResource = webInf.resolve(JETTY_EE11_ENV_XML_FILENAME);
|
||||||
|
if (!Resources.missing(xmlResource))
|
||||||
|
return xmlResource;
|
||||||
|
|
||||||
|
//failing that, look for jetty-env.xml
|
||||||
|
xmlResource = webInf.resolve(JETTY_ENV_XML_FILENAME);
|
||||||
|
if (!Resources.missing(xmlResource))
|
||||||
|
return xmlResource;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Error resolving", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class Dumper extends NamingDump
|
private static class Dumper extends NamingDump
|
||||||
{
|
{
|
||||||
Dumper(ClassLoader loader, String name)
|
Dumper(ClassLoader loader, String name)
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// 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.ee11.plus.webapp;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.ee11.webapp.WebAppContext;
|
||||||
|
import org.eclipse.jetty.plus.jndi.NamingEntryUtil;
|
||||||
|
import org.eclipse.jetty.server.Server;
|
||||||
|
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class EnvConfigurationTest
|
||||||
|
{
|
||||||
|
Server _server;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp()
|
||||||
|
{
|
||||||
|
_server = new Server();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
public void tearDown() throws Exception
|
||||||
|
{
|
||||||
|
if (_server != null)
|
||||||
|
_server.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithOnlyJettyWebXml() throws Exception
|
||||||
|
{
|
||||||
|
Path testWebappDir = MavenTestingUtils.getTargetPath("test-classes/webapp-with-jetty-env-xml");
|
||||||
|
assertTrue(Files.exists(testWebappDir));
|
||||||
|
|
||||||
|
WebAppContext context = new WebAppContext();
|
||||||
|
context.setContextPath("/");
|
||||||
|
_server.setHandler(context);
|
||||||
|
context.setWar(testWebappDir.toFile().getAbsolutePath());
|
||||||
|
_server.start();
|
||||||
|
assertNotNull(NamingEntryUtil.lookupNamingEntry(context, "apricot"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithJettyEEWebXml() throws Exception
|
||||||
|
{
|
||||||
|
Path testWebappDir = MavenTestingUtils.getTargetPath("test-classes/webapp-with-jetty-ee11-env-xml");
|
||||||
|
assertTrue(Files.exists(testWebappDir));
|
||||||
|
|
||||||
|
WebAppContext context = new WebAppContext();
|
||||||
|
context.setContextPath("/");
|
||||||
|
_server.setHandler(context);
|
||||||
|
context.setWar(testWebappDir.toFile().getAbsolutePath());
|
||||||
|
_server.start();
|
||||||
|
assertNotNull(NamingEntryUtil.lookupNamingEntry(context, "peach"));
|
||||||
|
assertNull(NamingEntryUtil.lookupNamingEntry(context, "cabbage"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee11.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>peach</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee11.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>cabbage</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee11.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee11.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee8.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>peach</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee8.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>cabbage</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee8.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee8.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
package org.eclipse.jetty.ee9.plus.webapp;
|
package org.eclipse.jetty.ee9.plus.webapp;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.naming.Context;
|
import javax.naming.Context;
|
||||||
import javax.naming.InitialContext;
|
import javax.naming.InitialContext;
|
||||||
|
@ -50,6 +49,8 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(EnvConfiguration.class);
|
private static final Logger LOG = LoggerFactory.getLogger(EnvConfiguration.class);
|
||||||
|
|
||||||
private static final String JETTY_ENV_BINDINGS = "org.eclipse.jetty.jndi.EnvConfiguration";
|
private static final String JETTY_ENV_BINDINGS = "org.eclipse.jetty.jndi.EnvConfiguration";
|
||||||
|
private static final String JETTY_ENV_XML = "jetty-env.xml";
|
||||||
|
private static final String JETTY_EE9_ENV_XML = "jetty-ee9-env.xml";
|
||||||
private Resource jettyEnvXmlResource;
|
private Resource jettyEnvXmlResource;
|
||||||
private NamingDump _dumper;
|
private NamingDump _dumper;
|
||||||
private ResourceFactory.Closeable _resourceFactory;
|
private ResourceFactory.Closeable _resourceFactory;
|
||||||
|
@ -89,19 +90,8 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
//look in WEB-INF/jetty-env.xml
|
//look in WEB-INF/jetty-env.xml
|
||||||
if (jettyEnvXmlResource == null)
|
if (jettyEnvXmlResource == null)
|
||||||
{
|
{
|
||||||
//look for a file called WEB-INF/jetty-env.xml
|
//look for a configuration file
|
||||||
//and process it if it exists
|
jettyEnvXmlResource = resolveJettyEnvXml(context.getWebInf());
|
||||||
org.eclipse.jetty.util.resource.Resource webInf = context.getWebInf();
|
|
||||||
if (webInf != null && webInf.isDirectory())
|
|
||||||
{
|
|
||||||
// TODO: should never return from WEB-INF/lib/foo.jar!/WEB-INF/jetty-env.xml
|
|
||||||
// TODO: should also never return from a META-INF/versions/#/WEB-INF/jetty-env.xml location
|
|
||||||
org.eclipse.jetty.util.resource.Resource jettyEnv = webInf.resolve("jetty-env.xml");
|
|
||||||
if (Resources.isReadableFile(jettyEnv))
|
|
||||||
{
|
|
||||||
jettyEnvXmlResource = jettyEnv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jettyEnvXmlResource != null)
|
if (jettyEnvXmlResource != null)
|
||||||
|
@ -257,4 +247,38 @@ public class EnvConfiguration extends AbstractConfiguration
|
||||||
Thread.currentThread().setContextClassLoader(oldLoader);
|
Thread.currentThread().setContextClassLoader(oldLoader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain a WEB-INF/jetty-ee9-env.xml, falling back to
|
||||||
|
* looking for WEB-INF/jetty-env.xml.
|
||||||
|
*
|
||||||
|
* @param webInf the WEB-INF of the context to search
|
||||||
|
* @return the file if it exists or null otherwise
|
||||||
|
*/
|
||||||
|
private Resource resolveJettyEnvXml(Resource webInf)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (webInf == null || !webInf.isDirectory())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
//try to find jetty-ee9-env.xml
|
||||||
|
Resource xmlResource = webInf.resolve(JETTY_EE9_ENV_XML);
|
||||||
|
if (!Resources.missing(xmlResource))
|
||||||
|
return xmlResource;
|
||||||
|
|
||||||
|
//failing that, look for jetty-env.xml
|
||||||
|
xmlResource = webInf.resolve(JETTY_ENV_XML);
|
||||||
|
if (!Resources.missing(xmlResource))
|
||||||
|
return xmlResource;
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Error resolving", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// 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.ee9.plus.webapp;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.ee9.webapp.WebAppContext;
|
||||||
|
import org.eclipse.jetty.plus.jndi.NamingEntryUtil;
|
||||||
|
import org.eclipse.jetty.server.Server;
|
||||||
|
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
||||||
|
import org.eclipse.jetty.util.jndi.NamingUtil;
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class EnvConfigurationTest
|
||||||
|
{
|
||||||
|
Server _server;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void setUp()
|
||||||
|
{
|
||||||
|
_server = new Server();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
public void tearDown() throws Exception
|
||||||
|
{
|
||||||
|
if (_server != null)
|
||||||
|
_server.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithOnlyJettyWebXml() throws Exception
|
||||||
|
{
|
||||||
|
Path testWebappDir = MavenTestingUtils.getTargetPath("test-classes/webapp-with-jetty-env-xml");
|
||||||
|
assertTrue(Files.exists(testWebappDir));
|
||||||
|
|
||||||
|
WebAppContext context = new WebAppContext();
|
||||||
|
context.setContextPath("/");
|
||||||
|
_server.setHandler(context);
|
||||||
|
context.setWar(testWebappDir.toFile().getAbsolutePath());
|
||||||
|
_server.start();
|
||||||
|
assertNotNull(NamingEntryUtil.lookupNamingEntry(context, "apricot"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testWithJettyEEWebXml() throws Exception
|
||||||
|
{
|
||||||
|
Path testWebappDir = MavenTestingUtils.getTargetPath("test-classes/webapp-with-jetty-ee9-env-xml");
|
||||||
|
assertTrue(Files.exists(testWebappDir));
|
||||||
|
|
||||||
|
WebAppContext context = new WebAppContext();
|
||||||
|
context.setContextPath("/");
|
||||||
|
_server.setHandler(context);
|
||||||
|
context.setWar(testWebappDir.toFile().getAbsolutePath());
|
||||||
|
_server.start();
|
||||||
|
assertNotNull(NamingEntryUtil.lookupNamingEntry(context, "peach"));
|
||||||
|
assertNull(NamingEntryUtil.lookupNamingEntry(context, "cabbage"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee9.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>peach</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee9.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>cabbage</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee9.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
|
||||||
|
|
||||||
|
<Configure id='wac' class="org.eclipse.jetty.ee9.webapp.WebAppContext">
|
||||||
|
|
||||||
|
<!-- Add an EnvEntry only valid for this webapp -->
|
||||||
|
<New id="gargle" class="org.eclipse.jetty.plus.jndi.EnvEntry">
|
||||||
|
<Arg><Ref refid='wac'/></Arg>
|
||||||
|
<Arg>apricot</Arg>
|
||||||
|
<Arg type="java.lang.Double">100</Arg>
|
||||||
|
<Arg type="boolean">true</Arg>
|
||||||
|
</New>
|
||||||
|
|
||||||
|
</Configure>
|
||||||
|
|
Loading…
Reference in New Issue