venerdì 29 aprile 2011

OrientDB - primi passi di Embedding in java - #1

Sono sempre alla ricerca di DB in java da Embeddare in modo da provarli più rapidamente su NetBeans.

Dopo avere scaricato le lib della RC1 dal sito, prendo confidenza con lo strumento con qualche articolo su  RecordID e i Cluster

includo le lib nel mio progetto ed inizio a capire dalla documentazione come creare e gestire un db.




import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.metadata.security.OUser;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import com.orientechnologies.orient.server.OServer;
import com.orientechnologies.orient.server.OServerMain;
import java.io.File;

public class Main {

  public static void main(String[] args) {

    try {

          OServer server = OServerMain.create();
          server.startup(new File("/home/marco/file/conf.xml"));
          ODatabaseDocumentTx db = new ODatabaseDocumentTx("local:/home/marco/db").create();
          server.shutdown();
    } catch (Exception ex) {
            System.out.println("ex:" + ex.getMessage());
    }

  }
}




il file conf.xml è questo:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orient-server>
<network>
<protocols>
    <protocol name="binary" implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary"/>
    <protocol name="http" implementation="com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb"/>
    </protocols>
    <listeners>
    <listener ip-address="0.0.0.0" port-range="2424-2430" protocol="binary"/>
    <listener ip-address="0.0.0.0" port-range="2480-2490" protocol="http"/>
    </listeners>
  </network>
    <users>
    <user name="root" password="test" resources="*"/>
    </users>
    <properties>
    <entry name="orientdb.www.path" value="/home/marco/Scrivania/orientdb/www/"/>
    <entry name="orientdb.config.file" value="/home/marco/Scrivania/orientdb/file/orientdb-server-config.xml"/>
    <entry name="server.cache.staticResources" value="false"/>
    <entry name="log.console.level" value="info"/>
<entry name="log.file.level" value="fine"/>
    </properties>
</orient-server>



a questo punto il db è creato per accederci bisogna utilizzare questa connessione:

ODatabaseDocumentTx db = new ODatabaseDocumentTx("local:/home/marco/db").open("admin", "admin");


di default viene creato l'utente admin admin per l'accesso del db in locale.


con questa funzionalità è possibile vedere quali cluster sono presenti, gli elementi contenuti e info sull'utente in uso sul nostro nuovo db:

System.out.println("closed:" + db.isClosed());
OUser user = db.getUser();
System.out.println("user:" + user.getName());
System.out.println("password:" + user.getPassword());

for (String s : db.getClusterNames()) {
           System.out.println("cluster: " + s + " - " + db.countClusterElements(s));

}




Salviamo qualcosa


          try {
db.begin();

ODocument persona = new ODocument(db, "Persona");
persona.field("nome", "marco");
persona.field("cognome", "bianchi");
persona.save();

persona = new ODocument(db, "Persona");
persona.field("nome", "carlo");
persona.field("cognome", "rossi");
persona.save();

db.commit();
} catch (Exception e) {
System.out.println("ex:" + e.getMessage());
db.rollback();
} finally {
db.close();
}



Eseguiamo la query ed estraiamo i valori appena scritti


List persone = db.query(new OSQLSynchQuery("select from Persona"));

for (ODocument persona : persone) {
System.out.println( persona.field("nome") + " " +  persona.field("cognome"));
}

non male vero?

se rieseguite il codice per elencare i cluster vedrete:

Persona : 2


E' possibili correlare anche gli object in questo modo inserendo documenti in documenti:




try {
db.begin();

ODocument persona = new ODocument(db, "Persona");
persona.field("nome", "marco");
persona.field("cognome", "bianchi");

ODocument auto = new ODocument(db, "Auto");
auto.field("marco", "seat ibiza");
auto.field("cilindrata", "1444");
persona.field("auto",auto);


persona.save();

persona = new ODocument(db, "Persona");
persona.field("nome", "carlo");
persona.field("cognome", "rossi");

auto = new ODocument(db, "Auto");
auto.field("marco", "fiat punto");
auto.field("cilindrata", "1245");
persona.field("auto",auto);

persona.save();

db.commit();
} catch (Exception e) {
System.out.println("ex:" + e.getMessage());
db.rollback();
} finally {
db.close();
}





e ancora più complesso inserendo una lista di valori in un field sotto forma di List:




try {
db.begin();

ODocument persona = new ODocument(db, "Persona");
persona.field("nome", "marco");
persona.field("cognome", "bianchi");

ArrayList mezzi_list = new ArrayList();

ODocument auto = new ODocument(db, "Auto");
auto.field("marco", "seat ibiza");
auto.field("cilindrata", "1444");

mezzi_list.add(auto);

auto = new ODocument(db, "Auto");
auto.field("marco", "fiat punto");
auto.field("cilindrata", "1245");

mezzi_list.add(auto);

persona.field("mezzi",mezzi_list);

persona.save();

db.commit();
} catch (Exception e) {
System.out.println("ex:" + e.getMessage());
db.rollback();
} finally {
db.close();
}




Nessun commento: