云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

MySQL数据库_数据库设计与开发_价格

小七 141 0

最近围绕S/4 Cloud SDK/新的云应用程序编程模型似乎有很多炒作。我过去曾短暂地使用过它,但我认为它还不够成熟,不足以投入时间在它上面。这里关于SCN的大多数博客都关注如何使用这个SDK构建新的应用程序("并行扩展")。尽管我不同意创建新应用程序的方法,我决定研究另一个用例:向现有的应用程序添加内容。

这将是一个非常诚实的调查我的旅程以及我遇到的所有问题。

一个"学校"应用程序

GitHub:https://github.com/serban-petrescu/spring-training-workshop

碰巧,我有一个小的Spring Boot应用程序。最初,我在公司内部举办的一个小型研讨会上创建了这个应用程序,但我将其重新设计,以探索SDK。

该应用程序的业务背景非常简单:我们希望帮助老师管理学生的成绩。基本上,我们在大学的一年里有三个阶段:

开学:老师从学校得到每组学生的名单。他应该可以把这些数据导入我们的应用程序。在这一年中:他将浏览他的小组,随机选择一些学生每周进行家庭作业检查,并给他的学生打分。他应该能够查看所有组/学生/成绩,将新成绩添加到系统中,还可以随机获得学生子集以进行家庭作业检查。年底:他将计算每个学生的平均成绩。我们的应用程序应该为他计算这个。

现有的代码库

在前面提到的研讨会中,我使用典型的Java+Spring构造实现了所有东西:

用于管理数据库结构的Flyway,分为三个迁移:初始数据结构、一些模拟数据和用于计算平均值的视图。在Java运行时中表示数据库表的JPA实体+一组Spring数据存储库,用于处理与DB的通信。简单的事务性服务,包含应用程序很少的业务逻辑。这些服务使用专门的类将实体映射到dto中。一些REST控制器,用于通过RESTAPI公开服务。

在开始使用SDK之前,我做了一个小的清理,升级到最新版本的Spring Boot,并最终编写了一个简单的docker compose文件,用于建立本地PostgreSQL数据库(而不是使用直接安装在我的机器上的数据库)。

我们的目标

让我们设想以下情况:我们构建了Spring应用程序并将其交付生产。一些外部应用程序已经在使用我们提供的restapi。现在,我们的客户联系我们,询问他是否可以将我们的应用程序集成到他的SAP生态系统中。

众所周知,SAP不久前做出了一个战略决定,将OData作为一个协议,云的服务器,因此经过一些分析,我们决定也为我们的应用程序提供OData API。毋庸置疑,现有的消费者不应该受到任何影响,也不应该受到尽可能小的影响。

因为我们不确定到底谁会使用我们的API,我们也认为同时提供OData V2和OData V4是有意义的(如果可能)。

从SDK开始

在阅读了一点之后,我意识到我只需要SDK的一小部分,即服务开发部分。不久前,我用Olingo创建V2服务,这肯定不是一个愉快的开发体验。

乍一看,我似乎只需要注释一些方法就可以了。嗯,想了想之后,我意识到必须有一些钩子或侦听器来触发注释扫描至少。

首先我阅读并浏览了一些博客。Carlos Roggan创建了一个很好的博客系列,致力于OData服务开发,所以我从那里开始。

管理我们的依赖关系

最初,我仔细分析了V2提供程序库,但为了在POM中获得正确的依赖关系,我做了很多努力。所以这是我的第一个论点:有很多依赖关系,很难通过它们导航。在BOM(s)中,列出了许多依赖项,有些是排除项,基本上迫使您导入BOM,即使您实际上只需要一个依赖项。

我最终包括了以下依赖项:

odata核心似乎有依赖项和代码,这些依赖项和代码与具体的odata版本解耦。odatav2似乎是一个类似BOM的工件,它引入了各种其他模块。odatav2 lib似乎是Olingo的一个肤浅的包装器。

这似乎吸引了很多我不想要的东西,但我没有更好的选择(不必排除我不关心的手动传递依赖):

然后我添加了V4依赖。

它们大部分与V2依赖对称,有两个恼人的区别:

odatav4 lib模块的版本不是通过BOM管理的。odatav4"BOM"是JAR类型的,尽管它完全不包含任何类。

结论:可以肯定的是,我们可以使用Maven Central来获取正确的依赖关系。但是在我看来,工件的组织方式并不干净,它们之间有很多依赖关系,迫使开发人员一步一步地进行反复试验并包含依赖关系,直到我们不再得到ClassNotFoundExceptions为止。

元数据

好的,所以我做的第一步是为我所有的工作手动创建元数据操作。这相当简单,我基本上只创建了三个实体(Group、Student、Grade)、一个复杂类型(AverageGrade)和几个函数导入(GetAverageGrades、GetHomeWorkCheck)来匹配其余操作。

我创建了两个元数据文件:一个用于V2,一个用于V4。这实际上是我第一次手工创建V4元数据文件,我必须说它比V2的对应文件要简单得多。

引导V2

下一步是引导v2api。我发现在我的依赖关系中,我有: