Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Help with Null Embedded Jetty Server Session

Hi Simone,

This is actually a simplified version of a more complicated program. I am trying to translate an existing program that uses regular jetty into one that uses embedded Jetty. I have an API that is not getting exposed due to a configuration issue in Jetty (I spent a few hours yesterday working with the Swagger team, so I know the issue isn't there). From reading the logging statements the only obvious issue I could see was that the session was null, so that is what I was trying to fix. However, it is entirely possible I miss diagnosed the root issue. Do you have any suggestions? Here is the code:

package com.my.company;

import java.util.EnumSet;

import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;

import io.swagger.jaxrs.config.BeanConfig;
import io.swagger.jaxrs.config.DefaultJaxrsConfig;
import io.swagger.jaxrs.config.SwaggerContextService;
import io.swagger.jaxrs.listing.ApiListingResource;
import io.swagger.jersey.config.JerseyJaxrsConfig;
import io.swagger.models.Contact;
import io.swagger.models.Info;
import io.swagger.models.License;
import io.swagger.models.Swagger;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.SessionManager;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.session.HashSessionIdManager;
import org.eclipse.jetty.server.session.HashSessionManager;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.DefaultServlet;
//import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
import org.jhades.JHades;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.eclipse.jetty.webapp.WebAppContext;

import com.my.company.swagger.api.HelloApi;
import com.my.companyswagger.api.HelloApiService;
import com.my.company.swagger.api.util.Bootstrap;

public class MyApp {

private static final Logger LOGGER = LoggerFactory.getLogger(IAFApp.class);
private static ApplicationContext appContext = new AnnotationConfigApplicationContext(
"com.my.company");
private static final int SERVER_PORT = 12043;

public static void main(String[] args) throws Exception {

// Create Embedded Jetty server
Server jettyServer = new Server();

// Add ServletContextHandler
ServletContextHandler servletContextHandler = new ServletContextHandler(
ServletContextHandler.SESSIONS);
servletContextHandler.setContextPath("/");

jettyServer.setHandler(servletContextHandler);

// Add default servlet
servletContextHandler.addServlet(org.eclipse.jetty.servlet.DefaultServlet.class, "/*");

//Add API Origin Filter
servletContextHandler.addFilter("com.my.company.swagger.api.util.ApiOriginFilter", "/*",
EnumSet.of(DispatcherType.INCLUDE, DispatcherType.REQUEST));

// Use a servlet holder to manage Jersey services

// Setup API resources
ServletHolder jerseyServlet = servletContextHandler.addServlet(
ServletContainer.class, "/api/*");
jerseyServlet.setInitOrder(1);
jerseyServlet
.setInitParameter(
"com.sun.jersey.config.property.packages",
"io.swagger.jaxrs.json;io.swagger.jaxrs;io.swagger.jaxrs.listing;com.my.company.swagger.api");
jerseyServlet.setInitParameter(
"com.sun.jersey.spi.container.ContainerRequestFilters",
"com.sun.jersey.api.container.filter.PostReplaceFilter");
jerseyServlet.setInitParameter(
"com.sun.jersey.api.json.POJOMappingFeature", "true");
jerseyServlet.setInitParameter(
"com.sun.jersey.config.feature.DisableWADL", "true");
jerseyServlet
.setInitParameter(
"jersey.config.server.provider.classnames",
"org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature");

// Setup Swagger Servlet
ServletHolder swaggerServlet = servletContextHandler.addServlet(
JerseyJaxrsConfig.class, "/swagger-core");
swaggerServlet.setInitOrder(2);
swaggerServlet.setInitParameter("api.version", "1.0.0");
swaggerServlet.setInitParameter("description", "Hello World!");
swaggerServlet.setInitParameter("swagger.api.title",
"Swagger Server Test");
swaggerServlet.setInitParameter("swagger.api.basepath",
"http://localhost:" + SERVER_PORT + "/api");
swaggerServlet.setInitParameter("swagger.pretty.print", "true");

jettyServer.setHandler(servletContextHandler);

// Start the server
jettyServer.start();
System.out.println("SERVER DUMP AFTER START" + jettyServer.dump());

testHello();
jettyServer.join();

}

/**
* Test the hello functionality to make sure it is working
*/
private static void testHello() {
HelloApiService helloApiService = (HelloApiService) appContext
.getBean("HelloApiService");
LOGGER.debug("Printing {}", helloApiService.getHelloApi());
System.out.println(helloApiService.getHelloApi());
}

/**
* Get the application context
*/
public static ApplicationContext getApplicationContext() {
return appContext;
}
}

Here is the jetty configuration in my existing pom.xml:
<!-- Jetty Setup -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.5.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.my.company.MyApp</mainClass>
<classpathScope>runtime</classpathScope>
</configuration>
</plugin>

And the old one that worked:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webAppConfig>
<contextPath>/</contextPath>
</webAppConfig>
<webAppSourceDirectory>target/${project.artifactId}-${project.version}</webAppSourceDirectory>
<webDefaultXml>${project.basedir}/conf/jetty/webdefault.xml</webDefaultXml>
<stopPort>8079</stopPort>
<stopKey>stopit</stopKey>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>60000</maxIdleTime>
<confidentialPort>8443</confidentialPort>
</connector>
</connectors>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>


Thanks!

    Jennifer

Inactive hide details for Simone Bordet ---05/18/2016 10:11:29 AM---Hi, On Wed, May 18, 2016 at 3:20 PM, Jennifer CostonSimone Bordet ---05/18/2016 10:11:29 AM---Hi, On Wed, May 18, 2016 at 3:20 PM, Jennifer Coston

From: Simone Bordet <sbordet@xxxxxxxxxxx>
To: JETTY user mailing list <jetty-users@xxxxxxxxxxx>
Date: 05/18/2016 10:11 AM
Subject: Re: [jetty-users] Help with Null Embedded Jetty Server Session
Sent by: jetty-users-bounces@xxxxxxxxxxx




Hi,

On Wed, May 18, 2016 at 3:20 PM, Jennifer Coston
<Jennifer.Coston@xxxxxxxxxxxx> wrote:
> But I am still not seeing the session information:
>
> Request = Request(GET //localhost:12043/)@968bbe8
> Response = HTTP/1.1 200
> Date: Wed, 18 May 2016 13:00:04 GMT
>
>
> Create = false
> no session

This is expected.

You call request.getSession(false) which does *not* create the session.
It only returns it if it has been previously created.

--
Simone Bordet
----
http://cometd.org
http://webtide.com
Developer advice, training, services and support
from the Jetty & CometD experts.
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users

GIF image


Back to the top