vendredi 28 janvier 2011

java EE : jsp prévenir le cache des jps par un proxy

Voici, les paramètres à ajouter dans la réponse jsp ... pour éviter qu'un proxy ne cache votre jsp.


<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevent caching at the proxy server
%>


Pour une servlet :


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);

}

mardi 25 janvier 2011

Unix/linux commandes vi

Ces commandes sont utilisables en ligne de commande Unix/Linux et pas seulement sous VI.

Edition de texte

* i --> Insert le texte avant le caractère Sélectionné

* a --> Append – Ajoute du texte après le caractère sélectionné

* A --> Append – Ajoute du texte en fin de phrase

* o --> Ajoute une ligne après et passe en mode saisie

* O --> Ajoute une ligne avant et passe en mode saisie

* u --> Undo de la dernière modification

* U --> Undo de la ligne

* J --> Concatène la ligne suivante avec la ligne en cours


Manipulation de texte

* r --> Remplace un caractère (et reste en mode commande)

* R --> Remplace plusieurs caractères (et reste en mode Saisie)

* cw --> Change Word – Remplace le mot courant (jusqu’au $)

* : %s/toto/titi/g --> Remplace dans le fichier toutes les occurrences de toto par titi (g signifie qu’il faut remplacer les multiples occurrences sur la même ligne)

* . --> Répète la dernière action


Copier/Coller

* x --> Coupe un caractère

* 20x --> Coupe 20 caractères

* dd --> Coupe la ligne

* 13dd --> Coupe 13 lignes à partir de la ligne en cours

* yy --> Copie la ligne

* 10yy --> Copie 10 lignes à partir de la ligne en cours

* p --> Colle : 1- à partir du caractère (si x)......... 2- à partir de la ligne suivante (si dd ou yy)

* P --> Colle : 1- avant le caractère (si x)......... 2- au dessus de la ligne courante (si dd ou yy)


Recherche de texte

* /toto --> Recherche le mot toto dans le texte vers le bas

* / --> Recherche l’occurrence suivante

* ?toto --> Recherche le mot toto dans le texte vers le haut

* ? --> Recherche l’occurrence précédente

* % --> Recherche la parenthèse fermante de la parenthèse sélectionnée


Déplacement

* j --> Vers le bas

* k --> Vers le haut

* h --> Vers la gauche

* l --> Vers la droite

* f --> Page down

* b --> Page up

* 0 (zéro) --> Début de ligne

* $ --> Fin de ligne

* w --> Passe de mot en mot

* b --> Revient de mot en mot

* :0 --> Revient à la première ligne du fichier

* :123 --> Va à la ligne 123 du fichier

* g --> Donne le numéro de la ligne en cours

* G --> Va à la dernière ligne du fichier


Enregistrement

* :w --> Enregistre le fichier en cours

* :w toto.ksh --> Enregistre le fichier sous le nouveau nom « toto.ksh »

* :q --> Quitte VI

* :q! --> Quitte VI sans sauvegarder

* :wq --> Enregistre le fichier en cours et quitte VI

* :n --> Passe au fichier suivant dans le cas d’ouverture de plusieurs fichiers

lundi 24 janvier 2011

perl : script MAJ BDD

Voici, un petit script qui met à jour un champ en BDD


#!/usr/local/bin/perl -w

use strict;
use diagnostics;

use DBI;
use Date::Manip;

# Parametres de connexion a la base de donnees
my $usermysql = $ENV{ MYSQL_USR};
my $passmysql = $ENV{ MYSQL_MDP};
my $mysqlBase = $ENV{ MYSQL_BASE};
my $mysqlServer = $ENV{ MYSQL_SRV};
my $portmysql = $ENV{ MYSQL_PORT};
my $projet = $ENV{ PROJET};

print "login=[$usermysql] et password=[$passmysql]";
# Ouverture de la connexion BDD
my $mysqlCnx = "DBI:mysql:database=".$mysqlBase.";host=".$mysqlServer.";port=$portmysql";
my $mysqlDbFctl = DBI->connect($mysqlCnx, $usermysql, $passmysql) || die("Pas de connexion a la base!");

# Requete SQL
my $updateQuery = "UPDATE WebServiceAccess SET authenticationKey = '12345678906'";

# Lancement de la requete d'update
my $updateStatement = $mysqlDbFctl->prepare($updateQuery);
$updateStatement->execute() || print "Can't execute statement: $DBI::errstr";
$updateStatement->finish();

# Lancement de select
my $selectQuery = "SELECT userId,authenticationKey FROM WebServiceAccess";
my $selectStatement = $mysqlDbFctl->prepare($selectStatement);
$selectStatement->execute() || print "Can't execute statement: $DBI::errstr";
$selectStatement->finish();

my @resultat;
while ((@resultat) = $selectStatement->fetchrow_array) {
print $resultat[0]."==>".$resultat[1]."\n";
}

$mysqlDbFctl->disconnect() || die ("erreur lors de la deconnexion a la BDD");

