想知道如何开始使用Java EE Microservices? 使用Java EE API只需很少的步骤即可部署微服务。 许多人认为Java EE无法与微服务一起使用,但事实并非如此……特别是如果您仅使用服务所需的Java EE规范。 在这篇简短的文章中,我将演示如何使用Java EE快速开发微服务,然后将其部署到Payara Micro。
要下载示例项目,请转到GitHub: https : //github.com/juneau001/SimpleService
就本示例而言,我将使用NetBeans,但是任何Java IDE都足够。 首先,创建一个Maven Web应用程序并将其命名为SimpleService。 接下来,创建两个Java包:org.simpleservice和org.simpleservice.entity。 完成后,该项目应类似于下图:
现在,许多人认为微服务不应该连接到企业数据库,但是我将其留给那些有争议的人使用。 在此示例中,我将把该服务连接到中央Apache derby数据库以获取数据,因为我认为这在许多组织中都是非常可能的情况。 在这种情况下,我们将创建一个“建议的名称”数据库Web服务,该服务将查询即将到来的EE4J平台的建议名称的数据库表。 要创建基础结构,请连接到本地Apache Derby数据库并使用以下SQL创建它:
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');
接下来,打开SimpleService项目的Maven POM文件并添加以下依赖项:
<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,并在其中创建一个名为SuggestedName的实体类。 为简便起见,我不会在这里介绍所有源代码,但是您可以在GitHub( https://github.com/juneau001/SimpleService )上查看源代码。
接下来,我们需要实现我们的JAX-RS Web服务类。 要为JAX-RS配置Java EE应用程序,让我们创建一个名为ApplicationConfig的类并将其放在org.simpleservice包中:
import java.util.Set;
import javax.ws.rs.core.Application;/**** @author Juneau*/
@javax.ws.rs.ApplicationPath("rest")
public class ApplicationConfig extends Application {@Overridepublic Set<Class<?>> getClasses() {Set<Class<?>> resources = new java.util.HashSet<>();resources.add(org.simpleservice.SuggestedNameService.class);return resources;}
}
接下来,我将自己创建JAX-RS Web服务类,并将其命名为“ SuggestedNameService”。 这是SuggestedNameService类的源。 请注意,我已经注入了一个持久性单元。 我接下来会讲。
@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中轻松完成此操作。 将持久性单元命名为SimpleService_1.0PU并使用EclipseLink作为提供者。 此时不要添加数据源。
创建完成后,打开持久性单元并添加连接信息。 在这种情况下,我将连接到接下来要定义的JTA数据源。 数据源名为DerbyDataSource,因此持久性单元(persistence.xml)的内容应如下所示:
<?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中执行此操作,只需右键单击该项目,然后选择“新建”->“ Web”->“标准部署描述符(web.xml)”,然后单击“完成”。 生成web.xml部署描述符后,将数据源添加到其中。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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。
首先,请从以下网站下载最新的Payara Micro JAR文件:https://www.payara.fish/payara_micro
下载完成后,可以通过打开命令提示符并使用本地Java运行时执行JAR来启动服务器,方法是键入:
java -jar payara-micro-4.1.2.174.jar
要部署我们创建的应用程序(微服务),只需在执行Payara Micro JAR时使用–deploy选项,然后将其指向SimpleService WAR文件:
java -jar payara-micro-4.1.2.174.jar --deploy SimpleService-1.0.war
现在可以通过以下URL访问SimpleService微服务:http:// localhost:8080 / SimpleService-1.0 / rest / suggestedNameService
翻译自: https://www.javacodegeeks.com/2017/11/easy-java-ee-microservices-payara-micro.html