使用Payara Micro的Easy Java EE Microservices

想知道如何开始使用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 {
    @Override
    public 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