Please excuse this probably very poorly worded question and description.
I am very new to all of this stuff but I was interested in testing the
embedded Grizzly server with the MVC style templates described in the
bookstore sample application.
So, I am trying to combine the two samples (bookstore and
https-clientserver-grizzly).
Should this be possible?
What I've done up to this point appears to be doing the right thing until it
fails. It fails when it tries to get a RequestDispatcher from the
servletContext in JSPTemplateProcessor. Stepping through the code shows
that servletContext is an instance of ServletContextImpl and the
getRequestDispatcher() method appears to need to be overridden.
I assume that I'm missing something with the initialization of the server.
Tips, google keywords or anything to point me in the right direction would
be much appreciated.
Thanks,
Dean
------------------------------------------------------------------
Main Server Class:
------------------------------------------------------------------
------------------------------------------------------------------
package middleware.application.wsserver;
import java.io.IOException;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;
import javax.annotation.security.*;
import middleware.application.wsserver.auth.SecurityFilter;
import com.sun.grizzly.SSLConfig;
import com.sun.grizzly.http.embed.GrizzlyWebServer;
import com.sun.grizzly.http.servlet.ServletAdapter;
import com.sun.grizzly.ssl.SSLSelectorThread;
import
com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.spi.container.servlet.ServletContainer;
public class Server
{
private static GrizzlyWebServer webServer;
public static final URI BASE_URI = getBaseURI();
public static final String CONTENT = "JERSEY HTTPS EXAMPLE\n";
private static URI getBaseURI() {
return UriBuilder.fromUri("
https://localhost/
").port(getPort(4463)).build();
}
private static int getPort(int defaultPort) {
String port = System.getenv("JERSEY_HTTP_PORT");
if (null != port) {
try {
return Integer.parseInt(port);
} catch (NumberFormatException e) {
}
}
return defaultPort;
}
protected static void startServer() {
webServer = new GrizzlyWebServer(getPort(4463), ".", true);
// add Jersey resource servlet
ServletAdapter jerseyAdapter = new ServletAdapter();
jerseyAdapter.addInitParameter("com.sun.jersey.config.property.packages",
"middleware.application.wsserver;middleware.application.wsserver.auth;middleware.application.resources");
jerseyAdapter.setContextPath("/");
jerseyAdapter.setServletInstance(new ServletContainer());
// add security filter (which handles http basic authentication)
jerseyAdapter.addInitParameter(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS,
SecurityFilter.class.getName());
jerseyAdapter.addInitParameter(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES,
RolesAllowedResourceFilterFactory.class.getName());
jerseyAdapter.addInitParameter(ResourceConfig.FEATURE_REDIRECT,
"true");
jerseyAdapter.addInitParameter(ResourceConfig.FEATURE_IMPLICIT_VIEWABLES,
"true");
jerseyAdapter.addInitParameter(ServletContainer.PROPERTY_WEB_PAGE_CONTENT_REGEX,
"/(images|css|jsp)/.*");
webServer.addGrizzlyAdapter(jerseyAdapter, new String[]{"/*"});
// Grizzly ssl configuration
SSLConfig sslConfig = new SSLConfig();
// sslConfig.setNeedClientAuth(true); // don't work - known grizzly
bug, will be fixed in 2.0.0
// set up security context
sslConfig.setKeyStoreFile("./security/keystore_server"); // contains
server keypair
sslConfig.setKeyStorePass("asdfgh");
sslConfig.setTrustStoreFile("./security/truststore_server"); //
contains client certificate
sslConfig.setTrustStorePass("asdfgh");
webServer.setSSLConfig(sslConfig);
// turn server side client certificate authentication on
((SSLSelectorThread)
webServer.getSelectorThread()).setNeedClientAuth(false);
try {
// start Grizzly embedded server //
System.out.println("Jersey app started. Try out " + BASE_URI +
"\nHit CTRL + C to stop it...");
webServer.start();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public static void stopServer() {
webServer.stop();
}
public static void main(String[] args) throws InterruptedException,
IOException {
startServer();
}
}
------------------------------------------------------------------
POM
------------------------------------------------------------------
<project xmlns="
http://maven.apache.org/POM/4.0.0" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>middleware.application</groupId>
<artifactId>WSserver</artifactId>
<version>1.0.0</version>
<build>
<finalName>WSserver</finalName>
<plugins>
<!-- Maven Exec Plug-In:
http://mojo.codehaus.org/exec-maven-plugin/ -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>middleware.application.wsserver.Server</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
</repositories>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.1.4.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.1.4.1</version>
</dependency>
<dependency>
<groupId>com.sun.grizzly</groupId>
<artifactId>grizzly-servlet-webserver</artifactId>
<version>1.9.18-e</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<!-- For J2EE Annotations RolesAllowed,PermitAll,DenyAll,RunAs -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
------------------------------------------------------------------
Stack Trace
------------------------------------------------------------------
Dec 18, 2009 3:29:48 PM com.sun.grizzly.http.servlet.ServletAdapter
doService
SEVERE: service exception:
java.lang.UnsupportedOperationException: Not supported yet.
at
com.sun.grizzly.http.servlet.ServletContextImpl.getRequestDispatcher(ServletContextImpl.java:351)
at
com.sun.jersey.server.impl.container.servlet.JSPTemplateProcessor.writeTo(JSPTemplateProcessor.java:113)
at
com.sun.jersey.spi.template.ResolvedViewable.writeTo(ResolvedViewable.java:102)
at
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter.writeTo(ViewableMessageBodyWriter.java:81)
at
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter.writeTo(ViewableMessageBodyWriter.java:58)
at
com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:266)
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:814)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:740)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:731)
at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:372)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:452)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:633)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at
com.sun.grizzly.http.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:188)
at
com.sun.grizzly.http.servlet.FilterChainImpl.invokeFilterChain(FilterChainImpl.java:137)
at
com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:376)
at
com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:324)
at
com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
at
com.sun.grizzly.tcp.http11.GrizzlyAdapterChain.service(GrizzlyAdapterChain.java:180)
at
com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166)
at
com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:789)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:697)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:952)
at
com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:166)
at
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at
com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at
com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at
com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at
com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at
com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)