CDN_delphi数据库_多少钱

时间:2022-01-15 12:20       来源: 微辰云

CDN_delphi数据库_多少钱

本文是包含以下主题的三个系列教程的第三篇:

在前面的教程中,我们演示了如何在SAP NetWeaver中使用JPA 2并使用它构建数据库支持的OData服务。上一个教程的主要内容是如何对普通jpa1执行相同的操作。因此,本文针对那些在SAP NetWeaver上使用jpa1作为Java的开发人员(例如,因为他们绑定到SAP NetWeaver的特定版本)。

使用jpa1从数据库加载OData实体的主要缺点是,作为Olingo的JPA处理器,您必须手动将JPA实体映射到OData实体需要jpa2元模型。在本文的过程中,我们将演示一种解决映射问题的通用方法。

我们将使用ApacheOlingo框架实现OData服务,特别是ApacheOlingo的2.0.8版本。请注意,sapnetweaver7.5是一个JEE5应用服务器,这意味着它不提供JAX-RS实现。因此,我们必须提供自己的JAX-RS实现。我们决定使用apachecxf,但是如果您愿意,可以使用不同的实现,比如RESTEasy。在我们的场景中,需要以下工件:

commons-codec-1.6.jarcxf-api-2.7.6.jar文件cxf-rt-bindings-xml-2.7.6.jarcxf-rt-core-2.7.6.jarcxf-rt-frontend-jaxrs-2.7.6.jarcxf-rt-transports-http-2.7.6.jargeronimo-javamail_1.4_spec-1.7.1.jargson-2.4.jar文件javax.ws.rs文件-api-2.0-m10.jar标准jaxb-impl-2.1.13.jarolingo-odata2-annotation-processor-api-2.0.8.jarolingo-odata2-annotation-processor-core-2.0.8.jarolingo-odata2-api-2.0.8.jarolingo-odata2-api-annotation-2.0.8.jarolingo-odata2-core-2.0.8.jarolingo-odata2-jpa-processor-api-2.0.8.jarolingo-odata2-jpa-processor-core-2.0.8.jarstax2-api-3.1.1.jar文件woodstox-core-asl-4.2.0.jarwsdl4j-1.6.3.jar文件xmlschema-core-2.0.3.jar

将所有工件捆绑在一个外部库"olingo/lib"DC中,并将api和存档公开为DC的公共部分。

创建一个带有EAR、EJB和WEB DC的JPA2 JEE应用程序,使EJB和WEB DC依赖于您的WEB-DC中的"olingo/lib"DC。

,编辑网站.xml文件包括以下内容:

重要的位是

OlingoClassloaderFilter(应该熟悉上一个教程)ODataServlet(它是由Olingo库提供的通用servlet)和AnnotationServiceFactory,在jpa1的例子中,这就是神奇发生的地方。

让我们看一下AnnotationServiceFactory:

本质上,我们向ODataService提供OData实体所在的包,并创建Olingo框架所需的对象。请注意,我们的JPA实体所在的包不同。

为了让您更好地了解这两个不同的实体,这里有一个OData实体的示例:

这个实体稍后将在/Data.svc/进程(提醒自己网站.xml文件)。现在,对于流程实体,我们在包中有一个单独的JPA实体类com.yourpackage.domain域.entity:

当然,问题是我们如何告知Olingo框架第二个实体的存在,更重要的是,我们如何让Olingo理解它需要从我们的数据库中加载相应的JPA实体?

这正是我们在AnnotationServiceFactory中使用的PersistentDataSource发挥作用的地方。这也是我们"钻取"Olingo框架并插入自定义实体加载机制的确切位置。Olingo提供了一个接口数据源,其中包含任何OData实体数据源需要提供给框架的所有方法。Olingo本身提供了一个annotationymemoryds,它本质上是应用程序中存在的所有实体的内存哈希映射。然而,我们的PersistentDataSource将弥补我们数据库之间的差距,关联的JPA实体和OData实体:

基本思想是在类的静态初始化代码中保存存在于我们的应用程序中的所有OData实体的映射(在我们的示例中只有两个实体Process和ProcessStep),该类将OData实体映射到数据存储,而数据存储又是使用DAOs加载关联JPA的ejb然后在两个实体类之间执行映射。使用这种方法,返利购,我们可以确保数据存储接口的大部分(readData方法和deleteData)的类型安全。不幸的是,接口的某些方法是用Object类型化的,因此我们除了使用Object之外别无选择。

现在,AbstractDataStore接口如下:

数据存储的(抽象)基本实现(对于所有实体来说都是通用的)如下:

本质上,所有数据存储都依赖于两种机制:

从数据库加载与OData实体相关联的JPA实体并对其执行CRUD操作的(通用)JPA DAO将一个实体转换为另一个实体的抽象映射方法(加上提供每个实体类的抽象方法)。

为了让您更清楚地了解,我们将为流程实体提供一个特定的示例数据存储。从这一点来说,代码本身相当直接,应该是不言自明的。

注意,代码中唯一"丑陋"的部分是我们必须硬编码这个特定实体在GetRelatedEntityTypeClass和readRelatedData方法中的相关实体的信息。

为了完整性,我们将包括泛型DAO的例子(这实际上与本教程的Olingo部分无关):

在本教程中,我们演示了如何构建泛型映射机制,数据分析工具有哪些,以(主要)类型安全的方式在OData实体和JPA实体之间进行转换(正如我们指出的,免费企业管理软件,这是由于Olingo库本身的接口限制)。执行的必要性源于在Olingo中缺少本机jpa1支持。