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)
mercredi 30 juin 2010
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
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
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.
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%'
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 :
et le web.xml
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
http://www.javapractices.com
mardi 8 juin 2010
oracle : trigger , vue concrètes, vue matiérialisée (<=> snapshot)
Voici un exemple complet de création d'une vue concrète par un trigger, ou de la création d'une vue matérialisées (<=> appelée aussi snapshot).
Ce code est extrait du très bon cours (de M. Lalonde) suivant
Cet exemple contient un rappel sur les trigger, les shapshot, et la création d'une vue concrète via le trigger ...
Ce code est extrait du très bon cours (de M. Lalonde) suivant
Cet exemple contient un rappel sur les trigger, les shapshot, et la création d'une vue concrète via le trigger ...
DROP TABLE Skieur;
CREATE TABLE Skieur (
IdSki INTEGER NOT NULL,
Nom VARCHAR2(15) NOT NULL,
Prenom VARCHAR2(15) NOT NULL,
Categ VARCHAR2(10),
CHECK (Categ IN ('0-6', '7-8', '9-10', '11-12', '13-14', '15-et-plus')),
PRIMARY KEY( IdSki )
);
CREATE VIEW Vue_Skieur_11_12 AS
SELECT IdSki, Nom, Prenom FROM Skieur WHERE Categ = '11-12';
CREATE TABLE Concrete_Skieur_11_12 (
IdSki INTEGER NOT NULL,
Nom VARCHAR2(15) NOT NULL,
Prenom VARCHAR2(15) NOT NULL,
PRIMARY KEY ( IdSki ),
FOREIGN KEY (IdSki) REFERENCES Skieur (IdSki)
);
CREATE OR REPLACE TRIGGER Trig_Concrete_Skieur_11_12
AFTER INSERT OR UPDATE OR DELETE ON Skieur
FOR EACH ROW
BEGIN
IF INSERTING THEN
IF :new.Categ = '11-12' THEN
INSERT INTO Concrete_Skieur_11_12 VALUES (:new.IdSki, :new.Nom, :new.Prenom);
END IF;
END IF;
IF UPDATING THEN
IF :old.Categ = '11-12' THEN
IF :new.Categ = '11-12' THEN
UPDATE Concrete_Skieur_11_12
-- Il n'est pas necessaire de modifier IdSki car la contrainte referencielle empeche -- deja toute modification de cet attribut
SET Nom = :new.Nom, Prenom = :new.Prenom
WHERE IdSki = :new.IdSki;
ELSE
DELETE FROM Concrete_Skieur_11_12 WHERE IdSki = :new.IdSki;
END IF;
ELSE
IF :new.Categ = '11-12' THEN
INSERT INTO Concrete_Skieur_11_12 VALUES (:new.IdSki, :new.Nom, :new.Prenom);
END IF;
END IF;
END IF;
IF DELETING THEN
IF :old.Categ = '11-12' THEN
DELETE FROM Concrete_Skieur_11_12 WHERE :old.IdSki = IdSki;
END IF;
END IF;
END;
.
RUN Trig_Concrete_Skieur_11_12;
CREATE SNAPSHOT Snapshot_Skieur_11_12
REFRESH COMPLETE
AS (SELECT IdSki, Nom, Prenom
FROM Skieur
WHERE Categ = '11-12');
lundi 7 juin 2010
J2EE : weblogic deployement auto
Voici un extrait des taches ANT à utiliser pour deployer automatiquement une webApp ou un EAR sous weblogic 8.1.5
Ceci est utiliser par le plugin weblogic sous eclipse et se trouve :
${WORKSPACE_HOME}\.metadata\.plugins\org.eclipse.jst.server.generic.core\buildfiles\wldeploy.xml
Ceci est utiliser par le plugin weblogic sous eclipse et se trouve :
${WORKSPACE_HOME}\.metadata\.plugins\org.eclipse.jst.server.generic.core\buildfiles\wldeploy.xml
<project name="weblogicpublish" default="deploy" basedir=".">
<target name="init">
<taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy">
<classpath>
<fileset dir="${serverRootDirectory}">
<include name="server/lib/weblogic.jar" />
</fileset>
</classpath>
</taskdef>
</target>
<target name="deploy" depends="init">
<echo>Deploying module ${module.name}</echo>
<wldeploy
action="deploy"
verbose="true"
debug="true"
nowait="false"
name="${module.name}"
source="${module.dir}"
user="${username}"
password="${password}"
failonerror="true"
adminurl="t3://localhost:${port}"/>
</target>
<target name="undeploy" depends="init">
<echo>Undeploying module ${module.name}</echo>
<wldeploy
action="undeploy"
verbose="true"
debug="true"
nowait="false"
name="${module.name}"
user="${username}"
password="${password}"
failonerror="true"
adminurl="t3://localhost:${port}" />
</target>
</project>
vendredi 4 juin 2010
shell : commande find
voici un petit rappel pour faire des find un peu évolué ...
ici, ce find recherche les fichiers core ou les fichiers dump ...
ici, ce find recherche les fichiers core ou les fichiers dump ...
find . \( -name 'core\.*' -o -name '*dump*' \) -exec ls -al {} \;
jeudi 3 juin 2010
sql : oracle limiter le nombre de requêtes
Attention comment limiter le nombre d'enregistrements retournés par oracle ... pour cela il faut utiliser rownum ...
attention, si la requete est trié avec un order by ... le rownum ne fonctionne plus ... eh oui !!! le rownum est attribué avant le tri final !!!
La solution est simple, il faut faire une sous-requete et le rownum ensuite ...
ici on recupère les 1000 premiers ...
Il est aussi possible de mettre un parametre dans une clause where afin de filtrer les resultats (ex: de 1000 à 2000 , puis de 3000 à 4000) comme pour une pagination ...
ici, les 1000 premiers enregistrements pour les commande de n° commande > 2564 ...
tout est bien explique ici !!!
Attention ROWNUM avec supérieur ne fonctionne pas ...
attention, si la requete est trié avec un order by ... le rownum ne fonctionne plus ... eh oui !!! le rownum est attribué avant le tri final !!!
La solution est simple, il faut faire une sous-requete et le rownum ensuite ...
ici on recupère les 1000 premiers ...
SQL> SELECT * FROM (
SELECT *
FROM Commande c
ORDER BY NO_CMD
)
WHERE ROWNUM <= 1000 ;
Il est aussi possible de mettre un parametre dans une clause where afin de filtrer les resultats (ex: de 1000 à 2000 , puis de 3000 à 4000) comme pour une pagination ...
ici, les 1000 premiers enregistrements pour les commande de n° commande > 2564 ...
tout est bien explique ici !!!
SQL> SELECT * FROM (
SELECT *
FROM Commande c WHERE c.NO_CMD > 2564
ORDER BY NO_CMD
) a
WHERE ROWNUM <= 1000 ;
Attention ROWNUM avec supérieur ne fonctionne pas ...
mercredi 2 juin 2010
spring : config simple
Voici, un exemple simple de config spring dont le but est d'instancier des singleton ... Attention, les classes doivent etre instanciable (convention javabean)
Ne pas oublier de mettre dans le web.xml, le listener suivant (et les hjar dans la webapp)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="adminServices"
class="com.services.AdminServices"
singleton="true">
</bean>
<bean id="referentielServices"
class="com.services.ReferentielServices"
singleton="true">
</bean>
<bean id="commandeBocServices"
class="com.services.CommandeBocServices"
singleton="true">
</bean>
<bean id="commandeBocDetailServices"
class="com.services.CommandeBocDetailServices"
singleton="true">
</bean>
</beans>
Ne pas oublier de mettre dans le web.xml, le listener suivant (et les hjar dans la webapp)
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
mardi 1 juin 2010
apache : rappel
Détecter si un process apache est démarré ?
Démarrer/Stopper un serveur apache :
ps -edf | grep httpd
Démarrer/Stopper un serveur apache :
apachectl start
apachectl stop
Inscription à :
Articles (Atom)