首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FUSEKI的MySQL配置

FUSEKI的MySQL配置
EN

Stack Overflow用户
提问于 2014-06-29 08:15:21
回答 2查看 600关注 0票数 2

我需要用一个使用fuseki+mysql作为三层存储的旧数据库解决方案来测试特定的数据库解决方案。基本上,我所需要做的就是使用SPARQL对以前创建的数据库进行一些查询。问题是,我似乎无法将fuseki配置为给出这个数据库的端点。我使用标准的java编码(JDBC )创建了数据库,而不使用Jena SDB组件。我使用的mysql版本是:

代码语言:javascript
复制
mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.3

基本上,我有一个我无法解决的ClassNotFoundException。在这里详细介绍了例外情况:

代码语言:javascript
复制
    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主dir中的lib dir中):

代码语言:javascript
复制
java -cp lib/arq-2.8.8.jar:lib/arq-2.8.9-SNAPSHOT.jar:lib/jena-iri-0.9.0-incubating.jar:lib/mysql-connector-java-5.1.19.jar:lib/ReconnectingSDB-0.1-SNAPSHOT.jar:lib/sdb-1.3.4.jar -jar fuseki-server.jar --config=fuseki-mysql.ttl

我的配置文件:

代码语言:javascript
复制
    # 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";
    ]
        .

如果我使用ja:loadClass "net.rootdev.fusekisdbconnect.SDBConnect“(我认为这有点旧),ja:loadClass "com.hp.hpl.jena.sdb.SDB”,我得到了相同的例外,但对于SDB类

代码语言:javascript
复制
com.hp.hpl.jena.shared.JenaException: java.lang.ClassNotFoundException: com.hp.hpl.jena.sdb.SDB

我在fuseki中lib文件夹中的jar列表是:

代码语言:javascript
复制
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版本:

代码语言:javascript
复制
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寻求帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-29 11:10:46

  1. 不要混合Jena jars的版本--使用来自单个发行版的一组jars
  2. -cp和-jar不起作用--类路径设置将被忽略。

因为(2) net.rootdev.fusekisdbconnect.SDBConnect不是从jar中来的。

票数 1
EN

Stack Overflow用户

发布于 2014-06-29 09:36:29

看起来这是纯粹的类路径问题,与你所拥有的任何其他东西无关。我找到了令人敬畏的类路径链接。要点如下:

还值得注意的是,当您使用 -jar命令行选项将您的java程序作为可执行JAR运行时,那么CLASSPATH环境变量将被忽略,而-cp和-classpath开关也将被忽略。在本例中,可以使用类路径属性在META/MANIFEST.MF文件中设置Java类路径。简而言之,清单文件中的类路径属性覆盖由-cp、-classpath或classpath环境变量指定的类路径。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24474319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档