jeudi 30 juillet 2009

java : apache : commons cli

Voici, un petit extrait de code permettant de faire des batchs avec des arguments professionnel ... Pour cela, il faut la librairie apache commons-cli (command line arguments)

voila comment ajouter un argument d à la ligne de commande :

Option srcDirOpt = OptionBuilder.withArgName("sourceDirectory").hasArg().isRequired().withDescription( "specifie le repertoire source").create("d");


Il faut noter que l'option -d possède un argument obligatoire (hasArg().isRequired()), et on y ajoute une description ...

Ensuite, on crée une liste d'options ...
Options options = new Options();

// ajout des options

options.addOption(srcDirOpt);


Ensuite, on instancie un parseur (ici les arguments seront de type GNU
// creation du parseurs

CommandLineParser parseur = new GnuParser();



Ensuite, Le parseur parse la ligne de commande ...
CommandLine commandLine = parseur.parse(options, args);


Si la syntaxe est respectée, il est facile de récupérer les arguments de la ligne de commande ... en nommant les optiond -d
String srcDirValue = commandLine.getOptionValue("-d");


Ce qui donne pour mon programme ...
java MonAppi -d /users/prod3/sidef/src/

Voici, une option sympa pour afficher une ligne d'aide formaté à GNU (la classe HelpFormater)

private static void printUsages(Options options) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(CpCvs.class.getName(), options);
}

unix : shell lancer une commande longue ...

pour lancer ce genre de commande longue (comme un batch ou script SQL), il est nécessaire d'uiliser la commande nohup

cette commande vous permet d'ignorer les signaux d'arrêt (lorsque votre terminal ou putty se ferme durant la nuit car il a atteint le TIMEOUT ...).

De plus, un fichier nommé (par défaut nohup.out) est crée et vous permet de lire les sorties de votre commande ...


nohup monScriptSuperLong.sh

java : valider un XML par un shema


<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/SimpleSchema"

xmlns:tns="http://www.example.org/SimpleSchema" elementFormDefault="qualified">

<element name="Personne" type="tns:Identite"></element>

<complexType name="Identite">

<sequence>

<element name="nom" type="string"></element>

<element name="prenom" type="string"></element>

<element name="age" type="nonNegativeInteger"></element>

<element name="naissance" type="date"></element>

<element name="dureeSession" type="time"></element>

<element name="email" type="tns:emailType"></element>

</sequence>

</complexType>



<simpleType name="emailType">

<restriction base="string">

<minLength value="10"></minLength>

<maxLength value="20"></maxLength>

<pattern value="(\w)+(@)(\w.)+(fr|com)"></pattern>

</restriction>

</simpleType>

</schema>




et le code java qui va bien :

package com.enwoo;



import java.io.File;

import java.io.IOException;



import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;



import org.w3c.dom.Document;

import org.xml.sax.ErrorHandler;

import org.xml.sax.SAXException;

import org.xml.sax.SAXParseException;



