mardi 30 août 2011

java : reflexion / instantiation ./ construction

Voici comment créer une instance d'une classe interne via un constructeur quin'est pas celui par défaut.

A noter qu'il est nécessaire pour les classes interne de passer une instance de la classe englobante comme le montre l'exemple suivant :


package com.ldu.divers;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Test {

public class UnDTO2 {
private String lastName = "";
private String firstName = "";
public UnDTO2(String lastName,String firstName) {
this.lastName = lastName;
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Class c = UnDTO2.class;
Constructor [] cos = c.getDeclaredConstructors();
for (Constructor constructor : cos) {
System.err.println(constructor.toString());
}

try {
Constructor constr = c.getConstructor(Test.class, String.class,String.class);
UnDTO2 dto = constr.newInstance(new Test(), "monNom","Enwoo");

} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

jeudi 4 août 2011

Unix/Linux : comment savoir qu'un repertoire est un filer

Regulièrement, lors de l'écritur de script, je me demande si je peux pointer vers tel endroit ou non sur mon fileSystem, et aussi parfois entre 2 machines.

Un moyen simple de le savoir, et aussi de savoir si 2 répertoires différents montés sur 2 points montages différents correspondent à la même machine, et la commade mount.

$mount

/dev/sda1 on / type ext3 (rw)
none on /proc type proc (rw)
/dev/sda2 on /usr type ext3 (rw)
/dev/sda3 on /var type ext3 (rw)
/dev/sda4 on /tmp type ext3 (rw)
/dev/sda6 on /usr/local/MIDDLELOGS type ext3 (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw)
dmz-data45:/vol/vol5/stockage_system on /LOCAL/system type nfs (ro,nfsvers=3,addr=172.168.200.215)


Comme on peut le remarquer, le réperoire monter en "/LOCAL/system" est en fait une machine distante dont l'IP est 172.168.200.215, et le nom symbolique est dmz-data45, et le répertoire physique est /vol/vol5/stockage

Et voilà, je sait maintenant que je peut mutualiser des choses sur cette machine

vendredi 29 juillet 2011

mysql : faire un dump

il faut utiliser l'utilitaire mysqldump :


mysqldump --complete-insert --compact --add-drop-table --compatible=mysql40 -uMASTLogin -pmonLogin -hMonPassword maBDD >> monFichier.dump


Ensuite, il est nécessaire de l'importer :

/usr/bin/mysql -uMonLogin -pMonPassword -hMonServeur monSchema < monDump.dump

mercredi 20 juillet 2011

bash : copie de répertoires distants

Pour cela, on peut utiliser la commande scp avec l'option -r

Ce qui donne par exemple :
scp -r www@monHote:/usr/local/framework/lib .

Cet exemple effectue une copie recursive de l'ensemble du contenu du répertoire "/usr/local/framework/lib" sur la machine "monHote" vers le répertoire local courant

bash : faire un tar a partir d'une liste de fichiers

La commande tar permet de réaliser une archive de fichier à partir de la commande suivante :

Tout d'abord une commande utilse pour créer une liste de fichier, et j'insiste bien sur une liste de fichiers:


Dans l'exemple suivant, on exclut le répertoire "lib" :
find -type f | egrep -v "^\.\/lib\/" > ../liste.txt


Puis on lance la commande tar avec l'option -T qui prend une liste de fichiers ... (de fichiers en chemin absolu ou relatif):

tar -cvf ../monfichier.tar -T ../liste.txt

mardi 7 juin 2011

jquery : astuce ajax ...

Une méthode simple pour faire de jolie objets, et de l'ajax simplement :

tout d'abord une astuce sympa pour configurer tous les appels ajax avec une conf par defaut :

$.ajaxSetup({
type: 'POST'
url: 'test.php',
timeout: 3500
});



Une seconde façon, pour faire des appels ajax, via un objets :

var GALLERY = {
container: "#gallery",
url: "getImages",
delay: 5000,
load: function() {
// faire l'appel ajax
},
display: function(image_url) {
// traiter les donnees, et leur affichage

}
};



load: function() {
var _gallery = this;
$.ajax({
type:"get",
url: this.url,
success: function(data) {
var images = data.split('|');
$.each(images, function() {
_gallery.display(this);
});
}
});
}



display: function(image_url) {
$('')
.attr('src', 'images/' + data)
.hide()
.load(function() {
$(this).fadeIn();
})
.appendTo(this.container);
}



$(document).ready(function() {
GALLERY.load();
});

service Rest avec Spring MVC et jquery

Avec Spring 3.0, il est vraiment simple de faire des services RESTFull, voici, un exemple très simple de d'un controller spring qui propose 2 methodes :
La première par un GET permettant de recuperer une personne en JSON
et la seconde de sauver un tableau de personnes. Pour cette dernière, il faut noter l'utilisation d'un POST, et la recupération de l'objet par ResquestBody :

A noter, que JSON ne supporte que très peu de type (par exemple pas de liste, seulement des tableaux:


@Controller
public class MonServices {

@Resource(name = "Modele")
private Modele modele;

@RequestMapping(value = "**/{instance}/personne/{name}", method = RequestMethod.GET)
public @ResponseBody Personne getPersonne(HttpServletRequest request,
HttpServletResponse response, @PathVariable String instance,
@RequestParam(required = false) String httpCode,@PathVariable String name) {

setHTTPStatus(response, "200");
Personne p = new Personne("john",name);
System.out.println("JSON => " + p.toString());
return p;
}

@RequestMapping(value = "**/{instance}/personne/save", method = RequestMethod.POST)
public @ResponseBody Personne [] savePersonne(@RequestBody Personne [] p,HttpServletRequest request,
HttpServletResponse response) {
setHTTPStatus(response, "200");
for (Personne personne : p) {
personne.setFirstname("postOK" + personne.getName());
}
return p;
}
}


Voici le bean Personne, en java :

public class Personne extends ModeleBean{

public Personne() {
// TODO Auto-generated constructor stub
}

public Personne(String firstname, String name) {
this.name = name;
this.firstname = firstname;
}

/**
* @return the name
*/
public String getName() {
return name;
}

/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}

/**
* @return the firstname
*/
public String getFirstname() {
return firstname;
}

/**
* @param firstname
* the firstname to set
*/
public void setFirstname(String firstname) {
this.firstname = firstname;
}

private String name;
private String firstname;
}


Pour la parti javascript, je vous conseille JQuery, et les plugins jquery.postJSON :

Pour le GET:

$.getJSON('instance/personne/toto.smvc', function(data) {
var items = [];

$.each(data, function(key, val) {
items.push('>li id="' + key + '"<' + val + '>/li<');
});

$('>ul/<', {
html : items.join('')
}).appendTo('body');
});


Pour le POST:

function postData() {
var personnes = new Array();
personnes[0] = {
name : "duc",
firstname : "lolo"
};
personnes[1] = {
name : "duc",
firstname : "franck"
};

$.postJSON("instance/personne/save.smvc", personnes, function(data) {
var items = [];

$.each(data, function(key, val) {
items.push('>li id="' + key + '"<' + val + '>/li<');
});

$('>ul/<', {
html : items.join('')
}).appendTo('body');
});
return false;
}