mercredi 30 juin 2010

windows : bureau a distance

Il est possible de se connecter a distance sur un pc windows en bureau à distance via la commande :

Démarrer->exécuter, puis lancer la commande suivante :

mstsc

Ensuite il faut se logger de manière classique à un poste Windows. Il faut faire attention au domaine (voir préfixer l'utilisateur par le nom de domaine)

bash : script de test existence fichier

Voici un super cours de shell ... Voici un super cours de shell ...

Explications :
1) Toute l'astuce consiste a faire un "echo" de ma variable CLASSPATH, et a remplacer en live les séparateurs ':' par des ' ' afin de pouvoir être utiliser dans un for ...

Via la commande :
librairies=`echo $CLASSPATH | sed "s/:/ /g"`

2) puis on itere via un for :
librairies=`echo $CLASSPATH | sed "s/:/ /g"`

for librairie in ${librairies}


3) on test la non existence du fichier via :
if [ ! -e "${librairie}" ]

4) on definit 2 procédures :
- controleClasspath()
- lancerScript()


La première met à true la variable classpathOk si tous les jars sont présents et appelle la procédure lancerScript , sinon à false.


if [ "${classpathOk}" == "true" ]
then
lancerScript
fi




#!/bin/bash

# Definit l'emplacement des jars
# export LIB_HOME=${domaine.basedir}/../../.wlnotdelete/extract/bocorchestre_bocorchestreEAR_bocorchestre/jarfiles/WEB-INF/lib/
export LIB_HOME=/cygdrive/d/bea/user_projects/domains/bocV8lot1/myserver/.wlnotdelete/extract/myserver_web_web/jarfiles/WEB-INF/lib
# Ajoute le répertoire au Path
export PATH=$PATH:$BATCH_HOME

# Defini le classpath
export CLASSPATH=$CLASSPATH:$BATCH_HOME/batch.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/framework.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/framework.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/communs.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/domaine.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/services.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/log4j-1.2.11.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/datedFileAppender-1.0.2.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/poi-2.5.1.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/bocvaloservicesejb.jar
export CLASSPATH=$CLASSPATH:$LIB_HOME/concurrent-1.3.4.jar

classpathOk=true

controleClasspath()
{
librairies=`echo $CLASSPATH | sed "s/:/ /g"`

for librairie in ${librairies}
do
if [ ! -e "${librairie}" ]
then
echo "le jar suivant \"${librairie}\" est inexistant"
classpathOk=false
fi
done
}

lancerScript()
{
echo "cool"
}

echo "controle du classpath"
echo "${classpathOk}"
controleClasspath
echo "${classpathOk}"

if [ "${classpathOk}" == "true" ]
then
lancerScript
fi

jeudi 17 juin 2010

cvs : résumé des commandes utiles

Si le plugin eclipse changelog est fort utile ...

Sinon, voici un résumé des commandes :

ici un très bon site d'ou est extrait la suite ...


Résumé des commandes CVS
Télécharger le fichier brut

Creation du repository :
========================
=> setenv $CVSROOT ...
==> cvs init

Creation d'un module :
======================
aller dans le repertoire de travail du module
=> cvs import -m "Message" module vendor_tag branch_tag
si vous ne comprenez pas ce que sont les vendor et branch_tag, c'est
normal, personne ne le sait. mettez par exemple "main" et "start".



Creation d'une copie locale d'un module :
=========================================
depuis la branche principale
=> cvs co module
depuis une branche
=> cvs co -d branch_name module_name
depuis un tag
=> cvs co -r tag module_name

Exportation sans repertoires CVS administratifs :
=================================================
memes options que cvs check out
=> cvs export

Suppression d'une copie locale :
===============================
pour eviter d'effacer un checkout en oubliant nos modifications
=> cd ..
==> cvs release -d module



Mise a jour des fichiers locaux :
=================================
depuis la branche courante
=> cvs up
depuis la fin de la branche principale
=> cvs up -A
depuis une branche
=> cvs up -r branch_name
depuis un tag
=> cvs up -r tag_name

Sauver les fichiers locaux dans le repository :
===============================================
=> cvs ci -m "message"
changer la revision (doit etre plus grand que tous les numeros existants)
=> cvs ci -r 3.0



Ajouter des fichiers :
======================
=> cvs add file1 file2 ...
==> cvs ci -m "ajout des fichiers"

Supprimer des fichiers :
========================
Il faut d'abord supprimer le fichier du répertoire
=> rm file1 file2 ...
==> cvs rm file1 file2 ...
===> cvs ci -m "suppression des fichiers"

Supprimer un répertoire :
=========================
Pas possible directement, il faut aller le supprimer dans le serveur.



Créer un tag :
==============
dans la branche courante
=> cvs tag tag_name
dans une autre branche
=> cvs rtag -r branch_name tag_name
uniquement les fichiers deja taggée
=> cvs rtag -r old_tag_name tag_name
en verifiant qu'aucun fichier n'est modifié localement
=> cvs tag -c tag_name

Créer une branche :
===================
dans la branche courante
=> cvs tag -b branch_name
dans une autre branche
=> cvs rtag -b -r branch_name new_branch_name
passer dans cette branche
=> cvs up -r branch_name

Merge avec une branche :
========================
merge d'une autre branche dans la branche courante
=> cvs up -j branch_name
==> cvs ci -m "Applied branch_name modifications"

