当前位置: 首页 > 知识库问答 >
问题:

用MySQL、JPA和Tomcat web服务器对Apache Olingo生成的OData服务进行CRUD操作

潘高岑
2023-03-14

我在学习一些示例,在这些示例中,我们可以使用Apache Olingo和MySQL、JPA和Tomcat web服务器生成OData服务。这个示例完全基于显示来自MySQL数据库的数据。

我如何能执行类似创建,更新和删除的操作基于以上的例子在链接。

service.java

import org.apache.olingo.odata2.jpa.processor.ref.factory.JPAEntityManagerFactory;
import org.apache.olingo.odata2.processor.api.jpa.ODataJPAContext;
import org.apache.olingo.odata2.processor.api.jpa.ODataJPAServiceFactory;
import org.apache.olingo.odata2.processor.api.jpa.exception.ODataJPARuntimeException;

public class TileCollectionListServiceFactory extends ODataJPAServiceFactory {

    private static final String PERSISTENCE_UNIT_NAME = "ABC";

    @Override
    public ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException {
        ODataJPAContext oDatJPAContext = this.getODataJPAContext();
        try {           
            oDatJPAContext.setEntityManagerFactory(JPAEntityManagerFactory.getEntityManagerFactory(PERSISTENCE_UNIT_NAME));
//          oDataJPAContext.setPersistenceUnitName(PUNIT_NAME);

//          EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
//          oDatJPAContext.setEntityManagerFactory(emf);
            oDatJPAContext.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);

            return oDatJPAContext;          
        } catch (Exception e) {         
            throw new RuntimeException(e);          
        }       
    }   
}
import java.io.Serializable;
import javax.persistence.*;

@Entity
@NamedQuery(name="Tilecollection.findAll", query="SELECT t FROM Tilecollection t")
public class Tilecollection implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int idtilecollection;

    private String icon;

    private String isAdmin;

    private String title;

    private String type;

    public Tilecollection() {
    }

    public int getIdtilecollection() {
        return this.idtilecollection;
    }

    public void setIdtilecollection(int idtilecollection) {
        this.idtilecollection = idtilecollection;
    }

    public String getIcon() {
        return this.icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public String getIsAdmin() {
        return this.isAdmin;
    }

    public void setIsAdmin(String isAdmin) {
        this.isAdmin = isAdmin;
    }

    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getType() {
        return this.type;
    }

    public void setType(String type) {
        this.type = type;
    }

}
<?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="ABC" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.wuerth.model.Tilecollection</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3307/XXXXXXXXXXXXXXXX"/>
            <property name="javax.persistence.jdbc.user" value="XXXXX"/>
            <property name="javax.persistence.jdbc.password" value="XXXXX"/>
        </properties>
    </persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ABC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>ODataServlet</servlet-name>
    <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>org.apache.olingo.odata2.core.rest.app.ODataApplication</param-value>
    </init-param>
    <init-param>
      <param-name>org.apache.olingo.odata2.service.factory</param-name>
      <param-value>com.wuerth.main.TileCollectionListServiceFactory</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ODataServlet</servlet-name>
    <url-pattern>/odata/v1/ABC_SRV/*</url-pattern>
  </servlet-mapping>

  <!-- CORS To allow access OData service by JavaScript in other domain  -->
  <filter>
      <filter-name>CorsFilter</filter-name>
      <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>CorsFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

<!DOCTYPE html>
 <html>
    <head>
        <meta charset="utf8">
        <title>OData</title>
    </head>## Heading ##
    <body>
        <h1>OData</h1><br><br>
        <a href="/ABC/odata/v1/ABC_SRV/">Service Document</a>
    </body>
</html>

请用一些好的例子和概念来指导我。

提前感谢你。

共有1个答案

霍伟彦
2023-03-14

您可以参考SCN博客关于mysql和Olingo Odata2的示例。我发现这个博客对开发我的应用程序很有帮助。

 类似资料:
  • 5.3 ABP分布式服务 - 集成OData 5.3.1 简介 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务。你可以在Abp中使用OData,只需要通过Nuget来安装Abp.Web.Api.OData. 5.3.2 安装 1. 使用Nuget安装 首先应该使用Nuget安装Abp.Web.Api.OData到我们的WebApi项目

  • 我在从服务器构建时遇到问题。我的项目是一个使用Netbeans IDE的Android应用程序。当我运行我的应用程序时,一切正常,编译器完全不报告任何错误。但是当我向服务器发送build Netbeans时,我会报告一个成功的构建,但是当我登录到构建服务器时,我看到的是一个构建失败并带有错误日志。 以下是我从生成服务器获得的错误日志: 构建失败/home/ec2 user/android sdk/

  • 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器启动脚本 5.1.4. mysql.server:MySQL服务器启动脚本 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 MySQL服务器,即mysqld,是在MySQL安装中负责大部分工作的主程序。服务器随附了几个相关脚

  • 因此,我正在尝试让框架设置来制作一个discord bot,它将检查用户专用服务器是否打开并相应地更新消息。我目前在本地网络中的一台独立计算机上运行Minecraft和Valheim服务器。 我试图使用微软的Ping类,但它不能Ping Valheim服务器。似乎Valheim正在使用UDP协议,所以我尝试使用UdpClient类来发送消息,但是它仍然处于“WaitingForActivation

  • 我在我的机器上使用LEMP(ubuntulinux服务器,Nginx,Mysql,PHP) 我已经按照这个教程进行了设置https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04 我可以使用命令行访问mysql(mysql-u user-p

  • null null Tomcat服务器正在运行servlet,为mySQL数据库执行一些业务逻辑和hibernate框架。 现在我有点糊涂了。两台服务器都能接收HTTP请求吗?就像servlet从网页接收https请求和我的apache服务器一样? 并且两者都可以连接到数据库--使用php的apache服务器,正如我提到的,同时使用servlet的tomcat?