outils : le connexion manager de putty

Voici un outil vraiment pas mal pour putty, ce dernier vous permet d'avoir des onglets et évite les nombreuses fenêtre pour putty

le connexion manager est disponible ici

A noter , que dans mon cas, j'ai du désactiver les HOTKEYS car elle rentrer en conflit avec la complétion automatique de bash ... etc ...

unix / linux : faire une copie scp

Comment uploader les fichiers sur un serveur avec scp ?

scp /home/enwoo/download/* www@monServeurDistant:/Tache/etc/enwoo/

Comment downloader les fichiers sur un serveur avec scp ?

scp www@monServeurDistant:/Tache/etc/enwoo/* /home/enwoo/download/

jeudi 20 janvier 2011

java : faire une méthode générique

Voici un petit exemple de méthode générique :

Voici une première méthode simple qui prend un type paramétrable :




Une plus complexe, qui déclare un type TDAO qui doit obligatoirement étendre l'inteface GenericDAO, qui elle même, prend 2 types génériques, un TBEAN et un type ? qui implemente Serialisable)


private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(

final TDAO dao, final Collection<TBEAN> beans)


Attention, les types sont réutilisés pour les paramètres de la méthode :

final
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(final TDAO dao, final Collection<TBEAN> beans )



Voici le code complet :


/**
* initialise puis supprime la collection de bean passés en paramètre
* Attention, les types DAO et beans doivent correspondrent
* @param <TDAO> est le type de DAO
* @param <TBEAN> est le type de bean
* @param dao est le DAO
* @param beans est une Collecion de beans
*/
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(
final TDAO dao, final Collection<TBEAN> beans) {
if (beans != null && dao != null) {
isInitialized(beans);
for (TBEAN bean : beans) {
supprimerRelation(dao,bean);
}
}
else if(beans == null)
{
logger.debug("La collection passée en paramètre ne doit pas être null");
}
else{
logger.debug("Le DAO passée en paramètre ne doit pas être null");
}
}

/**
* initialise puis supprime le bean passé en paramètre
* Attention, les types DAO et bean doivent correspondrent
* @param <TDAO> est le type de DAO
* @param <TBEAN> est le type de bean
* @param dao est un DAO
* @param bean est le bean
*/
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(
final TDAO dao, final TBEAN bean) {
if (bean != null && dao != null) {
isInitialized(bean);
dao.delete(bean);
} else if (bean == null) {
logger.debug("Le bean passé en paramètre ne doit pas être null");
} else {
logger.debug("Le DAO passé en paramètre ne doit pas être null");
}
}

/**
* initialise et retourne au sens hibernate un bean
* @param <T> le type du bean
* @param bean le bean a initialiser
* @return le bean passé en paramètre (ne sert que pour pouvoir faire une affectation )
*/
private <T> T isInitialized(T bean) {
if (bean != null && !Hibernate.isInitialized(bean)) {
Hibernate.initialize(bean);
}
return bean;
}

BDD : MySQL import / export d'un dump

Voici les commandes pour créer puis importer un dump MySQL (ici sous Windows et les binaires mySQL dans le PATH) :

mysqldump.exe -uMonUser -pMonMotDePasse -hlocalhost -P3306 monSchema --compress --opt > monFichierDump.sql

Attention il n'y a pas d'espace après le mot de passe ...

Voici, la ligne pour l'importer :

mysql --user=MonUser --password=MonMotDePasse monSchema --compress < monFichierDump.sql

A noter, que si la BDD, le user et les droits doivent exister ...

De plus, il semblerait que lors de l'import d'un dump, il vaut mieux supprimer l'ancien, et recréer une BDD vide afin d'éviter un "merge" du nouveau et de l'ancien schéma.

jeudi 13 janvier 2011

BDD mysql : rappel creation/suppression de foreign key

Voici un petit exemple de creation de 2 tables, une "parente" et une enfant liées par une clé étrangère.

A noter qu'il est nécessaire de créer des index via le keyword (INDEX ou KEY) pour chacune des clés étrangères


create table parent
( id bigint(20) NOT NULL AUTO_INCREMENT,
nom varchar(40),
primary key(id)
) type=INNODB;

create table enfant
(id bigint(20) not null auto_increment,
nom varchar(40),
parent_id bigint(20),
primary key(id),
index fk_parent_id (parent_id),
foreign key (parent_id) references parent(id) on delete cascade
) TYPE = INNODB;


La suppression d'une foreign key se fait via la commande suivante :
ALTER TABLE `maTable` REMOVE FOREIGN KEY `FK_leNomDeMaForeginKey`

Un petit exemple d'insertion avec AUTO_INCREMENT

insert into parent (nom) values ("enwoo");
insert into enfant (nom,parent_id) values ('julie',1);
insert into enfant (nom,parent_id) values ('maxime',1);


Si vous supprimez le parent, les enfants liés le seront aussi grâce à la claude on delete cascade.