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

news2024/12/26 10:53:46

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

文章目录

  • 前置内容
  • 现在,开始创建一个Project
    • 创建Project的几种方式
      • 使用Maven命令
      • 使用Visual Studio Code
      • CDS SDK命令
  • 为新建的Project添加一个Service
    • 在`srv`文件夹下新建一个cds文件
    • 添加Service的实现
    • 编译项目
  • 运行及测试
    • 运行项目
    • 测试项目

前置内容

首先,得明白什么是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命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当Kotlin Flow与Channel相逢

Flow之所以用起来香&#xff0c;Flow便捷的操作符功不可没&#xff0c;而想要熟练使用更复杂的操作符&#xff0c;那么需要厘清Flow和Channel的关系。 本篇文章构成&#xff1a; 1. Flow与Channel 对比 1.1 Flow核心原理与使用场景 原理 先看最简单的Demo&#xff1a; fun…

编写 LuCI CBI 模型

编写 LuCI CBI 模型 CBI模型是描述UCI配置文件结构的Lua文件&#xff0c;并且CBI解析器将lua文件转为HTML呈现给用户 。 所有 CBI 模型文件都必须返回类型为luci.cbi.Map的对象。 CBI 模型文件的范围由 luci.cbi 模块的内容和 luci.i18n 的转换函数自动扩展。 CBI控件类型汇总 …

如何使用ESP32-CAM构建一个人脸识别系统

有许多人识别系统使用签名、指纹、语音、手部几何、人脸识别等来识别人&#xff0c;但除了人脸识别系统。 人脸识别系统不仅可以用于安全目的来识别公共场所的人员&#xff0c;还可以用于办公室和学校的考勤目的。 在这个项目中&#xff0c;我们将使用 ESP32-CAM 构建一个人脸识…

eclipse for abap下载及配置安装

一&#xff0c;下载eclipse &#xff0c;地址 https://www.eclipse.org/downloads/download.php?file/oomph/epp/2023-03/R/eclipse-inst-jre-win64.exe 可以选择(大连东软信息学院)端口下载&#xff0c;这样开一些&#xff0c; 二&#xff1a;双击安装&#xff0c;安装FOR…

放弃手动测试,快来了解JMeter压测神器的安装和使用吧~~

目录&#xff1a;导读 引言 jmeter的安装 JMeter是干什么的 JMeter都可以做那些测试 JMeter的使用和组件介绍 下面我们进行XML格式的实战练习 jmeter与postman的区别 JSON的插件 另附视频教程资源 引言 你是否曾经为手动测试而苦恼&#xff1f;是不是觉得手动测试太费…

Windows Java JavaFX Idea 开发环境搭建

博文目录 文章目录 JavaFX 简单说明JavaFX 版本说明JavaFX 与 JDK 的关系JavaFX 与 JDK Modular (JDK 9 模块化系统)JavaFX 模块说明 (JavaFX 20)JavaFX Scene Builder构建 JavaFX 应用程序的两种选择 环境搭建 建议先阅读下方引用的官方文档, 与本章节做相互印证与理解版本选…

Vue 3组件传值 、组件通信

本文采用<script setup />的写法&#xff0c;比options API更自由。那么我们就来说说以下七种组件通信方式&#xff1a; props emit v-model refs provide/inject eventBus vuex/pinia 举个例子 本文将使用下面的演示&#xff0c;如下图所示&#xff1a; 上图中…

【社区图书馆】《新程序员005:开源深度指南 新金融背后的科技力量》

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰来给大家推荐一本书&#xff0c;此书的书名为新程序员005&#xff1a;开源深度指南 & 新金融背后的科技力量&#xff0c;为什么小雅兰今天要给大家推荐这样一本书呢&#xff1f;好啦&#xff0c;现在&#xff0c;…

[python][pcl]python-pcl案例之兔子显示

兔子pcd文件下载&#xff1a;firc.lanzoux.com/iLfSgg749ab# -*- coding: utf-8 -*- # Point cloud library import pcl import pcl.pcl_visualization# Opencv # import opencv import cv2def main():# These are track bar initial settings adjusted to the given pointclou…

