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

lundi 30 mai 2011

web : test de sites avec plusieurs navigateurs IE

Parfois , il est nécessaire de tester des sites avec plusieurs navigateurs IE. il est difficile de faire cohabiter différentes vesions de IE.

Le site Utilu propose une installation tout en un des navigateurs IE 3->IE 8, et la même chose pour Firefox ...

Ceci fonctionne très bien , et très rapide à mettre en oeuvre. Une fois télécharger et installer, vous disposez d'un icone par version de IE, ce qui vous permet de tester rapidement votre site en plusieurs versions ...

C'est simple et efficace ...

vendredi 1 avril 2011

java J2EE : tapestry et Spring

Pour utiliser Spring et Tapestry sur le même projet, il est nécessaire d'utiliser une version de tapestry < 5.1.0.18 et d'utiliser les dépendances maven suivantes :

La prise en compte de la configuration Spring par tapestry se fait en utilisant un filter org.apache.tapestry5.spring.TapestrySpringFilter et pas org.apache.tapestry5.TapestryFilter.

Attention, il est nécessaire d'ajouter la dépendance maven tapestry-spring dans votre pom.xml, et il faut noter que les bean spring sont accessibles par l'annotation @inject de tapestry !!!

Ce dernier va remplacer le listener de contexte fournit par Spring.

Les paramètres de configuration sont les mêmes que ceux fournit pour Spring, en l'occurence :

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-front.xml</param-value>
</context-param>


et pour le web.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>portail Tapestry 5 Application</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-front.xml</param-value>
</context-param>
<context-param>
<!-- The only significant configuration for Tapestry 5, this informs Tapestry
of where to look for pages, components and mixins. -->
<param-name>tapestry.app-package</param-name>
<param-value>net.portail.web</param-value>
</context-param>

<filter>
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry5.spring.TapestrySpringFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>app</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>