SAP CAP篇一:快速创建一个Service,基于Java的实现

这个博客上,还没有写过SAP技术栈的东西,这次开个头,写个最近研究SAP CAP的摸索过程。虽然SAP CAP(Cloud Application Model)关注在Cloud的开发,我这些文章里面还是偏重本地上的尝试。

本系列文章

SAP CAP篇一: 快速创建一个Service,基于Java的实现
SAP CAP篇二:为Service加上数据库支持
SAP CAP篇三:定义Model
SAP CAP篇四:为CAP添加Fiori Elements程序(1)
SAP CAP篇五:为CAP添加Fiori Elements程序(2)
SAP CAP篇六:为CAP添加Fiori Elements程序(3)
SAP CAP篇七:为CAP添加Fiori Launchpad入口 (Sandbox环境)
SAP CAP篇八:为CAP添加App Router并支持Fiori Launchpad (Sandbox环境)
SAP CAP篇九:升级为SAP CDS 7.0, CAP Java 2以及Spring Boot 3
SAP CAP篇十:理解Fiori UI的Annoation定义
SAP CAP篇十一:支持Media Object:图片、附件等
SAP CAP篇十二:AppRouter 深入研究

前置内容

首先,得明白什么是CAP。用我自己的话来讲,CAP是SAP推出的、适配Cloud Native的编程框架。它提供了一系列架构层面的抽象,并提供了基于Nodejs和Java两个技术栈的实现。

CAP的官方网站,点击链接访问。

其次,CAP的实现中,很大程度上集成了SAP这些年来的技术方案。譬如,CAP开发的Service或者API,可以很方便的提供oData的语义。oData是微软提出来的基于REST的语义解释框架,详情参阅oData官方网站

再次,在本地开发CAP,需要的一些基本组件及其安装。

本文中使用如下软件或插件:

  • Visual Studio Code。
  • Visual Studio Code插件
    • Extension Pack for Java
    • SAP Fiori Tools - Extension Pack
    • Spring Boot Extension Pack
    • SAP CDS Language Support
  • Maven
  • Nodejs and NPM
  • NPM packages
    • @sap/cds-dk

当然,在国内的网络环境,常用nodejs和maven的mirror设置都要设置好——这能极大的提升开发效率。

现在,开始创建一个Project

现在可以创建一个project了。

创建Project的几种方式

使用Maven命令

可以使用如下的Maven命令:

mvn org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate -DarchetypeArtifactId="cds-services-archetype" -DarchetypeGroupId="com.sap.cds" -DarchetypeVersion="1.32.0" -DgroupId="com.alvachien.learncap" -DartifactId="demo-service"

使用Visual Studio Code

打开Visual Studio Code的 Command Palette...,输入 ‘Java: Create Project’,在列表中选择’Maven: create from archetype’。

在弹出对话框中输入archetype: cds-service-archetype

CDS SDK命令

使用CDS SDK的命令同样可以创建一个Project。

cds init demo-service --add java

注意,·cds·其实是nodejs的命令。所以,我理解里面,SAP CDS自身的Tools都是基于Nodejs的。

为新建的Project添加一个Service

srv文件夹下新建一个cds文件

该cds文件定义DemoService,并为其添加一个Entity。这里,Entity的概念来自于oData。可以自行查看oData的文档。

service DemoService {
    entity DemoEntity {
        key ID: Integer;
        title: String(111);
        descr: String(1111);
    }
}

添加Service的实现

Application.java文件的同层,创建一个handlers的文件夹,并创建一个DemoService.java的文件:

package com.alvachien.learncap.demoservice.handlers;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Component;

import com.sap.cds.services.cds.CdsCreateEventContext;
import com.sap.cds.services.cds.CdsReadEventContext;
import com.sap.cds.services.cds.CdsService;
import com.sap.cds.services.handler.annotations.On;
import com.sap.cds.services.handler.annotations.ServiceName;

@Component
@ServiceName("DemoService")
public class DemoService {
    private Map<Object, Map<String, Object>> dataInMemory = new HashMap<>();

    @On(event = CdsService.EVENT_CREATE, entity = "DemoService.DemoEntity")
    public void onCreate(CdsCreateEventContext context) {
        context.getCqn().entries().forEach(e -> dataInMemory.put(e.get("ID"), e));
        context.setResult(context.getCqn().entries());
    }

    @On(event = CdsService.EVENT_READ, entity = "DemoService.DemoEntity")
    public void onRead(CdsReadEventContext context) {
        context.setResult(dataInMemory.values());
    }    
}

编译项目

运行maven命令来编译项目。

mvn clean install

命令运行成功后,项目中添加了一堆文件,主要在 srv/src/resources/edmx 下.
生成的文件

运行及测试

运行项目

运行项目来启动Service。

mvn clean spring-boot:run

打开浏览器

打开$metadata链接可以查看详细的Odata Metadata文件。

这比之前的Olingo 项目容易太多,当然Olingo项目也是SAP开发并捐献给Apache孵化的。

测试项目

这个Service已经可以正常运行。
使用Postman来测试该项目。

Postman测试Post命令

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值