2016-04-19 9 views
2

Ich versuche, einige Unit-Test-Dienstprogramme für einen OrientDB-Client in Scala zu schreiben.orientdb: Wie man eine Speicherdatenbank heruntergefahren wird (Java/Scala API)

Der folgende Abschnitt soll eine Funktion für den Betrieb an einem DB übernehmen und die Funktion mit Code umbrechen, um den DB für einen einzelnen Komponententest zu erstellen und zu löschen.

Es gibt jedoch keine gute Dokumentation darüber, wie man eine Speicher-DB aufräumt (und bei vielen Open-Source-Projekten scheinen die Leute einfach nur Datenbanken zu verlassen und neue an einem neuen Port zu erstellen).

Durch einfaches Aufrufen von db.close verlässt die DB einen Port und nachfolgende Tests schlagen fehl. Der Aufruf von db.drop scheint zu funktionieren, aber nur, wenn es dem func gelungen ist, Daten zur DB hinzuzufügen.

Also, welche Bereinigung ist in der finally-Klausel erforderlich?

@Test 
    def fTest2(): Unit = { 


    def withJSONDBLoan(func: ODatabaseDocumentTx => Unit) : Unit = { 
     val db: ODatabaseDocumentTx = new ODatabaseDocumentTx("memory:jsondb") 
     db.create() 
     try { 

     func(db) 

     } finally { 
     if (!db.isClosed){ 
      db.close // Nope. DB is leaked. 
     } 
     // db.drop seems to close the DB but can't 
     // see when to safely call this. 
     } 
    } 


    val query1 = "insert into ouser set name='test',password='test', status='ACTIVE'" 
    withJSONDBLoan { db => 
     db.command(new OCommandSQL(query1)).execute[ODocument]() 
    } 

    // Fails at create because DB already exists. 
    val query2 = "insert into ouser set name='test2',password='test2', status='ACTIVE'" 
    withJSONDBLoan { db => 
     db.command(new OCommandSQL(query2)).execute[ODocument]() 
    } 
    } 

Antwort

1

Ich habe versucht, Ihren Code und es funktionierte für mich.

enter image description here

Hoffe, es hilft.

+0

Sicher. Es funktioniert, weil die Datenbank durchgesickert ist. Ich werde die Frage mit einer fehlgeschlagenen Abfrage aktualisieren. – user48956

Verwandte Themen