Archivi tag: Collection

MongoDB e Java Driver,esempi vari

Iniziamo a giocare con MongoDB tramite il java driver.
Consiglio il download della versione 2.12.3 o successive (fate attenzione che i downloads della libreria non sono in ordine numerico, e quindi si rischia spesso di scaricarne una vecchia).
Altra libreria utile per le conversioni da pojo a stringa, la libreria Google gson, versione 2-2-4.

Una volta messo il jar nel classpath della nostra applicazione, e fatto partire il nostro server database mongodb, stabiliamo la connessione, al server e otteniamo il riferimento al database che vogliamo usare, in questo caso il db “person”. Ottenuto il DB, possiamo accedere alla collection dei nostri futuri oggetti da persistere (se la collection non esiste, viene creata in questa fase).

1
2
3
MongoClient mongo = new MongoClient("localhost",27017);
DB db = mongo.getDB("persons");
DBCollection table = db.getCollection("personCollection");

Realizziamo un pojo classico per la gestione dell’entità “Person” da persistere su MongoDB.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.Serializable;

public class Person implements Serializable{

    private static final long serialVersionUID = -8413862529676269210L;
    private String id = java.util.UUID.randomUUID().toString();
    private String name;
    private String lastname;
    private Integer age;
   
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
   
    public String getId() {
        return id;
    }
   
    public void setId(String id) {
        this.id = id;
    }
   
   
}

In questo esempio generiamo un UUID come id dell’oggetto, ma potremmo usare l’hashcode.

Per effettuare una insert sulla collection di cui sopra:

1
2
3
4
5
6
7
8
9
10
//istanza dell'oggetto Person da inserire
Person persona = new Person();
persona.setName("cesare");
//utilizziamo JSon per la conversione automatica da pojo a BasicDBObject

Gson gson = new Gson();
BasicDBObject personDBO =(BasicDBObject) JSON.parse(gson.toJson(persona));

//table è la DBCollection indicata nel primo esempio
table.insert(personDBO );

Col nuovo driver è possibile usare operazioni batch in automatico passando all’insert un array

1
2
3
4
5
6
7
8
List<DBObject> dbObjList = new ArrayList<DBObject>();
for(int i =0;i<100;i++){
 Person p = new Person();
 p.setName("test"+i);
 BasicDBObject pDB=(BasicDBObject) JSON.parse(gson.toJson(p));
 dbObjList.add(pDB);
}
table.insert(dbObjList);

Per la modifica di un oggetto in una collection (per definizione con MongoDB parliamo in realtà di documenti), è possibile effettuare direttamente il replace dell’oggetto con una nuova istanza.

1
2
3
4
5
6
7
 //creo un dbObject per eseguire la find di un elemento che abbia la chiave name uguale a 'test1':
 BasicDBObject personOriginal = new BasicDBObject().append("name", "test1");
 
 //e sostituirlo con questo nuovo oggetto
 BasicDBObject personNew = new BasicDBObject().append("name","nuovotest1").append("lastname","kiraya");

 table.update(personOriginal,personNew);

Per rimuovere un elemento dalla collection,è possibile indicare un criterio di ricerca oppure un DBObject specifico da eliminare:

1
2
3
 BasicDBObject personQuery = new BasicDBObject().append("name","nuovotest1");
 BasicDBObject personDB = table.findOne(personQuery);
 table.remove(personDB);

Per svuotare completamente una collection, è possibile eseguirne il drop:

1
 table.drop();

Oppure usare un BasicDBObject “byExample” che non contenga dati, il che sta a significare una rimozione senza nessun particolare criterio di filtro (e quindi tutti):

1
table.remove(new BasicDBObject());

E’ possibile filtrare i dati in diversi modi, utilizzando le query byExample, utilizzando il QueryBuilder oppure tramire Regular Expressions.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//by example il contenuto deve matchare completamente
DBCursor cursor = table.find(new BasicDBObject("name","test1"));
while (cursor.hasNext()){
  DBObject obj = cursor.next();
  Person pers = (new Gson()).fromJson(obj.toString(), Person.class);
  System.out.println(pers.getName());
}

//tramite regexp utilizzando un pattern per simulare una like %nome%
BasicDBObject filter= new BasicDBObject();
filter.append("name", Pattern.compile("nuovo"));
filter.append("lastname",Pattern.compile("kira"));
cursor = table.find(filter);
while (cursor.hasNext()){
  DBObject obj = cursor.next();
  Person pers = (new Gson()).fromJson(obj.toString(), Person.class);
  System.out.println(pers.getName());
}

Per estrarre tutti gli elementi di una collection basta eseguire un find senza parametri:

1
DBCursor cursor = table.find();

Disabilitare accesso alle pagine mobile di Sharepoint 2010

Dopo aver configurato delle Application Pages sulla nostra fantastica Site Collection, messo tutto online ,ci siamo accorti che accedendo con il browser del cellulare non c’era modo di arrivare alle pagine deployate..

Si veniva dirottati sempre alla versione “mobile” della Central Administration..

Ora apparentemente non c’e’ modo di disabilitare la versione mobile.

Cosi dopo alcune ricerche mi sono imbattuto in questo articolo:

http://blogs.technet.com/b/office2010/archive/2010/03/09/configure-sharepoint-server-2010-for-mobile-device-access.aspx

e cosi ho notato che sharepoint di default stava usando il Browser Definition schema di asp, deployato nella cartella App_Browsers della nostra virtual directory su IIS.

In questa cartella (che nel mio caso si trova su C:\inetpub\wwwroot\wss\VirtualDirectories\80\App_Browsers), c’e’ un file chiamato compat.browser.

In questo file sono presenti tutte le definizioni di dispositivi e browser, e le regole di comportamento di asp.net.

 Esempio di configurazione:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- SymbianOS Safari Browser -->

<browser id="SymbianSafari" parentID="Safari2">

  <identification>

     <userAgent match="SymbianOS" />

  </identification>

  <capabilities>

    <capability name="isMobileDevice" value="true" />

    <capability name="canInitiateVoiceCall" value="true" />

 </capabilities>

</browser>

 Per disabilitare l’accesso alla versione mobile basta andare sul file e settare i vari isMobileDevice a false:

1
2
3
4
5
<capability name="isMobileDevice" value="true" />

diventa:

<capability name="isMobileDevice" value="false" />

 Se usate una funzione di replace, fate attenzione perche non tutte le righe sono scritte con lo stesso numero di spazi tra l’attributo name e il value, quindi molti “isMobileDevice” potrebbero rimanere a true (cosa successa a piu di una persona).

 

Buon Divertimento.