vendredi 30 avril 2010

unix : utiliser md5sum

voici, une commande simple qui calcule la sum de fichier et la stocke dans un fihcier signatures.txt.

find ./config/orchestre -name "*.*" -exec md5sum {} > signatures.txt \;

Ensuite, nous pouvons contrôler que les fichiers n'ont pas été modifié.

md5sum -c signatures.txt

Voici, un moyen simple de tester que des fichiers n'ont pas été modifié.

jeudi 29 avril 2010

SQL : caractères mal encodés

Parfois, lorsque l'on fait un script d'insertion ou d'update, les caractères dans la BDD sont mal encodé. En fait, lors de la création su script SQL, il faut faire attention, à ce que notre encodage soit conforme (<=> le même) à celui de la BDD.

Pour le savoir, il faut vérifier que la variable d'env NLS_LANG sur le serveur de BDD est bien positionné lors du passage du script et aussi que le fichier à lui aussi été encodé dans le bon jeu de caractères ...

sur notre serveur, je tape la commande env:
env
...
NLS_LANG=french_france.we8iso8859p15
...


Ici, on peut voir que la langue choisi, et french_france, et le jeu de caractères est
iso8859p15

java : petit rappel sur les regex

Voici, un exemple de code qui fonctionne, à noter les double slash ... un pour le \b et 1 de plus car on est dans une String java ...

1) tout d'abord, on compile le pattern souhaité
Pattern patternCtrlGenAnnule = Pattern.compile("(\\b" + ServiceMetier.CTRL_GEN_ANNULE + "\\b)");

2) puis après on essaie de matcher une string :
Matcher matcherCtrlGenAnnulle = patternCtrlGenAnnule.matcher(valeur);

3) puis, on fait un find pour savoir si le pattern a été trouvé ...
matcherCtrlGenAnnulle.find()

4) il est possible de récupérer le token, via :
valeur.substring(matcher.start(),matcher.end())
ou la method :
matcher.group();

PS: a noter que la methode matches ne retourene true que si la regex matchecomplèteement.

De plus, il est parfois plus facile, de faire la negation de la chaine recherché pour vérifier quelle est conforme, par exemple:

String regexpNegative = "^((\\bCTRL_GEN_ACTION\\b)|(\\bCTRL_GEN_VERSION\\b)"


public static void une methode()
{
private final static Pattern patternCtrlGenAnnule = Pattern.compile("(\\b" + ServiceMetier.CTRL_GEN_ANNULE + "\\b)");

Matcher matcherCtrlGenAnnulle = patternCtrlGenAnnule.matcher(valeur);

if (matcherCtrlGenAnnulle.find())
{
if (sLog.isDebugEnabled())
{
logMethodesQuiMatches(valeur, matcherCtrlGenAnnulle, ServiceMetier.CTRL_GEN_ANNULE);
}
if (hasAuMoinsUneCommandeAnnulee(commandes))
{
/**
*le controle doit etre applique, mais les condition ne sont pas remplie => on sort
* et on retourne
* Boolean.FALSE
*/
return Boolean.FALSE;
}
}
}

java : utilisation getResourceAsStream

Voici un petit exemple d'utilisation de getResourceAsStream ... Attention, une subtilité, si on ne met pas de "/" devant le nom du fichier, ce dernier le préfix du nom package de la classe ... Sinon, il recherche dans le classpath ...


public static void getConfig()
{
// attention recherche le fichier dans le package cette classe
InputStream is = ServiceMetier.class.getResourceAsStream(fichierDeConfiguration);
try {
if (is != null) {
properties.load(is);
// configuration du service
maximumCmdSelectionnable = Integer.valueOf(properties
.getProperty(MAX_SELECT_CMD, maximumCmdSelectionnable.toString()));
} else {
sLog.fatal("impossible de trouver le fichier de configuration dans le classpath [" + fichierDeConfiguration + "]");
}

} catch (IOException e) {
sLog.error("Erreur IO lors de la lecture du ficheir de configuration");
}
}

mercredi 28 avril 2010

java : traiter les erreurs SQL

voici un exemple tiré de ce site de java superbe www.exampledepot.com


