我想使用Jersey实现一些RESTful Web服务,该服务通过Sesame Java API使用SPARQL从RDF三重存储访问数据。同时,我想使用Sesame Server和Workbench Web应用程序在同一Triplestore上运行SPARQL端点。我对如何最好地将它们组合在一起感到困惑。
具体来说,我的Jersey应用程序应该使用Sesame API“直接”连接到三元组(在Sesame服务器应用程序执行相同操作时)还是应该通过Sesame服务器的HTTP接口与三元组交互(也使用Sesame API) 。由于它们位于同一台计算机上,因此效率似乎较低,但是我不知道两个Web应用程序是否应同时使用Triplestore。
最佳答案
不建议直接从两个不同的Java应用程序访问同一芝麻存储。 Sesame的SAIL(数据库访问层)假定它对磁盘上的资源拥有唯一的控制权,如果两个不同的JVM将两个不同的SAIL对象应用于相同的资源,则可能导致不一致或死锁。因此,您应该通过HTTP进行设置。尽管这样做的效率较低,但是Sesame进行了很多优化(自定义二进制序列化等)来加快HTTP通信的速度,所以它应该是可行的。
一种替代方法是,扩展Jersey应用程序,使其通过您自己的Sesame's REST protocol实现(包括SPARQL端点)公开您正在使用的(本地)Sesame存储库。如果执行此操作,则可以从Workbench连接到芝麻存储,而无需在芝麻服务器上运行它。
当然,这还需要更多工作,但是如果您自己的应用程序的性能是一个大问题,那么这可能是一个不错的选择。由于所有功能性内容(SPARQL引擎,基于mime类型确定适当的格式等)均由Sesame提供,因此听起来可能并不像听起来那么难,您“只是”需要将它们捆绑在一起。
但是如果我是您,我会首先尝试第一种选择(从您的Jersey应用程序与HTTP存储库进行通信):
关于java - 如何使用OpenRDF Sesame以及Sesame Server和Workbench来实现Web服务应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16842204/