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



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



Hi,

On Wed, May 18, 2016 at 3:20 PM, Jennifer Coston
<[email protected]> 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
[email protected]
To change your delivery options, retrieve your password, or unsubscribe
from this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to