Thanks Ryan - appreciate it.
I've tried to make it as easy as possible to replicate, the github project
is simple maven build and you can run the server up either
via JerseyGrizzlyFrameworkServer (has a main method) or
the JerseyGrizzlyFrameworkServerTest unit test.
I'm convinced it is something very obvious I've missed :-)
Cheers
On 15 June 2016 at 17:38, Ryan Lubke <ryan.lubke_at_oracle.com> wrote:
> Hi Steve,
>
> You're next on my list. Will follow up asap.
>
> Steve Curtis <stevo.curtis_at_googlemail.com>
> June 15, 2016 at 09:12
> Just a quick update to say I updated the github code to remove the
> HttpHandler and build responses via the Jersey annotated resource class,
> the code should be simpler to follow.
>
> Everything starts but I don't see SPDY protocol enabled (I'm using the
> Chrome "HTTP/2 and SPDY indicator" plugin to test this).
>
> Is there anything extra I need to do from the client or server sides?
> Maybe setting HTTP headers or something else to initiate the protocol?
>
> Any help would be greatly appreciated.
>
> Steve
>
>
> Steve Curtis <stevo.curtis_at_googlemail.com>
> June 13, 2016 at 02:36
> Hi Ryan,
>
> I was running it with Open JDK 1.7.0_101
>
> Since it's a Windows machine I'm developing on I used the Azul provided
> OpenJDK build at http://www.azul.com/downloads/zulu/zulu-windows/
>
> Cheers
>
>
> Ryan Lubke <ryan.lubke_at_oracle.com>
> June 12, 2016 at 18:59
> Hi Steve,
>
> Do you recall the exact version of the Open JDK you tested with? The NPN
> code is pretty sensitive to the version of the runtime. NOTE: It won't
> work at all with the Oracle JDK.
>
>
> Steve Curtis <stevo.curtis_at_googlemail.com>
> June 12, 2016 at 16:22
>
> I’ve inherited a client-server application that creates a significant
> amount of asynchronous ajax calls from the front end. We were using Simple
> Framework for our backend and I have now swapped in Grizzly with the
> intention of making use of SPDY protocol to avoid the max 6 browser
> connections we are seeing at the moment.
>
>
>
> I have the application standing up fine, but it still seems to use
> standard HTTP 1.1 over SSL and not SPDY.
>
>
>
> The code I’ve written is:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> *public void runServer(int port) throws IOException{ logger.info("starting
> grizzly framework server on port {}", port); ResourceConfig resourceConfig
> = new ResourceConfig(JerseyResource.class); uri =
> UriBuilder.fromUri("https://localhost/
> <https://localhost/>").port(port).build(); server =
> GrizzlyHttpServerFactory.createHttpServer(uri, resourceConfig, true,
> createSSLContextConfigurator()); listener =
> server.getListeners().iterator().next(); listener.setSecure(true);
> NIOTransport nioTransport = TCPNIOTransportBuilder.newInstance()
> .setReuseAddress(true) .setIOStrategy(WorkerThreadIOStrategy.getInstance())
> .setSelectorThreadPoolConfig(ThreadPoolConfig.defaultConfig().setCorePoolSize(2).setMaxPoolSize(4))
> .setWorkerThreadPoolConfig(ThreadPoolConfig.defaultConfig().setCorePoolSize(3).setMaxPoolSize(20))
> .build(); listener.setTransport((TCPNIOTransport)nioTransport); SpdyAddOn
> spdyAddOn = new SpdyAddOn(SpdyMode.NPN); listener.registerAddOn(spdyAddOn);
> final ServerConfiguration serverConfiguration =
> server.getServerConfiguration(); serverConfiguration.addHttpHandler(new
> HttpHandler() { public void service(Request request, Response response)
> throws Exception { long startTime = new Date().getTime(); // Put a short
> sleep in here so can see if requests queue up from browser
> Thread.currentThread().sleep(500); // Get SPDY stream if it exists final
> SpdyStream spdyStream = (SpdyStream)
> request.getAttribute(SpdyStream.SPDY_STREAM_ATTRIBUTE); // if spdy stream
> is null it is not a SPDY based request if (spdyStream != null) {
> logger.info("found a SPDY stream"); } else { logger.info("no SPDY stream
> available"); } final SimpleDateFormat format = new SimpleDateFormat("EEE,
> dd MMM yyyy HH:mm:ss zzz", Locale.UK); final String date =
> format.format(new Date(System.currentTimeMillis()));
> response.setContentType("text/plain");
> response.setContentLength(date.length()); response.getWriter().write(date);
> logger.info("processed request in {} ms", new Date().getTime() -
> startTime); } } ); server.start(); logger.info("bootstrap of grizzly
> framework server complete, running on {}", uri);}protected
> SSLEngineConfigurator createSSLContextConfigurator() throws
> MalformedURLException{ SSLContextConfigurator sslContextConfigurator = new
> SSLContextConfigurator(); ClassLoader classLoader =
> getClass().getClassLoader();
> sslContextConfigurator.setKeyStoreFile(classLoader.getResource("keystore.jks").getFile().toString());
> sslContextConfigurator.setKeyStorePass("changeit");
> sslContextConfigurator.validateConfiguration(true); SSLEngineConfigurator
> result = new SSLEngineConfigurator(
> sslContextConfigurator.createSSLContext(), false, false, false);
> result.setClientMode(false); return result;*
>
> *}*
>
>
>
> The code is hosted on GitHub at
> https://github.com/stevocurtis/public-development/blob/master/subprojects/playpens/java-playpen/web/grizzly-framework-playpen/src/main/java/com/fenixinfotech/grizzly/framework/playpen/JerseyGrizzlyFrameworkServer.java
>
>
>
> Notes:
>
>
>
> 1. I’ve run this against both open jdk 7 and oracle jdk 7.
>
> 2. I’ve tried bootstrapping with both the
> grizzly-npn-bootstrap-1.0.jar and grizzly-npn-bootstrap-1.2.jar files.
>
> 3. You can see the dependencies in the pom but they are:
>
>
>
> jersey-container-grizzly2-http 2.35
>
> grizzly-http2 2.3.25
>
> grizzly-http-server 2.3.25
>
> grizzly-spdy 2.3.25
>
> grizzly-npn-bootstrap 1.2
>
>
>
> I’m wondering is there anything else I need to do to “trigger” initiation
> of a SPDY protocol? Setting headers maybe.
>
>
>
> Thanks in advance,
>
>
>
> Steve
>
>
>