牛客网Verilog刷题——VL12

牛客网Verilog刷题——VL12 题目答案 题目 4bit超前进位加法器的逻辑表达式如下&#xff1a; G i G_i Gi​ A i A_i Ai​ B i B_i Bi​&#xff0c; P i P_i Pi​ A i A_i Ai​ ⊕ \oplus ⊕ B i B_i Bi​   和&#xff1a; S i S_i Si​ P i P_i Pi​ ⊕ \oplus ⊕ C i − 1…

DHCP协议详解

DHCP是什么 1.1 DHCP定义 DHCP&#xff08; Dynamic Host Configuration Protocol&#xff0c; 动态主机配置协议&#xff09;定义&#xff1a; 存在于应用层&#xff08;OSI&#xff09; 前身是BOOTP&#xff08;Bootstrap Protocol&#xff09;协议 是一个使用UDP&#xff08…

如何正确选择集体渲染(云渲染)和gpu离线渲染

在数字娱乐领域&#xff0c;渲染是制作高质量影像的关键步骤之一。随着技术的不断发展和应用的广泛普及&#xff0c;渲染方式也在不断演进。目前&#xff0c;集体渲染&#xff08;云渲染&#xff09;和GPU离线渲染是两种比较流行的渲染方式。那么&#xff0c;哪种方式会更快呢&…

一文了解什么是5G

5G是第五代移动网络。它是继1G、2G、3G、4G网络之后的新的全球无线标准。5G 支持一种新型网络&#xff0c;旨在将几乎所有人和所有事物连接在一起&#xff0c;包括机器、物体和设备。 一、前几代移动网络和5G有什么区别 第一代 – 1G 1980 年代&#xff1a;1G 传送模拟语音。…

软件测试标准升级|新版25000标准解读

广电计量 目录 收起 一、覆盖软件产品八大特性的测试依据及准则 二、信息安全测试的关键要点 三、兼容性测试的关键要点 四、功能测试的关键要点 五、性能效率测试的关键要点 六、易用性测试的关键要点 七、可靠性测试的关键要点 八、维护性测试的关键要点 九、可移植…

Linux各文件权限

参考:https://blog.csdn.net/weixin_45423515/article/details/126652740 一、切换root权限 既然root是最大的权限&#xff0c;那么这里就来了解一下如果切换到root用户。 su - //切换成root 这就是切换人的权限&#xff0c;但是大多数情况是root权限不会轻易的分给普通用户…

NIS服务

NIS 文章目录 NIS一、NIS二、简介2.1 NIS的产生2.2 什么是NIS&#xff1f; 三、NIS的相关组件3.1 服务端3.1.1 配置文件3.1.2 主要服务3.1.3 数据库相关指令 3.2 客户端3.2.1 配置文件3.2.2 主要指令 四、NIS环境4.1 NIS所需的软件包4.2 NIS Server (Master/Slave)4.3 NIS Clie…

unity3d---物体加点击事件

目录 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 4.物体单独响应点击事件 5.控制脚本实现各物体的点击事件 6.点击ui时屏蔽 物体点击事件 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 2d…

机器学习 Rider数据集分析和预测

介绍数据集 ride_id&#xff1a;乘车ID rideable_type&#xff1a;乘车类型 started_at&#xff1a;开始日期 ended_at &#xff1a;结束日期 start_station_name&#xff1a;开始站的名字 start_station_id&#xff1a;开始站的ID end_station_name&#xff1a;结束站的名字 …

魔百和UNT403G 国科芯片2+8 安卓9.0 免拆机纯净线刷包

固件特点&#xff1a; 1、本固件在UNT403G 盒子上测试可用&#xff0c; 其它盒子请慎 重使用&#xff1b; 2、支持原装遥控器&#xff0c;语音蓝牙遥控器&#xff1b; 3、固件压缩包有刷机教程&#xff0c;请一定仔细阅读。 4、刷机后三网通用&#xff0c;可自由安装应用&#…

NewBing 边栏快捷插件没有了!如何解决?如何脱离浏览器使用 New Bing?

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…