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();
}