FUSEKI的MySQL配置
我需要测试一个特定的数据库解决方案,与使用fuseki+mysql作为三重存储的旧数据库解决方案进行对比。基本上,我所需要做的就是对我以前用SPARQL创建的数据库进行查询。问题是,我似乎无法配置fuseki来为我提供该数据库的端点。我使用普通的标准java编码(JDBC而不使用Jena SDB组件)创建了数据库。我使用的mysql版本是:FUSEKI的MySQL配置,mysql,jdbc,jena,fuseki,Mysql,Jdbc,Jena,Fuseki,我需要测试一个特定的数据库解决方案,与使用fuseki+mysql作为三重存储的旧数据库解决方案进行对比。基本上,我所需要做的就是对我以前用SPARQL创建的数据库进行查询。问题是,我似乎无法配置fuseki来为我提供该数据库的端点。我使用普通的标准java编码(JDBC而不使用Jena SDB组件)创建了数据库。我使用的mysql版本是: mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline
mysql Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.3
基本上,我有一个ClassNotFoundException,我无法解决。以下是例外情况的详细信息:
com.hp.hpl.jena.shared.JenaException: java.lang.ClassNotFoundException: net.rootdev.fusekisdbconnect.SDBConnect
at com.hp.hpl.jena.assembler.AssemblerHelp.loadClassNamedBy(AssemblerHelp.java:145)
at com.hp.hpl.jena.assembler.AssemblerHelp.loadArbitraryClass(AssemblerHelp.java:129)
at com.hp.hpl.jena.assembler.AssemblerHelp.loadArbitraryClasses(AssemblerHelp.java:93)
at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$ExpandingAssemblerGroup.loadClasses(AssemblerGroup.java:86)
at com.hp.hpl.jena.assembler.assemblers.AssemblerGroup$ExpandingAssemblerGroup.open(AssemblerGroup.java:79)
at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:52)
at com.hp.hpl.jena.assembler.assemblers.AssemblerBase.open(AssemblerBase.java:48)
at org.apache.jena.fuseki.server.FusekiConfig.processService(FusekiConfig.java:241)
at org.apache.jena.fuseki.server.FusekiConfig.configure(FusekiConfig.java:149)
at org.apache.jena.fuseki.FusekiCmd.exec(FusekiCmd.java:364)
at arq.cmdline.CmdMain.mainMethod(CmdMain.java:97)
at arq.cmdline.CmdMain.mainRun(CmdMain.java:59)
at arq.cmdline.CmdMain.mainRun(CmdMain.java:46)
at org.apache.jena.fuseki.FusekiCmd.main(FusekiCmd.java:101)
Caused by: java.lang.ClassNotFoundException: net.rootdev.fusekisdbconnect.SDBConnect
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at com.hp.hpl.jena.assembler.AssemblerHelp.loadClassNamedBy(AssemblerHelp.java:144)
... 13 more
调用fuseki会将所需的库添加到类路径中(我将它们存储在fuseki主目录中的lib目录中):
我的配置文件:
# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
@prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix jumble: <http://rootdev.net/vocab/jumble#> .
@prefix sdb: <http://jena.hpl.hp.com/2007/sdb#> .
[] rdf:type fuseki:Server ;
# Timeout - server-wide default: milliseconds.
# Format 1: "1000" -- 1 second timeout
# Format 2: "10000,60000" -- 10s timeout to first result, then 60s timeout to for rest of query.
# See java doc for ARQ.queryTimeout
ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "10000,60000" ] ;
fuseki:services (
<#service_MySQL_read_only>
) .
# SDB
[] ja:loadClass "net.rootdev.fusekisdbconnect.SDBConnect" .
jumble:SDBConnect rdfs:subClassOf ja:RDFDataset .
<#service_MySQL_read_only> rdf:type fuseki:Service ;
rdfs:label "UF MySQL Service (R)" ;
fuseki:name "MySQL" ;
fuseki:serviceQuery "query" ;
fuseki:serviceQuery "sparql" ;
fuseki:serviceUpdate "update" ;
fuseki:serviceUpload "upload" ;
fuseki:serviceReadWriteGraphStore "data" ;
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ;
fuseki:dataset <#ufmysql_dataset_read> ;
#fuseki:dataset <#MySQLStore> ;
.
<#ufmysql_dataset_read> rdf:type sdb:DatasetStore ;
sdb:store <#MySQLStore>
.
<#MySQLStore> rdf:type jumble:SDBConnect;
rdfs:label "UF MySQL SDB Store";
sdb:layout "layout2";
sdb:connection
[ rdf:type sdb:SDBConnection;
sdb:sdbHost "localhost";
sdb:sdbType "MySQL";
sdb:sdbName "EA_db_test";
sdb:sdbUser "*****";
sdb:sdbPassword "*****";
sdb:driver "com.mysql.jdbc.Driver";
]
.
我在fuseki的lib文件夹中找到的jar列表是:
2247124 mag 12 2012 arq-2.8.8.jar
2259436 mag 12 2012 arq-2.8.9-SNAPSHOT.jar
154157 mag 12 2012 jena-iri-0.9.0-incubating.jar
801912 mag 12 2012 mysql-connector-java-5.1.19.jar
6657 mag 12 2012 ReconnectingSDB-0.1-SNAPSHOT.jar
529092 mag 12 2012 sdb-1.3.4.jar
我的FUSEKI版本:
Jena: VERSION: 2.7.1-incubating-SNAPSHOT
Jena: BUILD_DATE: 20120426-0201
ARQ: VERSION: 2.9.1-incubating-SNAPSHOT
ARQ: BUILD_DATE: 20120430-1956
TDB: VERSION: 0.9.1-incubating-SNAPSHOT
TDB: BUILD_DATE: 20120430-2052
Fuseki: VERSION: 0.2.2-incubating-SNAPSHOT
Fuseki: BUILD_DATE: 20120501-1232
我应该使用jar版本的任何特定组合?任何关于我可以在哪里找到缺少的jar的指针(如果缺少什么或者如果我需要不同的版本)。或者我只是配置文件有误,我应该使用不同的东西
Thx的帮助看起来像是纯粹的类路径问题,与您拥有的任何其他东西无关。我找到了。这里的要点是: 同样值得注意的是,当您使用java-jar命令行时 选项将Java程序作为可执行JAR运行,然后 CLASSPATH环境变量以及-cp和 -类路径开关将被忽略。在本例中,您可以使用 类路径属性。在清单文件中的短类路径属性中 重写由-cp、-classpath或classpath指定的类路径 环境变量 希望这有帮助
因为(2)
net.rootdev.fusekisdbconnect.SDBConnect
不是来自jar。我使用了一个变量进行编译,现在它可以工作了,服务器运行了。我仍然在理解如何查询正确的数据库时遇到一些问题,因为像这样一个简单的查询会抛出500个异常前缀bus:SELECT?app WHERE{bus:2?rel?app}。我认为这是因为它在奇怪的表上执行SELECT,可能我必须定义一个FROM子句。但是,Thx需要关于类路径的答案。这并不能回答问题。net.rootdev.fusekisdbconnect.SDBConnect来自哪里?这是耶拿发行版的一部分吗?fuseki分布?其他地方?它不是ApacheJena的一部分。
2247124 mag 12 2012 arq-2.8.8.jar
2259436 mag 12 2012 arq-2.8.9-SNAPSHOT.jar
154157 mag 12 2012 jena-iri-0.9.0-incubating.jar
801912 mag 12 2012 mysql-connector-java-5.1.19.jar
6657 mag 12 2012 ReconnectingSDB-0.1-SNAPSHOT.jar
529092 mag 12 2012 sdb-1.3.4.jar
Jena: VERSION: 2.7.1-incubating-SNAPSHOT
Jena: BUILD_DATE: 20120426-0201
ARQ: VERSION: 2.9.1-incubating-SNAPSHOT
ARQ: BUILD_DATE: 20120430-1956
TDB: VERSION: 0.9.1-incubating-SNAPSHOT
TDB: BUILD_DATE: 20120430-2052
Fuseki: VERSION: 0.2.2-incubating-SNAPSHOT
Fuseki: BUILD_DATE: 20120501-1232