我想使用Jersey实现一些RDF服务,它通过Sesame Java API使用SPARQL访问RESTful三元组存储中的数据。同时,我想使用Sesame Server和Workbench web应用程序在相同的triplestore上运行一个SPARQL端点。我对如何最好地把这些放在一起有点困惑。
具体地说,我的Jersey应用程序应该使用Sesame API“直接”连接到triplestore (而Sesame服务器应用程序正在做同样的事情),还是应该通过Sesame服务器的HTTP接口(也使用Sesame API)与triplestore进行交互。这似乎效率较低,因为它们在同一台机器上,但我不知道两个web应用程序是否应该同时使用triplestore。
发布于 2013-05-31 12:28:16
不建议直接从两个不同的java应用程序访问同一个Sesame存储。Sesame的SAIL (数据库访问层)假设它拥有对磁盘上资源的唯一控制权,如果让两个不同的JVM将两个不同的SAIL对象应用于相同的资源,则可能会导致不一致或死锁。所以你应该通过HTTP进行设置。虽然这效率较低,但Sesame有相当多的优化(自定义二进制序列化等)。在适当的地方加速HTTP通信,所以它应该是相当可行的。
另一种选择是扩展您的Jersey应用程序,使其公开您在自己的Sesame's REST protocol实现中使用的(本地) Sesame存储库,包括一个SPARQL端点。如果这样做,您可以从Workbench连接到您的Sesame存储,而无需在Sesame Server上运行它。
当然,这是更多的工作,但如果你自己的应用程序的性能是一个大问题,这可能是一个很好的方法。它可能并不像听起来那么难,因为所有的函数式东西(SPARQL引擎,基于mime类型确定适当的格式,等等)都是由Sesame提供的,你“只”需要把它们捆绑在一起。
但如果我是你,我会先尝试第一种选择(从你的Jersey应用程序与HTTP存储库对话) :)
https://stackoverflow.com/questions/16842204
复制相似问题