try {
// Execute SQL statements...
} catch (SQLException e) {
while (e != null) {
// Retrieve a human-readable message identifying the reason for the exception
String message = e.getMessage();

// This vendor-independent string contains a code that identifies
// the reason for the exception.
// The code follows the Open Group SQL conventions.
String sqlState = e.getSQLState();

// Retrieve a vendor-specific code identifying the reason for the exception.
int errorCode = e.getErrorCode();

// If it is necessary to execute code based on this error code,
// you should ensure that the expected driver is being
// used before using the error code.

// Get driver name
String driverName = connection.getMetaData().getDriverName();
if (driverName.equals("Oracle JDBC Driver") && errorCode == 123) {
// Process error...
}

// The exception may have been chained; process the next chained exception
e = e.getNextException();
}
}

java : encodage de caractère ISO-LATIN-1 vers Unicode

Voici un petit exemple de code qui vous permet d'encoder une chaine d'un charset connu au charset java standart (Unicode)


// liste tous les charsets disponibles
Map map = Charset.availableCharsets();
Iterator it = map.keySet().iterator();

while (it.hasNext()) {
// Get charset name
String charsetName = (String)it.next();

System.out.println("charset " + charsetName);

}


// convertit une chaine de ISO-8859-1 à la String Java UTF-8
String lu = new String("Saisies complémentaires ADV incomplètes".getBytes(),"ISO-8859-1");
System.out.println("" + new String(lu.getBytes("ISO-8859-1")));


Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();

try {
// Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
// The new ByteBuffer is ready to be read.
ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(lu));

// Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
// The new ByteBuffer is ready to be read.
CharBuffer cbuf = decoder.decode(bbuf);
String s = cbuf.toString();
System.out.println(s);
} catch (CharacterCodingException e) {
e.printStackTrace();
}

vendredi 23 avril 2010

weblogic : install silencieuse


/var/tmp/produits/weblogic-8.1-sp5/server815_upgrade_linux32.bin -mode=silent -silent_xml=/var/tmp/produits/weblogic-8.1-sp5/wls81sp5.bod2.silent.xml -log=/users/enwoo/logs/wls81_sp5_install.log

unix : find -o et grep avec regex

je cherche a nettoyer tous les fichier "core" et tous les fichiers "dump" ... Voici une commande très simple, qui permet de se souvenir de la syntaxe du find:



find /devel/bo/2 \( -name 'core*' -o -name 'jrockit\.*.\dump' -o -name *.log -o -name *.log* \) -type f -size +1000k -exec rm -vf {} \;


Voici un petit rappel des grep avec regex

ici un très bon lien ...

exemple voici, une petit commande qui permet de savoir si les ports entre 11120 et 11129 sont utilisés "1112."

netstat -ap | grep -e '1112.'

mardi 20 avril 2010

flex 3 : compilation avec Ant

voici un exemple de compilation de flex avec une tache Ant ... Voici un exemple complet ...

<!-- =================================
target: flex.compile
================================= -->
<target name="flex.compile" description="permet la compilation FLEX">
<echo>" FLEX_HOME = [${FLEX_HOME}]"</echo>
<property name="srcdir" location="${basedir}/../../uneAppli-flex"/>
<property name="webSrcDir" location="${basedir}/../uneAppli-web"/>
<echo>" srcdir = [${srcdir}/src/main/flex/MonAppliFlex.mxml]"</echo>
<echo>" webSrcDir = [${webSrcDir}/MonAppliFlex.swf]"</echo>
<echo>[${webSrcDir}/WEB-INF/flex/services-config.xml]</echo>
<echo>[${FLEX_HOME}/frameworks/flex-config.xml]</echo>
<echo>[${FLEX_HOME}/frameworks]</echo>
<echo>[${srcdir}/src/main/locales/{locale}]</echo>

<!-- compile .mxml into .swf -->
<echo>[${basedir}/../uneAppli-web/WEB-INF/flex/services-config.xml]</echo>
<mxmlc file="${srcdir}/src/main/flex/MonAppliFlex.mxml"
output="${webSrcDir}/MonAppliFlex.swf"
context-root="MonAppli"
allow-source-path-overlap="true"
actionscript-file-encoding="UTF-8"
headless-server="true"
locale="fr_FR"
debug="false"
keep-generated-actionscript="false"
incremental="false"
compiler.services="${webSrcDir}/WEB-INF/flex/services-config.xml">

