Облако Оракула сегодня повсюду. Это началось с того, что Ларри отрицал необходимость в облаке в течение очень (слишком) долгого времени и некоторых очень ранних объявлений и очень плохой доступности после прошлогоднего Открытого мира, который, кажется, больше не интересует. Но для меня у него все еще есть свои скрытые сокровища, и я верю, что у него есть все шансы завоевать своих клиентов. Прежде чем углубиться в пример, который покажет вам, как использовать JAX-RS с Джерси в облачной службе Oracle, я хочу немного познакомить вас с этой службой. Не стесняйтесь пропустить этот первый раздел.
Что, черт возьми, Oracle Cloud, и почему вы заботитесь?
Oracle Cloud — это маркетинговый термин. Он пытается захватить пару разных сервисов, использующих общую базу, называемую сервисами платформы. Эти два в основном являются Java и служба базы данных . Технически это не слишком ново. Мы говорим об Oracle Cloud Foundation , который уже давно существует.
Он находится внизу всего стека промежуточного программного обеспечения Oracle Fusion (по крайней мере, в доступных маркетинговых слайдах) и является базовым программным стеком, который работает на устройствах Exalogic. Наиболее важными частями для разработчиков Java являются Java EE 5 WebLogic Server и решение для балансировки нагрузки, которое называется Traffic Director. Важная часть здесь заключается в том, что вы в буквальном смысле можете получить свою личную долю реальной машины Exalogic в облаке за небольшую долю затрат, которые стоят даже самой маленькой стойке. И это работает в дата-центрах по всему миру. Полностью управляется, включая лицензии. Итак, оплатив свою ежемесячную лепту, вы покончили с административной частью. И если у вас когда-либо было сомнительное удовольствие иметь дело с лицензированием и поддерживаемыми платформами, вы немного знаете о его добавленной стоимости. Технически говоря, Java-сервис мало интересен. EE 5 устарела, и даже JRockit, основанный на Java SE 6, чувствует себя как незнакомец из прошлого со всеми новыми функциями в Java SE 7 и политикой окончания публичных обновлений для SE 6 . Но я по-прежнему считаю, что это хорошее начало, и я с нетерпением жду появления последней версии WebLogic 12c и достойной Java 7 в облаке.
Сервер WebLogic и JAX-RS
Ты помнишь древние времена? Java EE 5? Бегая с новейшей спецификацией EE 6 с тех пор, как пару лет назад вы чувствуете, что вам снова нужно водить машину, которая была у вас в качестве студента. Хотите верьте, хотите нет: JAX-R вообще не были частью EE 5. Именно по этой причине JAX-RS не работает из коробки на Oracle Java Service. Но вы, возможно, знаете, что команда Weblogic прекрасно осознает тот факт, что они запаздывают с внедрением EE, и поэтому они разворачивают функции, которые будут постепенно добавляться в базовый сервер со следующей версией спецификации до более ранних версий. То же самое произошло с JAX-RS еще в начале 2011 года. Начиная с 10.3.4, вы смогли упростить Джерси в качестве реализации JAX-RS, просто добавив библиотечную зависимость или упаковав ее в свое приложение. Это также работает для службы Java. Просто запустите новый проект Maven в вашей любимой среде IDE (может быть, это последняя версия NetBeans 7.3, которая уже давно вышла из печати) и добавьте
|
1
2
3
4
5
6
|
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.9</version> <scope>provided</scope></dependency> |
Джерси как зависимость с предоставленной областью. Другой указатель — версия Java, с которой вы должны скомпилировать. Убедитесь, что SE 7 где-то не проскальзывает, и установите плагин компилятора mavven для использования исходной и целевой версии 1.6. Как это ни печально … Следующее, что нужно добавить, — ссылка на библиотеку weblogic.xml для Джерси:
|
1
2
3
4
5
|
<library-ref> <library-name>jax-rs</library-name> <specification-version>1.1</specification-version> <implementation-version>1.9</implementation-version></library-ref> |
Который просто говорит контейнеру добавить это к загрузчику классов. Как правило, вам придется сначала развернуть его в своем домене. Но поверьте мне: он уже есть, и вы просто можете его использовать. Если вы используете NetBeans и начинаете с нового мастера «RESTful Web Services from Patterns», у вас может возникнуть пара дополнительных (ненужных) зависимостей, но это избавит вас от добавления конфигурации Jersey в ваш файл web.xml, который должен выглядеть как следующее:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
<servlet> <servlet-name>ServletAdaptor</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>net.eisele.primeui.cloud</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ServletAdaptor</servlet-name> <url-pattern>/webresources/*</url-pattern> </servlet-mapping> |
И просто регистрирует сервлет REST вместе с путем сканирования пакетов для вашей аннотированной реализации. Выберите то, что вам нравится. Внимательно следуя этому примеру, вы должны знать, что позже я собираюсь жестко закодировать URL-адрес службы в JavaScript. Остерегайтесь части ‘/ webresources’.
Добавление некоторого JSON
Вы наверняка заметили ссылку на пакет et.eisele.primeui.cloud. Давайте посмотрим на класс:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
@Path('countries')public class RestResource {//...@GET @Produces('application/json') public String getJson(@QueryParam('query') String query) { String[] raw = { 'Albania', 'Algeria',//...}; List<ValueHolder> countries = new ArrayList<ValueHolder>(); for (int i = 0; i < raw.length; i++) { countries.add(new ValueHolder(raw[i])); } Gson gson = new Gson(); return gson.toJson(countries); }} |
|
01
02
03
04
05
06
07
08
09
10
|
public class ValueHolder { public ValueHolder() {} public ValueHolder(String label) { this.label = label; this.value = 'v_' + label; } private String label; private String value;} |
Это в основном содержит строку [] из стран. Каждая запись преобразуется в объект ValueHolder и добавляется в ArrayList, который преобразуется в JSON с помощью библиотеки Google gson. Это вторая зависимость, которую мы должны включить в pom.xml.
|
1
2
3
4
5
6
|
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.2</version> <scope>compile</scope> </dependency> |
Убедитесь, что это включено в ваше приложение, используя область компиляции. В основном сделано сейчас. Вы заметили @QueryParam (‘запрос’). Я строю еще немного логики вокруг выбора правильных записей из String [], чтобы решить, какой ValueHolder вернуть. Для полного примера обратитесь к RestResource на github . Теперь нам нужен хороший внешний интерфейс.
Prime-UI на помощь
Все говорят о JavaScript в эти дни, и я подумал, что это может быть хорошим способом показать некоторые вещи с последним потомком Primefaces под названием Prime-UI. Эти ребята проделали большую работу, вытеснив свою уже известную и широко используемую библиотеку JSF PrimeFaces в мир jQuery, предоставив библиотеку виджетов. Получите все необходимое на веб-сайте PrimeFaces , загрузив zip-файл prime-ui. Если вы начали с веб-проекта в NetBeans и не добавили JSF, у вас получится симпатичный маленький файл jsp в папке webapp. Откройте его и внесите в него некоторые изменения и настройки. Наиболее важными из них являются объявление типа документа HTML5 и необходимый импорт JavaScript:
|
1
2
3
4
5
|
<%@page contentType='text/html' pageEncoding='UTF-8'%><!DOCTYPE html> <!-- header, title, all the other stuff you need --> <!-- jQuery --> <script src='js/vendor/jquery.js'></script> |
|
1
2
|
<!-- jQuery UI --><script src='js/vendor/jquery-ui.js'></script> |
|
1
2
|
<!-- Prime UI Core --><script src='js/core/core.js'></script> |
|
1
2
|
<!-- Prime UI Input Text --><script src='js/inputtext/inputtext.js'></script> |
|
1
2
|
<!-- Prime UI Autocomplete --><script src='js/autocomplete/autocomplete.js'></script> |
Пример автозаполнения привязывает поле ввода текста к бэкэнду и предоставляет функции опережающего ввода. Предположим, у вас есть служба отдыха, запущенная выше, теперь вы просто добавляете следующий JavaScript-код в ваш головной раздел:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<script type='text/javascript'> $(function() { $('#remote').puiautocomplete({ effect: 'fade', effectSpeed: 'fast', completeSource: function(request, response) { $.ajax({ type: 'GET', url: './webresources/countries', data: {query: request.query}, dataType: 'json', context: this, success: function(data) { response.call(this, data); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); } }); } }); }); </script> |
И добавьте тег ввода в ваш раздел тела страницы:
|
1
|
<input id='remote' name='remote' type='text'/> |
Это все, что вам нужно сделать. Одно маленькое замечание. Если вы собираетесь развернуть приложение как есть, перед вами появится экран входа в систему. Для того, чтобы открыть его для публики, вы должны добавить пустой
|
1
|
<login-config/> |
элемент к вашему web.xml. Теперь добавьте облако в вашу среду IDE и разверните приложение в пробном экземпляре. Если вы используете мои исходники github , это должно выглядеть так:
в зависимости от запроса он возвращает более точные результаты. Поступая так, почтальон выглядит так:
Увезти
Надеюсь, вы вообще не ожидали, что это будет ракетостроение. Это основной пост, напоминающий о том, что большинство разработчиков серверов WebLogic, возможно, уже знали. Это одно из самых больших преимуществ, но также и большой недостаток Oracle Java Cloud Service. Если вы знаете WebLogic, вам, скорее всего, он понравится. Если вы на стороне Open Source, вы можете столкнуться с проблемами, которые хорошо известны ребятам из Oracle Middleware, но не вам. EE 5 не настолько завершен, как EE 6, и EE 7 будет лишь немного лучше в закрытии специфических отличий вендора между всеми различными реализациями. Но опять же: это не что-то новое для вас, верно? А теперь иди: проведи тест-драйв и поделись своим опытом! Ждем чтения о них!
Ссылка: Prime-UI, JAX-RS с Джерси и Gson на Oracle Cloud от нашего партнера по JCG Маркуса Эйзела ( Markus Eisele) из блога « Разработка программного обеспечения для предприятий с использованием Java» .


