Java ApacheJena上带ARQ的SPARQL查询

Java ApacheJena上带ARQ的SPARQL查询,java,sparql,fuseki,arq,Java,Sparql,Fuseki,Arq,我的java应用程序遇到了一个问题 我试图在Fuseki服务器上处理请求,以从加载在其上的本体中获取响应 在我的第五个请求中,服务器阻塞并且不返回任何响应,有时我会得到这个错误 避免:web应用程序[MiCorr WebServices]仍在处理尚未完成的请求。这很可能会造成内存泄漏。您可以使用标准上下文实现的UnloAddLay属性来控制请求完成所允许的时间。请求处理线程的堆栈跟踪:[ sun.misc.Unsafe.park(Native Method) java.util.concurre

我的java应用程序遇到了一个问题

我试图在Fuseki服务器上处理请求,以从加载在其上的本体中获取响应

在我的第五个请求中,服务器阻塞并且不返回任何响应,有时我会得到这个错误

避免:web应用程序[MiCorr WebServices]仍在处理尚未完成的请求。这很可能会造成内存泄漏。您可以使用标准上下文实现的UnloAddLay属性来控制请求完成所允许的时间。请求处理线程的堆栈跟踪:[

sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
我尝试反向查询,以查看问题是否来自于查询,但结果是相同的

有人能帮我找到这个问题的解决方案吗?你可以看到我用来查询fuseki服务器的java类。我不是很确定,但我在前4个查询中得到了很好的结果

public class OntologyService {

private Artefacts artefacts;

private List<QuerySolution> querySolutionList;

private RDFConnectionRemoteBuilder builder;

private OntologyQuery query;

public OntologyService() {
    // - Création de la connexion sur le serveur Fuseki
    builder = RDFConnectionFuseki.create().destination("http://localhost:8080/MiCorrDS/")
            .gspEndpoint("MiCorrGraph");

    RDFConnectionFuseki conn = (RDFConnectionFuseki) builder.build();

    query = new OntologyQuery(conn);
    artefacts = new Artefacts();

}

public Artefacts getResearchProperties(String text, String country, String metalFamily, String corrosionForms,
        String environments) {

    querySolutionList = new ArrayList<>();

    // - Recherche si le texte saisi existe dans l'ontologie
    querySolutionList = query.getPropertiesDataQuery(text);

    if (!querySolutionList.isEmpty()) {

        QuerySolution artefact = (QuerySolution) querySolutionList.get(0);

        artefacts.setText(artefact.getLiteral("?artefactName").getString());
        artefacts.setTextId(artefact.getLiteral("?artefactId").getInt());
        artefacts.setTextType(artefact.getResource("?artefactType").getLocalName());

    } else {

        artefacts.setText("");
        artefacts.setTextId(0);
        artefacts.setTextType("");

    }

    // - Recherche si le pays saisi existe dans l'ontologie
    querySolutionList = query.getPropertiesDataQuery(country);

    if (!querySolutionList.isEmpty()) {

        QuerySolution artefact = (QuerySolution) querySolutionList.get(0);

        artefacts.setCountry(artefact.getLiteral("?artefactName").getString());
        artefacts.setCountryId(artefact.getLiteral("?artefactId").getInt());
        artefacts.setCountryType(artefact.getResource("?artefactType").getLocalName());

    } else {

        artefacts.setCountry("");
        artefacts.setCountryId(0);
        artefacts.setCountryType("");

    }

    // - Recherche si le famille du métal saisie existe dans l'ontologie
    querySolutionList = query.getPropertiesDataQuery(metalFamily);

    if (!querySolutionList.isEmpty()) {

        QuerySolution artefact = (QuerySolution) querySolutionList.get(0);

        artefacts.setMetalFamily(artefact.getLiteral("?artefactName").getString());
        artefacts.setMetalFamilyId(artefact.getLiteral("?artefactId").getInt());
        artefacts.setMetalFamilyType(artefact.getResource("?artefactType").getLocalName());

    } else {

        artefacts.setMetalFamily("");
        artefacts.setMetalFamilyId(0);
        artefacts.setMetalFamilyType("");

    }

    // - Recherche si la forme de corrosion saisie existe dans l'ontologie
    querySolutionList = query.getPropertiesDataQuery(corrosionForms);

    if (!querySolutionList.isEmpty()) {

        QuerySolution artefact = (QuerySolution) querySolutionList.get(0);

        artefacts.setCorrosionForms(artefact.getLiteral("?artefactName").getString());
        artefacts.setCorrosionFormsId(artefact.getLiteral("?artefactId").getInt());
        artefacts.setCorrosionFormsType(artefact.getResource("?artefactType").getLocalName());

    } else {

        artefacts.setCorrosionForms("");
        artefacts.setCorrosionFormsId(0);
        artefacts.setCorrosionFormsType("");

    }

    // - Recherche si l'environnement saisi existe dans l'ontologie
    querySolutionList = query.getPropertiesDataQuery(environments);

    if (!querySolutionList.isEmpty()) {

        QuerySolution artefact = (QuerySolution) querySolutionList.get(0);

        artefacts.setEnvironments(artefact.getLiteral("?artefactName").getString());
        artefacts.setEnvironmentsId(artefact.getLiteral("?artefactId").getInt());
        artefacts.setEnvironmentsType(artefact.getResource("?artefactType").getLocalName());

    } else {

        artefacts.setEnvironments("");
        artefacts.setEnvironmentsId(0);
        artefacts.setEnvironmentsType("");

    }

    // - Recherche si le famille du métal saisie existe dans l'ontologie
    querySolutionList = query.getPropertiesDataQuery(corrosionForms);

    if (!querySolutionList.isEmpty()) {

        QuerySolution artefact = (QuerySolution) querySolutionList.get(0);

        artefacts.setCorrosionForms(artefact.getLiteral("?artefactName").getString());
        artefacts.setCorrosionFormsId(artefact.getLiteral("?artefactId").getInt());
        artefacts.setCorrosionFormsType(artefact.getResource("?artefactType").getLocalName());

    } else {

        artefacts.setCorrosionForms("");
        artefacts.setCorrosionFormsId(0);
        artefacts.setCorrosionFormsType("");

    }

    return artefacts;
}

}
公共类本体服务{
私人文物;
私有列表查询解决方案列表;
专用RDFConnectionRemoteBuilder;
私有本体查询;
公共本体论服务(){
//-为服务生服务的连接提供服务
builder=RDFConnectionFuseki.create().destination(“http://localhost:8080/MiCorrDS/")
.gspEndpoint(“MiCorrGraph”);
RDFConnectionFuseki conn=(RDFConnectionFuseki)builder.build();
查询=新本体查询(conn);
人工制品=新人工制品();
}
公共人工制品getResearchProperties(字符串文本、字符串国家/地区、字符串metalFamily、字符串腐蚀形式、,
(字符串环境){
querySolutionList=新的ArrayList();
//-在本体论中存在的文本
querySolutionList=query.getPropertiesDataQuery(文本);
如果(!querySolutionList.isEmpty()){
QuerySolution人工制品=(QuerySolution)querySolutionList.get(0);
artefacts.setText(artifact.getLiteral(“?artefactName”).getString());
artifacts.setTextId(artifact.getLiteral(“?artifactid”).getInt());
artefacts.setTextType(artifact.getResource(“?artefactType”).getLocalName();
}否则{
人工制品。setText(“”);
artefacts.setTextId(0);
artefacts.setTextType(“”);
}
//-在实体学研究中,研究者们正在进行研究
querySolutionList=query.getPropertiesDataQuery(国家/地区);
如果(!querySolutionList.isEmpty()){
QuerySolution人工制品=(QuerySolution)querySolutionList.get(0);
artefacts.setCountry(artifact.getLiteral(“?artefactName”).getString());
artefacts.setCountryId(artifact.getLiteral(“?artefactId”).getInt());
artefacts.setCountryType(artifact.getResource(“?artefactType”).getLocalName();
}否则{
人工制品。国家(“”);
artefacts.setCountryId(0);
artefacts.setCountryType(“”);
}
//-存在于个体学的家庭
querySolutionList=query.getPropertiesDataQuery(metalFamily);
如果(!querySolutionList.isEmpty()){
QuerySolution人工制品=(QuerySolution)querySolutionList.get(0);
artefacts.setMetalFamily(artifact.getLiteral(“?artefactName”).getString());
artefacts.setMetalFamilyId(artifact.getLiteral(“?artefactId”).getInt();
artefacts.setMetalFamilyType(artifact.getResource(“?artefactType”).getLocalName();
}否则{
artefacts.setMetalFamily(“”);
人工制品。setMetalFamilyId(0);
artefacts.setMetalFamilyType(“”);
}
//-在本体论中存在的腐蚀形式
querySolutionList=query.getPropertiesDataQuery(corrosionForms);
如果(!querySolutionList.isEmpty()){
QuerySolution人工制品=(QuerySolution)querySolutionList.get(0);
artefacts.setCorroctionForms(artifact.getLiteral(“?artefactName”).getString());
artefacts.setCorroctionFormSID(artifact.getLiteral(“?artefactId”).getInt());
artefacts.setCorrorationFormStype(artifact.getResource(“?artefactType”).getLocalName();
}否则{
人工制品。setCorrosionForms(“”);
人工制品。SetCorrorationFormSID(0);
artefacts.SetCorrorationFormStype(“”);
}
//-在本体论中存在的环境问题
querySolutionList=query.getPropertiesDataQuery(环境);
如果(!querySolutionList.isEmpty()){
QuerySolution人工制品=(QuerySolution)querySolutionList.get(0);
setEnvironments(artifact.getLiteral(“?artefactName”).getString());
artefacts.setEnvironmentsId(artifact.getLiteral(“?artefactId”).getInt());
artefacts.setEnvironmentsType(artifact.getResource(“?artefactType”).getLocalName();
}否则{
人工制品。环境设置(“”);
artefacts.setEnvironmentsId(0);
artefacts.setEnvironmentsType(“”);
}
//-存在于个体学的家庭
querySolutionList=query.getPropertiesDataQuery(corrosionForms);
如果(!querySolutionList.isEmpty()){
QuerySolution人工制品=(QuerySolution)querySolutionList.get(0);
artefacts.setCorroctionForms(artifact.getLiteral(“?artefactName”).getString());
artefacts.setCorroctionFormSID(artifact.getLiteral(“?artefactId”).getInt());
artefacts.setCorrorationFormStype(artifact.getResource(“?artefactType”).getLocalName();
}否则{
人工制品。setCorrosionForms(“”);
人工制品。SetCorrorationFormSID(0);
artefacts.SetCorrorationFormStype(“”);
}
归还文物;
}
}
和查询类

public class OntologyQuery {

private static final String FILENAME1 = "C:\\DEV\\SPARQL\\micorr_query1.txt";

private static final boolean CONSOLE_LOG = true;

private RDFConnectionFuseki conn;

public OntologyQuery(RDFConnectionFuseki remoteConn) {
    conn = remoteConn;
}

public List<QuerySolution> getPropertiesDataQuery(String text) {
    String sparqlRequest = readFileToString(FILENAME1);

    sparqlRequest = sparqlRequest.replaceAll("%text%", text);

    System.out.println(sparqlRequest);

    Query query = QueryFactory.create(sparqlRequest);

    List<QuerySolution> list = null;

    // In this variation, a connection is built each time.
    if(CONSOLE_LOG) {

        conn.queryResultSet(query, ResultSetFormatter::out);

    }
    list = ResultSetFormatter.toList(conn.query(query).execSelect());

    return list;
}

private static String readFileToString(String filename) {

    StringBuilder sb = new StringBuilder();

    try (BufferedReader br = new BufferedReader(new FileReader(filename))) {

        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            sb.append(sCurrentLine);
            sb.append(" ");
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

    return sb.toString();
}

}
公共类本体查询{
私有静态最终字符串FILENAME1=“C:\\DEV\\SPARQL\\micorr\u query1.txt”;
私有静态最终布尔控制台_LOG=true;
私人RDFConnectionFuseki康涅狄格州;
公共本体查询(RDFConnectionFuseki remoteConn){
连接=远程连接;
}
公共列表getPropertiesDataQuery(字符串文本){
String sparqlRequest=readFileToString(FILENAME1);
sparqlRequest=sparqlReq
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX vocab:<http://micorr.ig.he-arc.ch/vocab#>
PREFIX ont: <http://www.co-ode.org/ontologies/ont.owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?artefact ?artefactId ?artefactType ?artefactName
FROM <http://localhost:8080/MiCorrDS/data/MiCorrGraph>
WHERE {
    ?artefact a ?artefactType .
    ?artefact rdfs:label "%text%" .
    BIND(IRI(CONCAT(STR(?artefactType), "_id")) AS ?iriConcat)
    BIND("%text%" AS ?artefactName)
    ?artefact ?iriConcat ?artefactId .
    FILTER( STRSTARTS(str(?artefactType), "http://micorr.ig.he-arc.ch/vocab")     )
  }