2016-08-18 3 views
0

Ich arbeite in einer XPages-Anwendung mit der OpenNTF Domino-API, um die Diagrammdatenmodellierungsfunktionen zu untersuchen. Als Beispiel habe ich den Teamroom genommen, der mit IBM Domino geliefert wird.Versuchen, IBM Notes-Daten in Graph-Datenbank zu migrieren

Ich habe eine Methode definiert, um Antworten Dokumente in die Grap db zu wandern, aber ich erhalte die Fehlermeldung: keine statische Verweis auf die nicht-statische Methode

Hier machen kann, was die Methode wie folgt aussieht:

private void migrateResponses(DFramedTransactionalGraph<DGraph> profilesGraph) { 
    try { 
     Database db = Factory.getSession().getCurrentDatabase(); 
     View view = db.getView("responsesOnly"); 
     DocumentCollection col = view.getAllDocuments(); 
     System.out.println("number of docs found " + col.getCount()); 

    for (Document response : col) { 

     System.out.println("form:" + response.getFormName()); 
     System.out.println("id:" + response.getUniversalID()); 

     org.openntf.domino.ext.Document parent = response.getParentDocument(); 

     if (null == parent.getParentDocument()){ 
      //has no parent document so this parent document is a MainTopic/Post 
      Post post = profilesGraph.addVertex(parent.getMetaversalID(), Post.class); 
      Response vertexResponse = profilesGraph.addVertex(response.getUniversalID(), Response.class); 
      vertexResponse.setSubject(response.getItemValueString("Subject")); 
      Post.addResponse(vertexResponse); 
     } 
    } 
    profilesGraph.commit(); 
} catch (Throwable t) { 
    XspOpenLogUtil.logError(t); 
} 
} 

Der Fehler tritt in Zeile:

Post.addResponse(vertexResponse); 

Hier ist, was mein Beitrag Klasse wie folgt aussieht:

package com.wordpress.quintessens.graph.teamroom; 

import org.openntf.domino.graph2.annotations.AdjacencyUnique; 
import org.openntf.domino.graph2.builtin.DVertexFrame; 

import com.tinkerpop.blueprints.Direction; 
import com.tinkerpop.frames.Property; 
import com.tinkerpop.frames.modules.typedgraph.TypeValue; 

@TypeValue("post") 
public interface Post extends DVertexFrame { 

    @Property("$$Key") 
    public String getKey(); 

    @Property("subject") 
    public String getSubject(); 

    @Property("subject") 
    public void setSubject(String n); 

    // real edges! 

    @AdjacencyUnique(label = "hasWritten", direction = Direction.OUT) 
    public Iterable<Profile> getAuthors(); 


    @AdjacencyUnique(label = "hasReaction", direction = Direction.IN) 
    public void addResponse(Response response); 

    @AdjacencyUnique(label = "hasReaction", direction = Direction.IN) 
    public void removeResponse(Response response); 

    @AdjacencyUnique(label = "hasReaction", direction = Direction.IN) 
    public Iterable<Response> getResponses(); 
} 

Haben Sie einen Vorschlag, wie ich meinen Code anpassen sollte, damit es funktioniert?

+0

Versuchen 'Post' zu' Post' ändern. Es sieht so aus, als ob Sie sich auf die Klasse und nicht auf das Objekt beziehen. –

Antwort

3

Wenn OpenNTF oder TinkerPop mit den bereitgestellten Anmerkungen keine Magie erzeugen, versuchen Sie, eine nicht statische Methode für eine Schnittstelle aufzurufen. Sind Sie sicher, dass Sie nicht ändern wollen:

Post.addResponse(vertexResponse); 

zu

post.addResponse(vertexResponse); 
+0

Ja, das ist richtig. Rufen Sie die Methode für die Instanz anstelle der Schnittstelle auf. Es wird dann gut funktionieren. –

+0

Sie haben Recht! Ich sollte eine Pause machen ... –