Я наткнулся на SparkJava вчера. Это действительно интересный микро-фреймворк, особенно для Java, где на самом деле нет ничего микро и что-то подобное крайне необходимо Их сайт хорошо объясняет, как это работает, и начинает работу. Я был и работает в течение нескольких минут.
Я создаю демонстрации и доказательства концепций как часть моей работы и всегда ищу эффективный и простой способ сделать что-то. RESTful пример поймал мой взгляд. Я решил расширить это и показать, как вы можете легко предоставлять данные, хранящиеся в GigaSpaces.
Я создал веб-проект Maven с использованием архетипа Maven : создать цель,
mvn -DgroupId=com.gigaspaces.spark -DartifactId=gs-spark -DarchetypeArtifactId=maven-archetype-webapp
Я взял RESTful код, упомянутый выше. Поскольку я хочу запустить службу RESTful в GigaSpaces, я изменил код для реализации интерфейса SparkApplication и определения маршрутов в методе init ().
Я также создал web.xml как предложено здесь
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <filter> <filter-name>SparkFilter</filter-name> <filter-class>spark.servlet.SparkFilter</filter-class> <init-param> <param-name>applicationClass</param-name> <param-value>com.gigaspaces.spark.BooksService</param-value> </init-param> </filter> <filter-mapping> <filter-name>SparkFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Я изменил операции CRUD, чтобы идти против GigaSpace вместо карты. Полный код BooksService здесь,
package com.gigaspaces.spark; import static spark.Spark.delete; import static spark.Spark.get; import static spark.Spark.post; import static spark.Spark.put; import java.util.Random; import org.openspaces.core.GigaSpace; import org.openspaces.core.GigaSpaceConfigurer; import org.openspaces.core.space.UrlSpaceConfigurer; import spark.Request; import spark.Response; import spark.Route; import spark.servlet.SparkApplication; public class BooksService implements SparkApplication { /** * Map holding the books */ private GigaSpace gigaSpace; public void init() { if (gigaSpace == null) { gigaSpace = new GigaSpaceConfigurer(new UrlSpaceConfigurer( "/./bookSpace").space()).gigaSpace(); } // Creates a new book resource, will return the ID to the created // resource // author and title are sent as query parameters e.g. // /books?author=Foo&title=Bar post(new Route("/books") { Random random = new Random(); @Override public Object handle(Request request, Response response) { String author = request.queryParams("author"); String title = request.queryParams("title"); Book book = new Book(author, title); int id = random.nextInt(Integer.MAX_VALUE); book.setId(id + ""); gigaSpace.write(book); response.status(201); // 201 Created return id; } }); // Gets the book resource for the provided id get(new Route("/books/:id") { @Override public Object handle(Request request, Response response) { Book template = new Book(); template.setId(request.params(":id")); Book book = gigaSpace.read(template); if (book != null) { return "Title: " + book.getTitle() + ", Author: " + book.getAuthor(); } else { response.status(404); // 404 Not found return "Book not found"; } } }); // Updates the book resource for the provided id with new information // author and title are sent as query parameters e.g. // /books/<id>?author=Foo&title=Bar put(new Route("/books/:id") { @Override public Object handle(Request request, Response response) { String id = request.params(":id"); Book template = new Book(); template.setId(id); Book book = gigaSpace.read(template); if (book != null) { String newAuthor = request.queryParams("author"); String newTitle = request.queryParams("title"); if (newAuthor != null) { book.setAuthor(newAuthor); } if (newTitle != null) { book.setTitle(newTitle); } gigaSpace.write(book); return "Book with id '" + id + "' updated"; } else { response.status(404); // 404 Not found return "Book not found"; } } }); // Deletes the book resource for the provided id delete(new Route("/books/:id") { @Override public Object handle(Request request, Response response) { String id = request.params(":id"); Book template = new Book(); template.setId(id); Book book = gigaSpace.take(template); if (book != null) { return "Book with id '" + id + "' deleted"; } else { response.status(404); // 404 Not found return "Book not found"; } } }); // Gets all available book resources (id's) get(new Route("/books") { @Override public Object handle(Request request, Response response) { String ids = ""; Book[] books = gigaSpace.readMultiple(new Book()); for (Book book:books) ids = book.getId() + " " + ids; return ids; } }); } }
Для простоты я создаю GigaSpace внутри сервисного / веб-контейнера RESTful, но в реальных приложениях вы будете подключаться к внешнему кластеру GigaSpace, который можно изменить путем обновления URL-адреса GigaSpace. Для встроенного пространства используйте «/./bookSpace», а для удаленного пространства используйте URL «jini: // * / * / bookSpace».
Исходный код находится в репозитории github здесь . Файл README содержит инструкции о том, как запустить это на вашей стороне.
Как вы можете видеть, SparkJava является перспективной платформой. Очень простая настройка и код, необходимый для создания веб-приложений.
Надеюсь, что это поможет другим, ищущим простые веб-приложения на Java