<!-- Get default compiler options. -->
<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml" />
<!-- List of path elements that form the roots of ActionScript class hierarchies. -->
<source-path path-element="${FLEX_HOME}/frameworks" />
<source-path path-element="${srcdir}/src/main/locales/{locale}" />
<!-- List of SWC files or directories that contain SWC files. -->
<compiler.library-path dir="${srcdir}" append="true">
<include name="libs/CGFlexFwk-1.0.71.swc" />
<include name="libs/flexlib.swc" />
<include name="src/main/locales" />
</compiler.library-path>
<compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
<include name="libs" />
<include name="../bundles/{locale}" />
</compiler.library-path>

<!-- definition du basename du bundle -->
<include-resource-bundles bundle="MonAppliFlex.properties" />
</mxmlc>
</target>

<target name="webModule.uneAppli">
<mkdir dir="${dest}"/>
<mkdir dir="${dest.package}"/>
<mkdir dir="${Generated.Source}"/>
<echo>+---------------------------------------------------+</echo>
<echo>| C O M P I L I N G S O U R C E S |</echo>
<echo>+---------------------------------------------------+</echo>
<!-- Modifie numero de version -->
<replace file="${src.uneAppli.web}/fr/sncf/fret/bocuneAppli/coordination/servlets/FretServletInitialisation.java" token="@@version.name" value="${cvs.tag.uneAppli}"/>

<javac bootclasspathref="uneAppli.web.class.path" debug="true" deprecation="true" destdir="${dest}" nowarn="false" target="1.2" encoding="ISO-8859-1">
<src path="${src.uneAppli.web}"/>
<src path="${Generated.Source}"/>
</javac>

<manifest file="MANIFEST.MF">
<attribute name="Built-By" value="Enwoo"/>
<attribute name="Created-By" value="Enwoo"/>
<attribute name="Ant-Version" value="Apache Ant 1.6.2"/>
<attribute name="Class-Path" value="log4j-1.2.11.jar datedFileAppender-1.0.2.jar poi-2.5.1.jar castor-0.9.5.4-xml.jar xerces.jar framework.jar frameworkboc.jar axis-1.1.jar jaxrpc-1.1.jar wsdl4j-1.4.jar saaj-1.1.jar commons-discovery-0.2.jar"/>
</manifest>
<war compress="false" destfile="uneAppli-web.war" webxml="${files.uneAppli.web}/WEB-INF/web.xml" manifest="MANIFEST.MF">
<fileset dir="${files.uneAppli.web}">
<patternset refid="dest.exclude"/>
<include name="**/*.css"/>
<include name="**/*.gif"/>
<include name="**/*.js"/>
<include name="**/*.jsp"/>
<include name="**/*.MF"/>
<include name="**/*.dtd"/>
<include name="**/*.html"/>
<include name="**/*.tld"/>
<include name="**/*.xml"/>
<include name="**/*.wsdd"/>
<include name="**/*.swf"/>
</fileset>
<classes dir="${dest}">
<patternset refid="dest.exclude"/>
<include name="**/*.class"/>
</classes>
<classes dir="${src.uneAppli.web}">
<patternset refid="dest.exclude"/>
<include name="**/*.properties"/>
</classes>
<classes dir="${src.uneAppli.domaine}">
<patternset refid="dest.exclude"/>
<include name="**/*.xml"/>
</classes>
<classes dir="${src.uneAppli.commun}">
<patternset refid="dest.exclude"/>
<include name="**/*.xml"/>
</classes>
<lib dir="${dest.package}">
<include name="bocvaloservicesejb.jar"/>
</lib>

<lib dir="${struts.home}">
<patternset refid="dest.exclude"/>
<include name="commons-beanutils.jar"/>
<include name="commons-collections.jar"/>
<include name="commons-digester.jar"/>
<include name="commons-fileupload.jar"/>
<include name="commons-httpclient-2.0.2.jar"/>
<include name="commons-logging.jar"/>
<include name="commons-validator.jar"/>
<include name="jakarta-oro.jar"/>
<include name="struts.jar"/>
</lib>

