mercredi 28 octobre 2009

weblogic : installation d'un domain ... via config.sh ...

Voici le configuration wizard en ligne de commande :

Tapez: ./config.sh –mode=console
Ensuite il suffit de répondre aux questions posées par le script ... A noter qu'il est possible de l'utiliser sous Linux/Unix et Windows ...


Il existe le mode silencieux :

./config.sh -mode=silent -silent_script=MonScript.txt

Un exemple de script se trouve dans l'installe de bea ${BEA_HOME}\weblogic81\common\templates\silent_scripts\domain_wls.txt ...

Une syntaxe particulière et relativement simple existe pour ce type de script ...


//This is an example of a Configuration Wizard silent script. This example uses the
// Basic WebLogic Server Domain template to show how to open, modify, and write out
// a domain in silent mode. Please note that many values used in this script are subject
// to change based on your WebLogic installation and the template you are using.
//
// Usage:
// = config.cmd -mode=silent -silent_script=
// = ./config.sh -mode=silent -silent_script=
//
// Where:
// should be the full path to the silent script.
/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////
//Read in a domain template.
/////////////////////////////////////////////////////////////////////////////////////////
read template from
"D:\bea\weblogic81/common/templates/domains/wls.jar";

/////////////////////////////////////////////////////////////////////////////////////////
//Find and configure the Admin Server.
/////////////////////////////////////////////////////////////////////////////////////////
find Server "myserver" as s1;
set s1.ListenAddress "";
set s1.ListenPort "7001";
set s1.SSL.Enabled "true";
set s1.SSL.ListenPort "7002";

/////////////////////////////////////////////////////////////////////////////////////////
//Create a JMSQueue.
/////////////////////////////////////////////////////////////////////////////////////////
//A JMSServer has to be created first.
create JMSServer "myJMSServer" as jmsserver;
create JMSQueue "myJMSQueue" as myq;
//required attribute
set myq.JNDIName "jms/myjmsqueue";
//required attribute
set myq.JMSServer "myJMSServer";
//optional attribute
//set myq.StoreEnabled "false";
//target "myJMSServer" to server "myserver"
assign JMSServer "myJMSServer" to target "myserver";

/////////////////////////////////////////////////////////////////////////////////////////
//Create a JDBCConnectionPool.
/////////////////////////////////////////////////////////////////////////////////////////
create JDBCConnectionPool "demoPool" as mypool;
//required attribute
set mypool.DriverName "com.pointbase.jdbc.jdbcUniversalDriver";
//required attribute
set mypool.URL "jdbc:pointbase:server://localhost:9092/demo";
//required attribute
set mypool.Password "PBPUBLIC";
//optional attribute (but it's recommended you set the db user...)
set mypool.Properties "user=PBPUBLIC";
//target all JDBC connection pools to server "myserver"
assign JDBCConnectionPool "*" to target "myserver";

/////////////////////////////////////////////////////////////////////////////////////////
//target existing applications.
/////////////////////////////////////////////////////////////////////////////////////////
//target applications only when they exist in current domain template
//assign application "*" to target "myserver";

/////////////////////////////////////////////////////////////////////////////////////////
//Create the admin user and password.
/////////////////////////////////////////////////////////////////////////////////////////
find User "weblogic" as u1;
set u1.password "weblogic";

/////////////////////////////////////////////////////////////////////////////////////////
//Write out the domain.
/////////////////////////////////////////////////////////////////////////////////////////
set OverwriteDomain "true";
write domain to "D:\bea/user_projects/domains/wls";

/////////////////////////////////////////////////////////////////////////////////////////
//Close domain template to indicate completion of work.
/////////////////////////////////////////////////////////////////////////////////////////
close template;



Un article très complet se trouve ici

unix : lancer des scripts automatique via crontab

Voici, un petit extrait de wikipedia .... Evidemment, il faut les droits unix adequates ...

Rappel des commandes utiles:
crontab -l (liste des commandes crotab)

crontab -e (edition de la crontab via vi)

crontab -r (supprime la crontab via vi)