public class ValidateurXML {



static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";

static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";

static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";

/**

* @param args

* @throws ParserConfigurationException

* @throws IOException

* @throws SAXException

*/

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException

{

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setIgnoringComments(true);

dbf.setNamespaceAware(true);

dbf.setValidating(true);

dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

File schema = new File("ressources/SimpleSchema.xsd");

ValidateurXML validateurXML= new ValidateurXML();



if(!schema.exists())

{

System.err.println("Schema introuvable");

}

else

{

dbf.setAttribute(JAXP_SCHEMA_SOURCE,schema);

DocumentBuilder db = dbf.newDocumentBuilder();

db.setErrorHandler(validateurXML.new MyErrorHandler());

Document doc = db.parse(new File("ressources/Personnes.xml"));

}

}



private class MyErrorHandler implements ErrorHandler

{

public void error(SAXParseException exception) throws SAXException {

exception.printStackTrace();



}



public void fatalError(SAXParseException exception) throws SAXException {

exception.printStackTrace();



}



public void warning(SAXParseException exception) throws SAXException {

exception.printStackTrace();

}

}



un très bonne exemple ...

mardi 28 juillet 2009

java : créer un comparateur


/**

* comparateur permettant un tri par ordre decroissant sur la date DH_ENVOI_ALERTE

* @author enwoo

*

*/

private class TriObjetAComparerParDhEnvoiAlerteDecroissant implements Comparator<ObjetAComparer>

{

public int compare(ObjetAComparer o1, ObjetAComparer o2) {



if(o1 == null || o1.getAlm() == null || o1.getAlm().getDhEnvoiAlerte() == null || o2== null || o2.getAlm() == null || o2.getAlm().getDhEnvoiAlerte() == null)

{

throw new NullPointerException("L'objet ne peut etre null");

}

else

{

int cas = o1.getAlm().getDhEnvoiAlerte().compareTo(o2.getAlm().getDhEnvoiAlerte());



if(cas > 0)

{

cas = -1;

}

else if(cas < 0)

{

cas = 1;

}



return cas;

}

}

}

jeudi 23 juillet 2009

sourceForge EE : wiki

les astuces du metalangage de sourceForge pour obtenir un beau wiki (tout est expliqué sur le lien de SFEE "syntax reference" :

pour une belle ligne ...
----


Un joli titre en couleur ...
!!!%%(width:100% ; color:#1a957c ;)Mon accueil de wiki %%

une belle image ... attention pour cela, il faut créer une page et ajouter l'image avec le bon nom en attachement ... (PJ)
[GallerieImages/monImage.png]


Une joli puce avec un lien |BonnesPratiquesDeveloppementDEF vers artifact SourceForge
* [Bonnes pratiques concernant le développement |BonnesPratiquesDeveloppementDEF]

Un joli sommaire avec une liste de liens numérotés

%%(background-color:#f9f9f9;)
!!Sommaire
#[En résumé ]
#[Les niveaux de trace]
%%


Attention, ça se complique ... si ma page courante s'appelle pageCourante, je peux y faire des références par un lien ...
ici :
* on crée un titre nommé "Les paramètres de lancement"
* avec un lien vers le titre de cette page nommé "pageCourante" et le lien "#Les paramètres de lancement"

ce qui donne pour la syntaxe ...
[Les paramètres de lancement|pageCourante#Les paramètres de lancement]



%%(background-color:#f9f9f9;)
!!Sommaire
#[Les paramètres de lancement|pageCourante#Les paramètres de lancement]
%%

!!Les paramètres de lancement
Voic les fameux paramètres expliqués ... blabla ... blabla ...

mardi 21 juillet 2009

selenium

un bon wiki ...
wiki selenium

base de donnée ...

tester si une base est à l'écoute :

tnsping DEV4.FRET.SNCF.FR

ou sinon un simple telnet sur le port concerné (ici , sur MonServer : 1234)

telnet monServer 1234

lundi 20 juillet 2009

windows ... desactiver bip système ....

Vous en avez assez de tous les beeps du système, le bruit du haut-parleur de la carte-mère ?

Il est possible de les désactiver très simplement. Pour ce faire éditez la base de registres :
Démarrer / Exécuter / "regedit"

Positionnez-vous sur la clé suivante :

HKEY_CURRENT_USER\Control Panel\Sound

Vous pouvez désactiver les bips (beeps) du système en créant une nouvelle valeur de type chaîne nommée Beep et en lui affectant la valeur No !

puis redémarrer ...

et sinon la seconde technique ...
Allez ds le gestionnaire de périphériques> Dans
Affichage, afficher les périphériques cachés> Dans périphériques non plug&play il y a un périphérique BEEP qui correspond au Haut-parleur directement> Désactiver


puis redémarrer ... et c'est réglé :)

jeudi 16 juillet 2009

C/C++/ makefile .... compiler avec différentes variables ...

compiler en débug et multi-thread ... :
CCFLAGS=-mt -g

définir des directives de précomilation ... avec -D MaDirective
CCMACRO=-D_SOLARIS -DILS_USE_THREADS

ajouter des répertoires includes (option -I):
-I/produits/ilog/server53/include -I/produits/tuxedo/tuxedo8.1/include

ajouter des librairies (*.a ou *.so) , d'abord les header , ici la librarie ultrasparc 32 bits :
-I/produits/ilog/server53/include
-L/produits/ilog/server53/lib/ultrasparc32_8_6.2/shared_mt

ici un exemple de makefile, une cible clean de makefile :

  1. tous les points cpp, donne des points o ... (j'en suis pas sur ...), et la liste des fichiers ...

  2. veryclean depend de la cible clean ...



.cpp.o:
$(CC) $(CCMACRO) $(CCFLAGS) $(CCINCLUDE) -c $< -o $(OUTPUTDIR)/$*.o

TablesHash.o : metier/src/TablesHash.cpp
TablesHash.o : metier/include/TablesHash.h

veryclean : clean
rm -f core ir.out $(OUTPUTDIR)/*.o
rm -fr $(OUTPUTDIR)/SunWS_cache

C/C++ générer WS avec GSOAP

gsoap est un outil permettant la génération des classes nécessaires à un appel WS ... en C ou C++ ...

http://www.cs.fsu.edu/~engelen/soapdoc2.html

il y a 2 outils à lancer successivement ....
d'abord, la génération du fichier d’entête, avec wsdl.exe (transforme un wsdl en header .h)

wsdl2h.exe –n idc –c –o webservice.h MonWebservice.wsdl

ensuite la génération des stubs ... avec soapcpp2.exe
soapcpp2.exe –p idc –c webservice.h => génération stub

lundi 13 juillet 2009

activer la vérification d'un XML schema avec DOM ou SAX

static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";

static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";

static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";



// Pour DOM

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setIgnoringComments(true);

dbf.setNamespaceAware(true);

dbf.setValidating(true);

dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

dbf.setAttribute(JAXP_SCHEMA_SOURCE, new File(xsdFile));

// Pour SAX

SAXParserFactory spf = SAXParserFactory.newInstance();

spf.setNamespaceAware(true);

spf.setValidating(true);

SAXParser sp = spf.newSAXParser();

sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

sp.setProperty(JAXP_SCHEMA_SOURCE, xsdFile);

jeudi 9 juillet 2009

base de donnée ... insertion de masse ...

inserer des donnees d'une autre table dans la première ...

INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';

un insert de 3 lignes ...
INSERT ALL
INTO suppliers (supplier_id, supplier_name) VALUES (1000, 'IBM')
INTO suppliers (supplier_id, supplier_name) VALUES (2000, 'Microsoft')
INTO suppliers (supplier_id, supplier_name) VALUES (3000, 'Google')
SELECT * FROM dual;

un insert dans 2 table différentes ...

INSERT ALL
INTO suppliers (supplier_id, supplier_name) VALUES (1000, 'IBM')
INTO suppliers (supplier_id, supplier_name) VALUES (2000, 'Microsoft')
INTO customers (customer_id, customer_name, city) VALUES (999999, 'Anderson Construction', 'New York')
SELECT * FROM dual;

oracle : executer un script ....

Sous réserve d'être connecté et donc d'avoir un shell SQL ... (=> ORACLE_SID est correctement initialisée ex : ORACLE_SID=DEV .... )

Ensuite lancer sqlplus pour obtenir un shell sql avce sqlplus ... se logger ... puis, il est possible de lancer des commande sql ...

pour executer, un script sql ... il faut indiquer à oracle le chemin avec un @ ...

Ex.: @D:\MesDocs\myProjet\bdd\maj_donnees_v1.05.SQL

lundi 6 juillet 2009

unix : customiser son shell

pour customiser bash ... il faut ajouter le fichier .bashrc dans son home ... qui sera appele par la commande bash ... (et pas le .profile ...)

Voici un exemple qui ajoute quelques alias et surtout la coloration syntaxique ...

# configuration bashrc
export PS1="[\t][\u@\h:\w] >>"
# liste des alias
alias ls='ls --color=auto'
alias ll='ls -al'
alias pspdt='ps -edf | grep prod3'
alias psl='/usr/ucb/ps -auwwwxxx | grep $1'
alias psportail='/usr/ucb/ps -auwwwxxx | grep portail'
alias vi='/usr/local/bin/vim'
alias pspdt='/usr/ucb/ps -auwwwxxx | grep serveurPDT'
alias cdlog='cd /users/prod3/sidef/log'
alias tailpdt='tail -f /users/prod3/sidef/log/serveurPDT.log'
alias bigf='find . -name "*core*" -o -name "*dump*" -o -name "*.log" -ctime +3 -size +1000k -exec ls -al {} \;'
alias rmbigf='find . -name "*core*" -o -name "*dump*" -o -name "*.log" -ctime +3 -size +1000k -exec rm -iv {} \;'

générer des rapports Junit

Sous eclipse, faire un export du projet sous format Ant ... puis ajouter les tâches Alltest et JunitReport ... Comme suit ...

<target name="AllTests">
<mkdir dir="${junit.output.dir}">
<junit fork="yes" printsummary="withOutAndErr">
<formatter type="xml">
<test name="com.generic.test.metier.AllTests" todir="${junit.output.dir}">
<jvmarg line="-Xmx1024m">
<classpath refid="pdt.classpath">
</junit>
</target>
<target name="junitreport">
<junitreport todir="${junit.output.dir}">
<fileset dir="${junit.output.dir}">
<include name="TEST-*.xml">
</fileset>
<report format="frames" todir="${junit.output.dir}">
</junitreport>
</target>

unix : utiliser la crontab

Les commandes :
export EDITOR=vi ;to specify a editor to open crontab file.
crontab -e Edit your crontab file, or create one if it doesn't already exist.
crontab -l Display your crontab file.
crontab -r Remove your crontab file.
crontab -v Display the last time you edited your crontab file. (This option is only available on a few systems.)

Voici un exemple d'execution d'une tache tous les jours à 18h30 ...
30 18 * * * rm /home/someuser/tmp/*


avec un fichier de log ...
30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log

Tout est là ...
http://www.adminschoice.com/docs/crontab.htm

mercredi 1 juillet 2009

decompiler du code java ... ou voir le contenu d'un .class

Télécharger le plugin jadClipse, et le binaire jad.exe ... redémarrer eclipse, puis ...
Aller dans préférences, et mettre le chemin exacte, avec le nom jad.exe ....

C:\Documents and Settings\toto\Mes documents\myDownload\eclipse-jee-galileo-win32\eclipse\plugins\jad.exe

tout est la ...
http://hikage.developpez.com/java/articles/jad/?page=page_3