Хотите знать, как начать работу с Java EE Microservices? Для развертывания микросервиса с помощью API-интерфейсов Java EE требуется всего несколько быстрых шагов. Многие считают, что Java EE слишком тяжелый для использования с микросервисами, но это просто не тот случай, особенно если вы используете только те спецификации Java EE, которые требуются для вашей службы. В этом кратком посте я покажу, как быстро разработать Microservice с Java EE, а затем развернуть его в Payara Micro.
Чтобы загрузить пример проекта, перейдите на GitHub: https://github.com/juneau001/SimpleService
Для целей этого примера я буду использовать NetBeans, но подойдет любая Java IDE. Для начала создайте веб-приложение Maven и назовите его SimpleService. Затем создайте два пакета Java: org.simpleservice и org.simpleservice.entity. После завершения проект должен выглядеть примерно так:
Сейчас многие считают, что микросервис не должен подключаться к корпоративной базе данных, но я оставлю это для тех, кто хочет спорить. В этом примере я подключу этот сервис к центральной базе данных Apache Derby для получения данных, потому что я считаю, что это очень вероятный сценарий во многих организациях. В этом случае мы создадим веб-службу базы данных «Предлагаемое имя», которая будет запрашивать в таблице базы данных предлагаемые имена для будущей платформы EE4J. Чтобы создать инфраструктуру, подключитесь к локальной базе данных Apache Derby и создайте ее, используя следующий SQL:
|
1
2
3
4
5
6
7
|
create table SUGGESTED_NAME (id numeric primary key,name varchar(150));insert into suggested_name values(1, 'Open EE');insert into suggested_name values(2, 'Open JOE');insert into suggested_name values(3, 'Cappucino'); |
Затем откройте файл POM Maven для проекта SimpleService и добавьте следующие зависимости:
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<dependencies> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.0.Final</version> </dependency> <dependency> <groupId>javax.ejb</groupId> <artifactId>javax.ejb-api</artifactId> <version>3.2</version> <type>jar</type> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derbyclient</artifactId> <version>10.14.1.0</version> </dependency> </dependencies> |
Обратите внимание, что нет зависимости Java EE. Это потому, что я использую только те зависимости, которые необходимы для службы. Каждая зависимость добавляется отдельно.
Затем создайте пакет org.simpleservice.entity и создайте в нем класс сущности с именем Предлагаемое имя. Для краткости я не буду вдаваться во все источники здесь, но вы можете проверить источники на GitHub ( https://github.com/juneau001/SimpleService ).
Нам нужно будет реализовать наш класс веб-сервиса JAX-RS дальше. Чтобы настроить приложение Java EE для JAX-RS, давайте создадим класс с именем ApplicationConfig и поместим его в пакет org.simpleservice:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
import java.util.Set;import javax.ws.rs.core.Application;/** * * @author Juneau */@javax.ws.rs.ApplicationPath("rest")public class ApplicationConfig extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new java.util.HashSet<>(); resources.add(org.simpleservice.SuggestedNameService.class); return resources; }} |
Затем я создам сам класс веб-службы JAX-RS и назову его «Предлагаемое имя сервиса». Вот источники для класса Additional_NameService. Обратите внимание, что я ввел блок персистентности. Я доберусь до этого дальше.
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
@Stateless @Path("suggestedNameService") public class SuggestedNameService { @PersistenceContext(unitName = "SimpleService_1.0PU") private EntityManager em; @GET @Path("{id}") @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public SuggestedName find(@PathParam("id") BigDecimal id) { SuggestedName suggestedName = null; try { suggestedName = (SuggestedName) em.createQuery("select object(o) from SuggesetedName o " + "where o.id = :id") .setParameter("id", id) .getSingleResult(); } catch (NoResultException ex){ System.out.println("Error: " + ex); } return suggestedName; } @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public List<SuggestedName> findAll() { List<SuggestedName> suggestedNames = null; try { suggestedNames = em.createQuery("select object(o) from SuggestedName o") .getResultList(); } catch (NoResultException ex){ System.out.println("Error: " + ex); } return suggestedNames; } protected EntityManager getEntityManager() { return em; } } |
Поскольку этот сервис будет подключаться к базе данных, я создам постоянный модуль для проекта. Это легко сделать в NetBeans, щелкнув правой кнопкой мыши по проекту и выбрав New-> Persistence-> Persistence Unit. Назовите постоянный модуль SimpleService_1.0PU и используйте EclipseLink в качестве поставщика. Не добавляйте источник данных на этом этапе.
После создания откройте модуль сохраняемости и добавьте информацию о соединении. В этом случае я подключусь к источнику данных JTA, который я определю следующим. Источник данных называется DerbyDataSource, поэтому содержимое модуля сохраняемости (persistence.xml) должно выглядеть следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="AuthorService_1.0PU" transaction-type="JTA"> <jta-data-source>java:global/DerbyDataSource</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties/> </persistence-unit> </persistence> |
Создайте дескриптор развертывания web.xml для проекта. Если вы делаете это в NetBeans, просто щелкните правой кнопкой мыши проект и выберите New-> Web -> ”Стандартный дескриптор развертывания (web.xml) и нажмите Finish. После создания дескриптора развертывания web.xml добавьте в него источник данных.
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <session-config> <session-timeout> 30 </session-timeout> </session-config> <data-source> <name>java:global/DerbyDataSource</name> <class-name>org.apache.derby.jdbc.ClientDriver</class-name> <server-name>localhost</server-name> <port-number>1527</port-number> <url>jdbc:derby://localhost:1527/acme</url> <user>acmeuser</user> <password>yourpassword</password> </data-source> </web-app> |
Вот и все для приложения Java EE. Теперь вы сможете скомпилировать проект в файл WAR и развернуть его на GlassFish, Payara или другом сервере приложений Java EE по вашему выбору. В этом случае давайте развернемся в Payara Micro.
Для начала загрузите последнюю версию файла JAR Payara Micro с веб-сайта: https://www.payara.fish/payara_micro
После загрузки сервер можно запустить, открыв командную строку и выполнив JAR с локальной средой выполнения Java, набрав:
|
1
|
java -jar payara-micro-4.1.2.174.jar |
Чтобы развернуть созданное нами приложение (микросервис), просто используйте параметр –deploy при выполнении JAR Payara Micro и укажите его в WAR-файле SimpleService:
|
1
|
java -jar payara-micro-4.1.2.174.jar --deploy SimpleService-1.0.war |
Микросервис SimpleService теперь доступен по следующему URL: http: // localhost: 8080 / SimpleService-1.0 / rest / предложилNameService
| Опубликовано на Java Code Geeks с разрешения Джоша Джуно, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Easy Java EE Microservices с Payara Micro
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |

