如何将MySQL数据库暴露为OData

19

我目前拥有一个mySQL数据库,并希望使用OData与它进行交互。

换句话说,我想以这种形式公开数据:http://services.odata.org/Northwind/Northwind.svc/

我找到了一些关于如何做到这一点的教程(例如http://msdn.microsoft.com/en-us/vs2010trainingcourse_buildingappandservicesusingodatavs2010_topic3.aspx),但需要使用Microsoft Visual Studio。 但我是MAC用户。

我还查看了odata主页上的库(在库下面,然后是mysql)。 但我无法让它们工作。

是否有任何简单易用的库可以为我处理这个问题?

非常感谢您的帮助!!


如果你指的是第67页,那么这一定是个打字错误。前一个段落讲了如何为IIS配置一个名为NorthWindQueryProvider.php的文件。所以我会尝试这个文件。我想他们把NorthWind和WordPress搞混了。我会将所有“WordPress”的引用替换为“NorthWind”。顺便说一下,我现在意识到这个4步教程实际上是一个70页的手册...确实不太一样。 - RandomSeed
啊,这是一个打字错误有道理。所以我已经修正了,并且在步骤3上面遇到了问题。但是当我调用(php MySQLConnector.php...)时,我得到了一个“错误:include_once(Doctrine/DBAL/DriverManager.php):无法打开流:没有这样的文件或目录..!!!”的错误,但是我知道DoctrineDBAL已经安装。我不想在达到第三步之后说这个,但我不认为OData的“4步”过程会起作用。这只是一次又一次的问题……我实际上非常惊讶OData网站建议使用这个“连接器”。 - AllieCat
使用OData的目的是什么?这是一个要求,例如您想要与第三方应用程序通信吗?我从未听说过这种格式,而且看起来像另一种微软伪协议。如果OData不是绝对必要的,我会认真考虑更广泛传播的协议,这样您可能会得到更多支持。 - RandomSeed
@AdamCasey 实际上这要看需求,但如果你只是想从表格中公开一些数据,一个简单的JSON编码响应就可以了。对于更复杂的架构,SOAP协议是一个不错的选择。 - RandomSeed
@YaK 是的,确实,当然。 - Adam Casey
显示剩余6条评论
2个回答

22
我已经想出了如何做到这一点 - 使用odata4j。 我在下面记录了我的步骤,以防其他人想要做类似的事情。
您需要:
  • 从数据库生成JPA模型
  • 使用odata4j的NorthwindJpaProducerExample.java脚本
详细步骤如下:
1. Odata4j是Java中的开源Odata Producer/Consumer。因此,您需要设置带有数据库的Eclipse for EE Developers。如果您是新手,我建议使用这个教程。 2. 按照这些说明生成JPA模型。 3. 前往Odata4j并下载最新的存档文件。 4. 将odata4j-bundle-x.x.jar添加到您的构建路径中(它在bundles文件中找到)。 5. 插入来自Odata4j的以下脚本,可以在他们的GitHub上找到:NorthwindJpaProducerExample、JPAProvider和DatabaseUtils(需要slf4j)。 (老实说,我只是将它们复制并粘贴到Eclipse中)。此时,您的Project Explorer栏应如下所示(不包括model.main):

Project Explorer Bar

此时,右键单击项目,选择“构建路径”>“配置构建路径”。从您的Odata4j存档文件中添加以下“外部Jar”文件。

External Jars

现在按照以下方式编辑NorthwindJpaProducerExample中的代码:

  1. 将字符串“endpointUri”更改为您想要oData的任何URL
  2. 将字符串“persistenceUnitName”更改为您在persistence.xml中实体的名称(如上图所示,我的名称为“createJPA”)

code sample in NorthwindJpaProducerExample

然后你就有了OData!

My OData

我在按照这些步骤进行时遇到了一些问题,现在我会在这里记录它们,以防你也遇到了类似的问题。
  • 为了成功地跟随第2步(生成JPA),每个表都必须有一个主键。别开玩笑,一定要这样做。
  • 在编辑代码之后,我遇到了“BigInteger”错误。JPAProducer不支持BigInteger字段类型。返回数据库并将列的大小更改为普通int。
  • 在以任何方式更改数据库之后,请确保刷新数据库并清理项目。这会让你和Eclipse感到快乐。
  • 我不认为每个人都需要这样做,但我确实需要添加HyperSQL驱动程序依赖项。如果您收到HSQL错误,请转到此处获取最新的稳定版本。将hsqldb.jar添加到构建路径中。

虽然不是非常简单,但比70多页的手册要好得多。


只是一个提醒,ODataContext接口似乎缺少从gitHub提供的jar文件(eclipse会产生“无法解析类型”的错误),尽管源代码仍然在这里列出:https://github.com/odata4j/odata4j/blob/master/odata4j-core/src/main/java/org/odata4j/producer/ODataContext.java - J E Carter II
对于接口的要求也是如此,ODataHeadersContext.java可以在https://github.com/odata4j/odata4j/blob/master/odata4j-core/src/main/java/org/odata4j/producer/ODataHeadersContext.java找到。我还没有确定为什么它们已经从javadoc和发行版中被移除了。 - J E Carter II
很遗憾,odata4j似乎不支持表中的复合键。我一直走到这个地方,直到出现异常“IdClass not yet supported”,你可以在jpa producer JPA Edm Generator中找到它:https://github.com/vorburger/odata4j/blob/master/odata4j-core/src/main/java/org/odata4j/producer/jpa/JPAEdmGenerator.java - J E Carter II
只是好奇想知道,除了这个方法,你有没有找到更好的解决方案,因为这个帖子已经三年了。 - Azim
你尝试过使用 OData 服务吗,例如 DataDirect CloudHybrid Data Pipeline 吗?你可以在 DataDirect OData 中了解这项服务。 - user6641561

1
这里还有另一种选择。使用Skyvia是一种无需编码的云解决方案,可以将您的MySQL数据库公开为OData。
操作步骤如下:
首先,创建到您的MySQL数据库的连接。

enter image description here

然后,创建一个端点。向导将指导您完成其余的配置。

enter image description here

选择之前创建的MySQL连接并选择所需的表。然后,配置安全性。最后,将为您提供一个终端URL。
就是这样。有关更多详细信息,请查看此link

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接