Remerger une branche mergée et modifiée :
=========================================
si la branche branch_name a été mergée dans la branche
courante puis tagguée a tag_name
=> cvs up -j tag_name -j branch_name (attention à l'ordre)
==> cvs ci -m "Applied new branch_name modificatios"

Associer un nouveau nom symbolique :
====================================
pour creer un alias sur un tag ou une branche existant
=> cvs admin -n newname:oldname [repertoire]
si le nom "oldname" est supprimé, le contenu de la branche reste accessible par "newname".

Annuler une branche :
=====================
si une branche a été crée et qu'on veut la fusionner (par exemple parce qu'un sous-repertoire ne sera
jamais modifié dans la branche et peut donc rester synchrone avec la branche principale), on commence
par sauver l'ancienne branche au cas ou :
=> cvs admin -n newname:oldname [repertoire]
ensuite on supprime l'ancien nom de la branche :
=> cvs tag -B -d oldname [repertoire]
enfin on aliase l'ancien nom sur la branche avec laquelle on veut fusionner :
=> cvs admin -n oldname:branchtomerge [repertoire]
il peut être bien d'updater entre les opérations pour récupérer les fichiers qui ne sont pas présents
dans chaque branche.


Obtention d'une version sticky :
================================
sticky tag
=> cvs up -r tag_name/branch_name
=> cvs ou -r tag_name/branch_name module
sticky date
=> cvs up -D yesterday/"1 hour ago"/"24 Sep"/"24 Sep 1972 12:05"/"1972-09-24 11:56"

Suppression des sticky :
========================
=> cvs up -A



Annulation des modifications locales :
======================================
les fichiers remplacés sont sauvés en .#file.revision
=> cvs up -C



Obtention des messages de log des commit :
==========================================
=> cvs log file_name


Voir l'historique des revisions d'un fichier :
(avec les branches et les tags)
==============================================
=> cvs st -v file_name



Voir l'historique brute du module :
===================================
=> cvs his -ea module


Options classiques :
==================
creation des nouveaux repertoires apparus dans le repository
=> cvs up -d
suppression des repertoires vides
=> cvs up/co -P
update non recursif
=> cvs up -l
diminuer les messages affichés
=> cvs -q
utiliser le format unifié pour diff
=> cvs diff -u
ne pas faire attention aux lignes/caracteres blancs insérés
=> cvs diff -b -B
prendre la version la plus recente si aucune de convient avec -d ou -r
=> cvs up/co -f -D/-r

A mettre dans .cvsrc
cvs -q
update -d -P
checkout -P
diff -u -b -B

mercredi 16 juin 2010

SQL / oracle : mettre a jour une vue ...

J'ai été surpris de découvrir qu'il était possible de mettre à jour une vue, ou d'insérer des valeurs. Evidemment, il y a des restrictions:

Apparemment , il est possible de faire des update , insert dans une vue, sous réserves qu’elle ne contienne pas :

De champ calculé,
Plusieurs tables
De valeurs obligatoires dans la table sur laquelle la vue fait référence et qui ne serait pas présente dans la table et qui n’a pas de valeur par défaut.

SQL / oracle : retrouver une colonne ou une table dans un schema

Voici, une requête fort utile lorsque l'on recherche une colonne et que l'on ne sait pas vraiment ou elle se trouve, et son nom :

Dans ce cas, on peut utiliser les tables system .. a condition d'avoir les droits adéquats ... Une série de table commençant par dba_* ... (ex: dba_objects)

Sinon, il existe les mêmes tables avec un filtre sur le owner et qui sont préfixée par user_* (ex: user_tab_cols)



select * from dba_tab_cols where owner = 'MonUser' and UPPER(column_name) like '%TARE%'


ou encore :


select * from user_tab_cols;


Il est aussi possible de retrouver une table en utilisant une requête du type :
Dans l'exemple, on recherche des tables contenant le mot ANO ...


select * from dba_all_tables where UPPER(table_name) like '%ANO%'

jeudi 10 juin 2010

java : astuces configuration log4j

un petit rappel issue du site apache pour parametrer log4j via des parametres en ligne de commandes :

ici un exemple pour choisir le niveau de logs et un fichier de configuration ... via une variable d'environnement.

ça peut toujours être pratique.

ici, le fichier sera recherché dans le WEB-INF/classes
export TOMCAT_OPTS="-Dlog4j.debug -Dlog4j.configuration=foobar.xml"


ici, on ajoute une factory :
set TOMCAT_OPTS=-Dlog4j.configuration=foobar.lcf -Dlog4j.configuratorClass=com.foo.BarConfigurator


ici, un chemin complet Windows c:/foobar.properties
set TOMCAT_OPTS=-Dlog4j.configuration=file:/c:/foobar.properties


ici, avec la servlet d'init et un parametre :


package com.foo;

import org.apache.log4j.PropertyConfigurator;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.IOException;

public class Log4jInit extends HttpServlet {

public
void init() {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
// if the log4j-init-file is not set, then no point in trying
if(file != null) {
PropertyConfigurator.configure(prefix+file);
}
}

public
void doGet(HttpServletRequest req, HttpServletResponse res) {
}
}


et le web.xml

<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.foo.Log4jInit</servlet-class>

<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.lcf</param-value>
</init-param>

<load-on-startup>1</load-on-startup>
</servlet>

java : bonnes pratiques

Voici un très bon site qui rappelle les bonnes pratiques java / java EE ... De précieux conseil s'y trouve ...

http://www.javapractices.com