Skip to content

Commit

Permalink
Issue #6354 Make osgi tests work with slf4j < 2.0.0
Browse files Browse the repository at this point in the history
Signed-off-by: Jan Bartel <janb@webtide.com>
  • Loading branch information
janbartel committed Jun 10, 2021
1 parent 8193af6 commit e215c1e
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 48 deletions.
9 changes: 0 additions & 9 deletions demos/demo-jetty-webapp/pom.xml
Expand Up @@ -126,15 +126,6 @@
</pluginManagement>
</build>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-slf4j-impl</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
Expand Down
22 changes: 7 additions & 15 deletions demos/demo-jetty-webapp/src/main/java/com/acme/ChatServlet.java
Expand Up @@ -27,17 +27,12 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

// Simple asynchronous Chat room.
// This does not handle duplicate usernames or multiple frames/tabs from the same browser
// Some code is duplicated for clarity.
@SuppressWarnings("serial")
public class ChatServlet extends HttpServlet
{
private static final Logger LOG = LoggerFactory.getLogger(ChatServlet.class);

private long asyncTimeout = 10000;

@Override
Expand All @@ -63,7 +58,7 @@ class Member implements AsyncListener
@Override
public void onTimeout(AsyncEvent event) throws IOException
{
LOG.debug("resume request");
getServletContext().log("resume request");
AsyncContext async = _async.get();
if (async != null && _async.compareAndSet(async, null))
{
Expand Down Expand Up @@ -102,10 +97,10 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
String message = request.getParameter("message");
String username = request.getParameter("user");

LOG.debug("doPost called. join={},message={},username={}", join, message, username);
getServletContext().log("doPost called. join=" + join + " message=" + message + " username=" + username);
if (username == null)
{
LOG.debug("no parameter user set, sending 503");
getServletContext().log("no parameter user set, sending 503");
response.sendError(503, "user==null");
return;
}
Expand All @@ -125,14 +120,14 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response)
{
synchronized (member)
{
LOG.debug("Queue size: {}", member._queue.size());
getServletContext().log("Queue size: " + member._queue.size());
if (!member._queue.isEmpty())
{
sendSingleMessage(response, member);
}
else
{
LOG.debug("starting async");
getServletContext().log("starting async");
AsyncContext async = request.startAsync();
async.setTimeout(asyncTimeout);
async.addListener(member);
Expand All @@ -147,7 +142,7 @@ private Member getMember(String username, Map<String, Member> room)
Member member = room.get(username);
if (member == null)
{
LOG.debug("user: {} in room: {} doesn't exist. Creating new user.", username, room);
getServletContext().log("user: " + username + " in room: " + room + " doesn't exist. Creating new user.");
member = new Member(username);
room.put(username, member);
}
Expand All @@ -159,7 +154,7 @@ private Map<String, Member> getRoom(String path)
Map<String, Member> room = _rooms.get(path);
if (room == null)
{
LOG.debug("room: {} doesn't exist. Creating new room.", path);
getServletContext().log("room: " + path + " doesn't exist. Creating new room.");
room = new HashMap<>();
_rooms.put(path, room);
}
Expand Down Expand Up @@ -192,7 +187,6 @@ private void sendSingleMessage(HttpServletResponse response, Member member) thro

private void sendMessageToAllMembers(String message, String username, Map<String, Member> room)
{
LOG.debug("Sending message: {} from: {}", message, username);
for (Member m : room.values())
{
synchronized (m)
Expand All @@ -202,10 +196,8 @@ private void sendMessageToAllMembers(String message, String username, Map<String

// wakeup member if polling
AsyncContext async = m._async.get();
LOG.debug("Async found: {}", async);
if (async != null & m._async.compareAndSet(async, null))
{
LOG.debug("dispatch");
async.dispatch();
}
}
Expand Down
8 changes: 3 additions & 5 deletions demos/demo-jetty-webapp/src/main/java/com/acme/Dump.java
Expand Up @@ -51,8 +51,6 @@
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.Part;

import org.slf4j.LoggerFactory;

/**
* Dump Servlet Request.
*/
Expand Down Expand Up @@ -116,7 +114,7 @@ public void doGet(final HttpServletRequest request, final HttpServletResponse re
}
catch (ServletException e)
{
getServletContext().log(e.toString());
getServletContext().log("Login fail", e);
}
}

Expand Down Expand Up @@ -341,12 +339,12 @@ public void run()
}
catch (IOException e2)
{
LoggerFactory.getLogger(Dump.class).trace("IGNORED", e2);
getServletContext().log("Write fail", e2);
}
}
catch (IOException e)
{
LoggerFactory.getLogger(Dump.class).trace("IGNORED", e);
getServletContext().log("Output fail", e);
}
return;
}
Expand Down
Expand Up @@ -27,17 +27,12 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Dump Servlet Request.
*/
@SuppressWarnings("serial")
public class SecureModeServlet extends HttpServlet
{
private static final Logger LOG = LoggerFactory.getLogger(SecureModeServlet.class);

@Override
public void init(ServletConfig config) throws ServletException
{
Expand Down Expand Up @@ -116,7 +111,7 @@ private void runLoggingChecks(ServletOutputStream out) throws Exception
try
{
out.println("check ability to log<br/>");
LOG.info("testing logging");
getServletContext().log("testing logging");
out.println("status: <b>SUCCESS - expected</b><br/>");
}
catch (SecurityException e)
Expand Down
Expand Up @@ -27,9 +27,6 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* TestFilter.
*
Expand All @@ -39,8 +36,6 @@
*/
public class TestFilter implements Filter
{
private static final Logger LOG = LoggerFactory.getLogger(TestFilter.class);

private boolean _remote;
private ServletContext _context;
private final Set<String> _allowed = new HashSet<String>();
Expand All @@ -54,7 +49,7 @@ public void init(FilterConfig filterConfig) throws ServletException
_allowed.add("/jetty_banner.gif");
_allowed.add("/remote.html");

LOG.debug("TestFilter#remote=" + _remote);
filterConfig.getServletContext().log("TestFilter#remote=" + _remote);
}

@Override
Expand Down
12 changes: 12 additions & 0 deletions jetty-osgi/test-jetty-osgi/pom.xml
Expand Up @@ -135,6 +135,18 @@
</dependency>

<!-- Jetty OSGi Deps -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.30</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-slf4j-impl</artifactId>
Expand Down
Expand Up @@ -142,13 +142,36 @@ public static List<Option> coreJettyDependencies()
res.add(systemProperty("org.ops4j.pax.url.mvn.settings").value(System.getProperty("settingsFilePath")));
}

//make src/test/resources/jetty-logging.properties visible to jetty in the osgi container
/*
* Jetty 10 uses slf4j 2.0.0 by default, however we want to test with slf4j 1.7.30 for backwards compatibility.
* To do that, we need to use slf4j-simple as the logging implementation. We make a simplelogger.properties
* file available so that jetty logging can be configured
*/
res.add(mavenBundle().groupId("org.slf4j").artifactId("slf4j-api").versionAsInProject().noStart());
TinyBundle simpleLoggingPropertiesBundle = TinyBundles.bundle();
simpleLoggingPropertiesBundle.add("simplelogger.properties", ClassLoader.getSystemResource("simplelogger.properties"));
simpleLoggingPropertiesBundle.set(Constants.BUNDLE_SYMBOLICNAME, "simple-logger-properties");
simpleLoggingPropertiesBundle.set(Constants.FRAGMENT_HOST, "slf4j-simple");
simpleLoggingPropertiesBundle.add(FragmentActivator.class);
res.add(CoreOptions.streamBundle(simpleLoggingPropertiesBundle.build()).noStart());
res.add(mavenBundle().groupId("org.slf4j").artifactId("slf4j-simple").versionAsInProject().noStart());

/*
* NOTE: when running with slf4j >= 2.0.0, remove the slf4j simple logger above and uncomment the following lines
TinyBundle loggingPropertiesBundle = TinyBundles.bundle();
loggingPropertiesBundle.add("jetty-logging.properties", ClassLoader.getSystemResource("jetty-logging.properties"));
loggingPropertiesBundle.set(Constants.BUNDLE_SYMBOLICNAME, "jetty-logging-properties");
loggingPropertiesBundle.set(Constants.FRAGMENT_HOST, "org.eclipse.jetty.logging");
loggingPropertiesBundle.add(FragmentActivator.class);
res.add(CoreOptions.streamBundle(loggingPropertiesBundle.build()).noStart());
//Fix missing ServiceLoader in slf4j-api 2.0.0 manifest
res.add(wrappedBundle(mavenBundle().groupId("org.slf4j").artifactId("slf4j-api").versionAsInProject()
.instructions("Require-Capability=osgi.serviceloader;filter:=\"(osgi.serviceloader=org.slf4j.spi.SLF4JServiceProvider)\",osgi.extender;filter:=\"(osgi.extender=osgi.serviceloader.processor)\"")
.overwriteManifest(OverwriteMode.MERGE)
.start());
res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-slf4j-impl").versionAsInProject().start());
*/
res.add(mavenBundle().groupId("org.eclipse.jetty.toolchain").artifactId("jetty-servlet-api").versionAsInProject().start());
res.add(mavenBundle().groupId("org.eclipse.platform").artifactId("org.eclipse.osgi.util").versionAsInProject());
res.add(mavenBundle().groupId("org.eclipse.platform").artifactId("org.eclipse.osgi.services").versionAsInProject());
Expand All @@ -160,12 +183,8 @@ public static List<Option> coreJettyDependencies()
res.add(mavenBundle().groupId("org.apache.aries.spifly").artifactId("org.apache.aries.spifly.dynamic.bundle").versionAsInProject().start());
res.add(mavenBundle().groupId("jakarta.annotation").artifactId("jakarta.annotation-api").versionAsInProject().start());
res.add(mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-jta_1.1_spec").version("1.1.1").start());
//the slf4j-api jar does not have support for ServiceLoader in osgi in its manifest, so add it now
res.add(wrappedBundle(mavenBundle().groupId("org.slf4j").artifactId("slf4j-api").versionAsInProject())
.instructions("Require-Capability=osgi.serviceloader;filter:=\"(osgi.serviceloader=org.slf4j.spi.SLF4JServiceProvider)\",osgi.extender;filter:=\"(osgi.extender=osgi.serviceloader.processor)\"")
.overwriteManifest(OverwriteMode.MERGE)
.start());
res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-slf4j-impl").versionAsInProject().start());


res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-util").versionAsInProject().start());
res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-deploy").versionAsInProject().start());
res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("jetty-server").versionAsInProject().start());
Expand Down
@@ -0,0 +1 @@
org.slf4j.simpleLogger.defaultLogLevel=info

0 comments on commit e215c1e

Please sign in to comment.