<lib dir="${flex.lib}/dependances">
<include name="aspectjweaver-1.6.0.jar"/>
<include name="backport-util-concurrent-2.1.jar"/>
<include name="blazeds-common-3.0.0.544.jar"/>
<include name="blazeds-core-3.0.0.544.jar"/>
<include name="blazeds-opt-3.0.0.544.jar"/>
<include name="blazeds-remoting-3.0.0.544.jar"/>
<include name="cglib-nodep-2.1_3.jar"/>
<include name="flex-messaging-common-3.0.0.544.jar"/>
<include name="flex-messaging-core-3.0.0.544.jar"/>
<include name="flex-messaging-opt-3.0.0.544.jar"/>
<include name="flex-messaging-proxy-3.0.0.544.jar"/>
<include name="flex-messaging-remoting-3.0.0.544.jar" />
<include name="spring-aop-2.5.6.SEC01.jar" />
<include name="spring-beans-2.5.6.SEC01.jar" />
<include name="spring-context-2.5.6.SEC01.jar"/>
<include name="spring-context-support-2.5.6.SEC01.jar" />
<include name="spring-core-2.5.6.SEC01.jar" />
<include name="spring-jdbc-2.5.6.SEC01.jar" />
<include name="spring-orm-2.5.6.SEC01.jar" />
<include name="spring-tx-2.5.6.SEC01.jar" />
<include name="spring-web-2.5.6.SEC01.jar"/>
<include name="spring-webmvc-2.5.6.SEC01.jar"/>
</lib>

<lib dir=".">
<patternset refid="dest.exclude" />
<include name="${ejb-jar}" />
</lib>
</war>
</target>

lundi 19 avril 2010

bash :script de remplacement

Voici un petit script utile, pour effectuer des remplacements de masse dans des fichiers de configuration ... (testé sous cygwin)

voici un super lien : un super cours

a noter:
que le premier caractère après le sed est son délimiteur .. du coup, ici c'est très pratique car les slash sont très embêtant .. ici j'ai choisi @ ...

et le if en bash qui s'effectue simplement avec $? == 0 (teste si la dernière commande s'est bien déroulée)

une astuce simple pour tester les expressions arithmétiques :

echo $(( 5 > 7))
1





#!/bin/bash

chaineATrouver=/5
chaineARemplacer=/3

files=`find . -name "rebuild.*" `
echo "remplacement de la chaine [${chaineATrouver}] par [${chaineARemplacer}]"
for file in ${files}
do
echo "traitement du fichier [${file}]"
sed -e "s@${chaineATrouver}@${chaineARemplacer}@g" ${file} > ${file}.new
if [ $? == 0 ]
then
if [ -e "${file}.new" ]
then
mv "${file}" "${file}.old"
mv "${file}.new" "${file}"
else
echo "le fichier [${file}.new]n'existe pas"
fi
else
rm -v *.new
fi
done

echo 'fin du traitement'

mercredi 14 avril 2010

oracle: locker une table ....

Voici, une manière de locker une table via une commande oracle

LOCK TABLE UNE_TABLE IN EXCLUSIVE MODE

Oracle : script d'import de base

Voici un jolie script d'import d'un SID nommé "copieProd" une base nommée "maBDD", et du user "userProd" vers mon "userCopieProd"


#!/bin/ksh
# procedure restauration base de recette
set -x
CDATE=`date '+%Y%m%d'`
LOG=/logs/import_monSchema_${CDATE}.log
export ORACLE_HOME=/oracle/app/product/9.2.0.7
export PATH=$ORACLE_HOME/bin:$PATH
echo "debut de import_sid.ksh " > $LOG
date >> $LOG
cd /logs

date >> $LOG
echo "\nDebut de l'import" >> $LOG
#definition variable
export ORACLE_SID=copieProd
export DB_NAME=maBDD
mknod pipe_${DB_NAME} p

# decompression du dump
nohup uncompress pipe_${DB_NAME} & >> $LOG

#lancement de ma commande d'import
imp system/manager file=pipe_${DB_NAME} log=imp_${DB_NAME}_${CDATE}.log fromuser=userProd touser=userCopieProd buffer=104857600 commit=y
rm pipe_${DB_NAME} >> $LOG

date >> $LOG
echo "\nFin de l'import" >> $LOG

# Calcul des statistiques ${DB_NAME}
date >> $LOG
echo "\nCalcul des statistiques de ${DB_NAME}" >> $LOG
su - oracle -c "/users/oracle/admin/calc_stats_sid.ksh ${DB_NAME}" >> $LOG

lundi 5 avril 2010

unix / linux : bash scripts compteur

petit script utilisant des variables ...

#!/bin/bash
echo "demarrage analyse FS";
ptsMontages=`df -k`;



((i=0));
((first=0));
((val=1));
for currentPt in $ptsMontages;
do
((i++));
if test $i -ge 8
then
((first++));
((val=first%7));
fi

if test $val -eq 0
then
echo "trouve [$i] [$first] [$val]= [$currentPt]";
fi
done
echo "fin analyse FS";