Imaginons que l'on veuille faire un journal (dans le fichier /tmp/log_df.txt par exemple) automatisé de l'espace disque libre (commande df) à des intervalles de temps précis :

* Tous les jours à 23h30 :

30 23 * * * df >>/tmp/log_df.txt

* Toutes les heures, passées de 5 minutes :

5 * * * * df >>/tmp/log_df.txt

* Tous les premiers du mois à 23h30 :

30 23 1 * * df >>/tmp/log_df.txt

mardi 27 octobre 2009

java : MAJ CLOB oracle

voici un petit exemple crad ... de code pour update un CLOB sous oracle


/**
*
*/
package com.valo.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.pool.OracleDataSource;
import oracle.sql.CLOB;

public class ClobUpdater {

private static final String DB_ID = "jdbc:oracle:thin:@unServeur:1234:MaBase";
private static final String DB_USER = "TOTO";
private static final String DB_USER_PWD = "TITI";
private static String file1 ="D:/Tmp/ToutManuel.txt" ;
private static int ID1 = 42004618;
private static String file2 ="D:/Tmp/ToutManuel2.txt" ;
private static int ID2 = 42004619;


/**
* @param args
*/
public static void main(String[] args) {
ClobUpdater updater = new ClobUpdater();
updater.updateFromFile(ID1, file1);
updater.updateFromFile(ID2, file2);
}

public void updateFromFile(int ID, String filenameURL){

File fichierALire = new File(filenameURL);
BufferedReader reader = null;
OracleDataSource ods;
OracleConnection c = null;

try {
ods = new OracleDataSource();
ods.setURL(DB_ID);
ods.setUser(DB_USER);
ods.setPassword(DB_USER_PWD);
c = (OracleConnection) ods.getConnection();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

try {
reader = new BufferedReader(new FileReader(fichierALire));
char [] buffer = new char[1024 * 8];
int lus = 0;
StringBuffer strBuffer = new StringBuffer();
String strLus = null;

while((lus = reader.read(buffer)) != -1)
{
strLus = new String(buffer,0,lus);
System.out.println("lus = " + strLus);
strBuffer.append(strLus);
}

// lecture termine
CLOB tmpCLOB = CLOB.createTemporary(c,true,CLOB.DURATION_SESSION);
Writer w1 = tmpCLOB.getCharacterOutputStream();
String chaineAEcrire = strBuffer.toString();
w1.write(chaineAEcrire);
w1.close();

String sqlUpdate = "UPDATE uneTable SET uneColonne = ? WHERE ID = ?";
PreparedStatement st = c.prepareStatement(sqlUpdate);
st.setClob(1,tmpCLOB);
st.setInt(2,ID);
int nbMaj = st.executeUpdate();
System.out.println("nb MAJ = " + nbMaj);
c.commit();
st.close();
c.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if(c!= null)
{
try {
c.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

}

lundi 26 octobre 2009

unix : recherche de fichiers de grande taille

Voici une commande qui peut vous être utile :

Vérifier l’espace disque sur le serveur en vous connectant avec le user associé
Tout d’abord , lancer :
df –k

puis si les point de montage /devel ou /orcle sont proche des 100% … lancer ce type de commande pour les logs :

find /root/bo/ -name "*.log" -size +1000k -ctime +3 -exec rm {} \;

Attention, cette commande nettoie tout les fichiers *.log de plus de 3 jours et de taille > 1000k … dans le répertoire /root/bo/

java : export excel et flux a telecharger

Voici un petit code permettant de realiser un export Excel et de le recevoir par une servlet ... Cet exemple s'appuie sur la librairie POI d'apache :


public void exportExcelCsa(ArrayList pTitreColonne, ArrayList pIndiceColonne, ArrayList pListe,
HttpServletResponse pReponseHttp, final boolean pTest, final String pNomFichier) throws FretOrchestreException {

// creation d'un classeur
final HSSFWorkbook vClasseurExcel = new HSSFWorkbook();
// creation des styles
// police des titres
final HSSFFont vFontHeader = vClasseurExcel.createFont();
vFontHeader.setFontHeightInPoints((short) 10);
vFontHeader.setFontName("Times New Roman");
vFontHeader.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
vFontHeader.setColor(HSSFColor.WHITE.index);
// style des cellules de titres
final HSSFCellStyle vStyleTitreColonne = vClasseurExcel.createCellStyle();
vStyleTitreColonne.setFillForegroundColor(HSSFColor.SEA_GREEN.index);
vStyleTitreColonne.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
vStyleTitreColonne.setFont(vFontHeader);
vStyleTitreColonne.setBorderBottom(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setBottomBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderLeft(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setLeftBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderRight(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setRightBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderTop(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setTopBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setAlignment(HSSFCellStyle.ALIGN_CENTER);
vStyleTitreColonne.setWrapText(true);
// police des données
final HSSFFont vFont = vClasseurExcel.createFont();
vFont.setFontHeightInPoints((short) 10);
vFont.setFontName("Times New Roman");
// style des cellules de données
final HSSFCellStyle vStyleDonnees = vClasseurExcel.createCellStyle();
vStyleDonnees.setBorderBottom(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setBottomBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderLeft(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setLeftBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderRight(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setRightBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderTop(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setTopBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setFont(vFont);
vStyleDonnees.setAlignment(HSSFCellStyle.ALIGN_LEFT);

/* creation de l'onglet Recherche */
final String vTitre = "Recherche";
final HSSFSheet vOnglet = vClasseurExcel.createSheet(vTitre);
//genererEnTeteEtPiedDePage(vTitre, vOnglet, true);

/* Titre des colonnes. */
creerLigneTitre(vOnglet, pTitreColonne, vStyleTitreColonne);

/* Contenu de la liste pour la version retraitée. */
creerContenuFretListe(vOnglet, pListe, pIndiceColonne, vStyleDonnees);

/* Génération en tete et pied de page. */
final HSSFHeader vEnTete = vOnglet.getHeader();
vEnTete.setLeft("Commandes en saisie");

final HSSFFooter vPiedDePage = vOnglet.getFooter();
final SimpleDateFormat vSimpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
vPiedDePage.setLeft(vSimpleDateFormat.format(new Date()));
vPiedDePage.setRight(HSSFFooter.page() + " / " + HSSFFooter.numPages());

OutputStream vOutput = null;
try {
// flux de sortie
if (pTest) {
final FileOutputStream vFileOut = new FileOutputStream("c:\\" + pNomFichier + ".xls");
vClasseurExcel.write(vFileOut);
vFileOut.close();
} else {
vOutput = pReponseHttp.getOutputStream();
pReponseHttp.setContentType("application/vnd.ms-excel");
pReponseHttp.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
pReponseHttp.setHeader("Pragma", "public");
pReponseHttp.setDateHeader("Expires", 0);
pReponseHttp.setHeader("Content-disposition", "attachment;filename=\"" + pNomFichier + ".xls\"");
pReponseHttp.setStatus(HttpServletResponse.SC_OK);

vClasseurExcel.write(vOutput);
}
} catch (Exception vExc) {
sLog.error("Echec d'enregistrement du fichier généré (échec d'écriture, répértoire inconnu,...)" + vExc.getMessage());
} finally {
//fermeture du flux
try {
if (vOutput != null) {
vOutput.close();
}
} catch (IOException vIoExce) {
sLog.error("Echec d'enregistrement du fichier généré (échec d'écriture, répertoire inconnu,...)" + vIoExce.getMessage());
}
}
}

vendredi 23 octobre 2009

putty : exporter et importer rapidement la configuration de putty

Pour l'export de configuration, il suffit d'exporter la clé de registre suivante, via la commande ms-dos :

regedit /e putty.reg HKEY_CURRENT_USER/Software/SimonTatham/PuTTY/Sessions


Pour l'import de configuration, il suffit d'importer la clé de registre suivante, via la commande ms-dos :

regedit /s putty.reg

Il est aussi possible de le faire via l'ihm de regedit

jeudi 8 octobre 2009

oracle : trouver si des tables, vues ou objets divers existent ...


Une question qui se pose souvent est de savoir si un objet, une table, une vue, un synonyme est présent ou non dans une base ...

Voici une petite requête utile :

select * from dba_objects where object_name like 'VBORFMRPA'



et voila ... on peut voir si le synonyme existe par exemple et qui en est le propriétaire ... Voilou ..

lundi 5 octobre 2009

java : générer des daigrammes de séquences avec jtracert

Il s'agit d'un outil qui instrumente la JVM (1.5 ou > ) lors de son fonctionnement. Pour cela, il suffit de télécharger jtracert et installer le GUI. Une fois cette opération terminée, vous n'avez qu'a rajouter les paramètres de lancement suivant à la ligne de commande :

-javaagent:D:\MesDocs\mySoft\jtrace\jTracert.jar=7007

Vous lancer alors le GUI et cliquer sur le noeud package ...



Ceci va vous permettre de visualiser le digramme. Un filtrage sur les classe est possible, ainsi que la sélection du répertoire d'export des diagrammes ...



Ceci fonctionne aussi pour les applications J2EE. il suffit d'ajouter cette ligne à catalinat.bat pour tomcat :

set JAVA_OPTS=-DanalyzerOutput=sdEditRtClient -DsdEditHost=127.0.0.1 -DsdEditPort=60001 -javaagent:"chemin librairie"\jTracert.jar=7007 %JAVA_OPTS%

A noter, que je n'ai pas eu le temps de tester ce programme avec tomcat ... Cet outil semble bien fonctionner et permet une analyse rapide du code ...

jeudi 1 octobre 2009

selenium : les utiliser en junit

Voici un petit exemple, de script enregistrer sous Selenium IDE, puis exporter en junit ...

Après c'est simple, il suffit d'exporter l'ensemble en junit, de créer un projet sous eclipse, en ajoutant une jre > 1.5 et télécharger le serveur selenium Remote Control.

Ce dernier nous fournira le serveur , et un jar client pour lancer les commandes selenium à notre browser (selenium-java-client-driver.jar).

Avant de lancer un test unitaire, il faut avoir lancer le serveur par une commande du type :
"C:\Program Files\Java\jre1.6.0_05\bin\java.exe" -jar selenium-server.jar

Et ensuite voici, la classe obtenue après export ... d'un test enregistrer sous Firefox avec Selenium IDE. A noter que ce dernier sera executé sous IE ...





import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public class TestBoc extends SeleneseTestCase {
public void setUp() throws Exception {
// setUp("http://change-this-to-the-site-you-are-testing/", "*chrome");
setUp("http://change-this-to-the-site-you-are-testing/", "*iexplore");
}

public void testBoc() throws Exception {
selenium.open("http://www.yahoo.fr");
selenium.type("login", "toto");
selenium.type("password", "titi");
selenium.select("module", "label=Orchestre");
selenium.click("link=Valider");
selenium.waitForPageToLoad("30000");
selenium.click("brechercher");
selenium.waitForPageToLoad("30000");
for (int second = 0;; second++) {
if (second >= 60) fail("timeout");
try { if ("24903".equals(selenium.getText("//tr[@id='l1']/td[2]"))) break; } catch (Exception e) {}
Thread.sleep(1000);
}

verifyTrue(selenium.isTextPresent("24903"));
selenium.click("link=D\u233connexion");
}
}

java : regexp

Les regexp sont très utile pour les traitements complexes sur les chaines (par ex.: recherche, remplacement).

Voici un petit exemple de regexp qui recherche des mots du type :
\b((Req)*(Int((Min\d+)*)(Max\d+)*))\b

Ce dernier va trouver la chaine en gras .. et pas une autre ... On notera que les \b sont les frontières des mots ... et les * (0 ou plusieurs) sont des indicateurs optionnels ... les + sont 1 ou plus ...

helolo ca marche super ReqIntMin200Max300 eReqIntMin200Max300

voici des regexp utiles (trouve sur cette très bonne page ):

un nom d'utilisateur
/[a-zA-Z0-9_]{3,16}/

trouver un tag XML/XHTML
{<tag[^>]*>(.*?)</tag>}

trouver un tag XML/XHTML avec une valeur particulière
{<tag[^>]*attribute\\s*=\\s*(["'])value\\\\1[^>]*>(.*?)</tag>}