View
@@ -1,43 +1,50 @@
package hello;
import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.core.UriBuilder;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Options;
import org.glassfish.grizzly.http.server.HttpServer;
import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
public class JerseyWebServer {
public static void main(String[] args) throws Exception {
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(options(), args);
int port = Integer.parseInt(cmd.getOptionValue("port", "8080"));
String dbHost = cmd.getOptionValue("dbhost", "localhost");
int dbPort = Integer.parseInt(cmd.getOptionValue("dbport", "3306"));
new JerseyWebServer(port,dbHost, dbPort).run();
}
private final int port;
private final String dbHost;
private final int dbPort;
public JerseyWebServer(final int port, final String dbHost, final int dbPort) {
public JerseyWebServer(int port, String dbHost, int dbPort) {
this.port = port;
this.dbHost = dbHost;
this.dbPort = dbPort;
}
public void run() throws Exception {
URI baseUri = getBaseUrl(port);
ResourceConfig rc = new PackagesResourceConfig("hello", "org.eluder.jersey.mustache");
ResourceConfig rc = new PackagesResourceConfig("hello");
rc.setPropertiesAndFeatures(properties());
rc.getContainerResponseFilters().add(new ServerResponseFilter());
rc.getContainerResponseFilters().add(new ServerHeaderFilter());
HttpServer server = GrizzlyServerFactory.createHttpServer(baseUri, rc);
try {
server.start();
System.err.print("Server started.\n");
synchronized (JerseyWebServer.class) {
JerseyWebServer.class.wait();
@@ -48,27 +55,16 @@ public void run() throws Exception {
}
private Map<String, Object> properties() {
Map<String, Object> properties = new HashMap<String, Object>();
Map<String, Object> properties = new HashMap<>();
properties.put("dbhost", dbHost);
properties.put("dbport", dbPort);
return properties;
}
private static URI getBaseUrl(final int port) {
private static URI getBaseUrl(int port) {
return UriBuilder.fromUri("http://0.0.0.0/").port(port).build();
}
public static void main(final String[] args) throws Exception {
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(options(), args);
int port = Integer.parseInt(cmd.getOptionValue("port", "8080"));
String dbHost = cmd.getOptionValue("dbhost", "localhost");
int dbPort = Integer.parseInt(cmd.getOptionValue("dbport", "3306"));
new JerseyWebServer(port,dbHost, dbPort).run();
}
private static Options options() {
Options options = new Options();
options.addOption("port", true, "server port");
View
@@ -2,56 +2,54 @@
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.jersey.spi.resource.Singleton;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.jersey.spi.resource.Singleton;
@Provider
@Singleton
@Provider
@Produces(APPLICATION_JSON)
public class JsonMessageBodyWriter implements MessageBodyWriter<Object> {
private final ObjectMapper mapper = new ObjectMapper();
@Override
public boolean isWriteable(
final Class<?> type,
final Type genericType,
final Annotation[] annotations,
final MediaType mediaType) {
Class<?> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType) {
return "json".equals(mediaType.getSubtype());
}
@Override
public long getSize(
final Object t,
final Class<?> type,
final Type genericType,
final Annotation[] annotations,
final MediaType mediaType) {
Object t,
Class<?> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType) {
return -1; // We can't predict the output size at this point
}
@Override
public void writeTo(
final Object t,
final Class<?> type,
final Type genericType,
final Annotation[] annotations,
final MediaType mediaType,
final MultivaluedMap<String, Object> httpHeaders,
final OutputStream entityStream)
Object t,
Class<?> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType,
MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream)
throws IOException, WebApplicationException {
mapper.writeValue(entityStream, t);
}
View
@@ -2,24 +2,19 @@
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import java.util.HashMap;
import java.util.Map;
import com.sun.jersey.spi.resource.Singleton;
import java.util.Collections;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import com.sun.jersey.spi.resource.Singleton;
@Singleton
@Path("/json")
public class JsonResource {
@GET
@Produces(APPLICATION_JSON)
public Object json() {
Map<String, String> data = new HashMap<String, String>(1);
data.put("message", "Hello, World!");
return data;
return Collections.singletonMap("message", "Hello, World!");
}
}
View
@@ -0,0 +1,42 @@
package hello;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache;
import com.github.mustachejava.MustacheFactory;
import com.github.mustachejava.resolver.ClasspathResolver;
import com.sun.jersey.api.view.Viewable;
import com.sun.jersey.spi.resource.Singleton;
import com.sun.jersey.spi.template.ViewProcessor;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import javax.ws.rs.ext.Provider;
@Singleton
@Provider
public class MustacheViewProcessor implements ViewProcessor<Mustache> {
private final MustacheFactory factory;
public MustacheViewProcessor() {
factory = new DefaultMustacheFactory(new ClasspathResolver());
}
@Override
public Mustache resolve(String name) {
return factory.compile(name);
}
@Override
public void writeTo(Mustache t,
Viewable viewable,
OutputStream out) throws IOException {
try (BufferedWriter writer =
new BufferedWriter(new OutputStreamWriter(out, UTF_8))) {
t.execute(writer, viewable.getModel());
}
}
}
View
@@ -1,19 +1,17 @@
package hello;
import com.sun.jersey.spi.resource.Singleton;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import com.sun.jersey.spi.resource.Singleton;
@Singleton
@Path("/plaintext")
public class PlaintextResource {
@GET
@Produces("text/plain")
public Object plaintext() {
String data = "Hello, World!";
return data;
return "Hello, World!";
}
}
View
@@ -0,0 +1,15 @@
package hello;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;
public class ServerHeaderFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request,
ContainerResponse response) {
response.getHttpHeaders().add("Server", "Grizzly");
return response;
}
}
View

This file was deleted.

Oops, something went wrong.
View
@@ -1,35 +1,36 @@
package hello;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider;
import com.sun.jersey.spi.resource.Singleton;
import hello.domain.Fortune;
import hello.domain.World;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider;
import com.sun.jersey.spi.resource.Singleton;
@Provider
@Singleton
public class SessionFactoryProvider extends SingletonTypeInjectableProvider<Context, SessionFactory> {
@Provider
public class SessionFactoryProvider
extends SingletonTypeInjectableProvider<Context, SessionFactory> {
public SessionFactoryProvider(@Context final ResourceConfig rc) {
public SessionFactoryProvider(@Context ResourceConfig rc) {
super(SessionFactory.class, createSessionFactory(rc));
}
private static SessionFactory createSessionFactory(final ResourceConfig rc) {
private static SessionFactory createSessionFactory(ResourceConfig rc) {
Configuration configuration = new Configuration().configure();
String url = configuration.getProperty("hibernate.hikari.dataSource.url");
url = url.replace("//localhost:3306/", "//" + rc.getProperty("dbhost") + ":" + rc.getProperty("dbport") + "/");
url = url.replace(
"//localhost:3306/",
"//" + rc.getProperty("dbhost") + ":" + rc.getProperty("dbport") + "/");
configuration.setProperty("hibernate.hikari.dataSource.url", url);
configuration.addAnnotatedClass(World.class);
configuration.addAnnotatedClass(Fortune.class);
ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration.getProperties());
return configuration.buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
builder.applySettings(configuration.getProperties());
return configuration.buildSessionFactory(builder.build());
}
}
View
@@ -12,17 +12,16 @@
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
public String message;
public Fortune() { }
public Fortune(final int id, final String message) {
public Fortune(int id, String message) {
this.id = id;
this.message = message;
}
@Override
public int compareTo(final Fortune other)
{
public int compareTo(Fortune other) {
return message.compareTo(other.message);
}
}
View
@@ -7,10 +7,10 @@
@Entity
public class World {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
public int randomNumber;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int id;
public int randomNumber;
}
View
@@ -9,12 +9,12 @@
<th>id</th>
<th>message</th>
</tr>
{{#fortunes}}
{{#.}}
<tr>
<td>{{id}}</td>
<td>{{message}}</td>
</tr>
{{/fortunes}}
{{/.}}
</table>
</body>
</html>