uetac corner

Aller au contenu | Aller au menu | Aller à la recherche

mercredi, octobre 3 2007

Configuration d'un pool de connection Tomcat v5.x sous Eclipse v3.3

La fondation Apache a changé le parémtrage de tomcat depuis la v4.x : le "context" devrait être stocké dans un fichier par application. Auparavant il était écrit dans le server.xml de Tomcat.

Ainsi, le fichier META-INF/context.xml contient maintenant le noeud <Context>. Voici un exemple de création d'un pool de connection Tomcat. Le SGBD est MySQL, le fichier META-INF/context.xml contient :

<Context path="/appli" reloadable="true" docBase="\appli">
    <Resource name="jdbc/mysqlDataBase" auth="Container"
        type="javax.sql.DataSource" maxActive="100" maxIdle="30"
        maxWait="10000" username="root" password="admin"
        driverClassName="org.gjt.mm.mysql.Driver"
        url="jdbc:mysql://localhost:3306/database" />
</Context>


Le contexte de l'application web est/appli (http://localhost:8080/appli); la référence JNDI se nomme jdbc/mysqlDataBaseet pointe vers une base MySQL (attribut url). A cette base, la connection s'établit en utilisant l'utilisateur marqué par l'attribut username, le mot de passe étant fourni par password.

Le context.xml est maintenant terminé, il faut écrire dans le WEB-INF/web.xml de l'application la référence à la ressource JNDI :

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"

....
    <resource-ref>
        <description>
            reference a la ressource BDD pour le pool
        </description>
        <res-ref-name>jdbc/mysqlDataBase</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
....
</web-app>


On retrouve le nom de la ressource JNDI jdbc/mysqlDataBase. Maintenant notre application web peut accéder au pool de connection Tomcat par le bout de code suivant :

        try {
            // récupération de la source de donnée
            Context initCtx = new InitialContext();
        ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mysqlDataBase");
        } catch (Exception e) {
            e.printStackTrace();
        }


lundi, octobre 1 2007

Reporting pour le web (2/2) : des limitations

Finissons le tour d'horizon rapide de JasperReport et Birt en décrivant les limitations.

On peut trouver son bonheur dans ces deux outils mais, quelques contraintes, parfois fortes, viennent douter de l'utilisation systématique de ces api.

Birt

  • très grosse api : lourde à intégrer, temps d'appropriation important;
  • utilisation exclusive (ou presque) d'Eclipse
  • tableaux simplistes : très difficile de faire des tableaux à la "Excel";
  • pas d'intégration de cartes

JasperReport

  • peu de documentation;
  • tableaux simplistes : impossible de faire des tableaux à la "Excel";
  • pas d'intégration de cartes;
  • extension difficile
  • pas de svg
Birt peut être étendu côté graphique : le chartEngine est conçu pour être évolutif. Il utilise batik, l'api de la fondation Apache pour le svg, qui offre de l'interaction aux graphiques. Mais ajouter un nouveau type de graphique relève du tour de force tant l'api semble épaisse.

Ces outils de reporting sont performants, ils demandent de l'investissement, parfois beaucoup (pour Birt) à la fois pour comprendre le fonctionnement des api mais surtout pour étendre les capacités si celles ci sont ne pas suffisantes.

Je cherchais un outil de reporting pour construire des tableaux de bord contenant des tableaux, graphiques et cartes. Par tableaux, j'entends des tableaux à la "Excel": fusion de colonnes, le constructeur du tableau définit lui même dans chaque cellule ce qu'il y a (texte ou formule). Par cartes, j'entends afficher une représentation cartographique d'un territoire suivant des valeurs données.
JasperReport ne permet pas de construire les tableaux et les cartes, j'ai eu du mal à trouver le bon paramétrage pour définir plusieurs sources de données. Birt offre plus de possibilités : moins orienté "listing", plus proche d'une mise en page de tableau de bord mais semble lourd à étendre. Les tableaux peuvent sans doute être construits mais une requête par cellule devrait être exécutée.

positionner une div

Avec jQuery il est simple de trouver les coordonnées d'une div (et autre élément dans le DOM). Le plugin dimensions le permet aisément :

var position = $("#maDiv").position();
var largeur = $("#maDiv").width();
var hauteur = $("maDiv").height();

alert( position.left );
alert( position.top );
alert( largeur );
alert( hauteur );


On peut noter que en fonction de IE ou de FireFox les valeurs retournées ne sont pas les mêmes. Pour IE (v6) le coin en haut gauche peut retourner (-2,-2) tandis que FireFox renvoie bien (0,0).

L'opération inverse maintenant : comment positionner #maDiv a de bonnes coordonnées ? Le plugin dimensions.js ne fournit pas de fonctions pour left et top, mais les fonctions height() et width() fixent respectivement la hauteur et la largeur de l'élément DOM. Il suffit de mettre en paramètres les valeurs souhaitées.

Pour les coordonnées top et left, l'accès au style de l'élément est alors indispensable :

maDiv.style.left = nouvLeft;
maDiv.style.top = nouvTop;


ou en utilisant JQuery :

$("#maDiv").css("top",nouvTop);
$("#maDiv").css("left",nouvLeft);

En faisant le test suivant on s'aperçoit que le comportement d'IE et de FireFox sont encore une fois bien différents. Positionnons nouvLeft à 0 et nouvTop à 0. IE6 affiche la div aux coordonnées absolues (0,0) en haut à gauche de l'écran, mais FireFox affice la div en coordonnées relatives dans le container parent (margin+padding inclus) !

N'ayant pas de plugin sous la main pour faire le job correctement, j'ai donc utilisé une rustine en javascript :

position = $("#maDiv").position();

if (position.left != myObject.left )
  { $("#maDiv").css("left",myObject.left-(position.left-myObject.left));  
  }

if (position.top != myObject.top )
  {     $("#maDiv").css("top",myObject.top-(position.top-myObject.top));
  }


myObject représente les coordonnées (top,left) comme elles sont demandées, l'objectif à atteindre.
L'idée dans ce bout de code est de corriger l'écart de positionnement entre les coordonnées absolues lues depuis dimensions.js et les coordonnées possiblement relatives en écriture. S'il y a écart entre l'attendu et l'observé alors on décale l'observé de ce qu'il faut.

vendredi, septembre 21 2007

Reporting pour le web (1/2)

Je cherchais un outil de reporting gratuit pour Java j2ee. Mon ami google en a fournit deux principaux :

Ces deux projets permettent globalement :

  • créer des modèles d'états;
  • batir des tableaux, graphiques; intrégrer des images;
  • gérer des styles;
  • lier différentes sources de données (base de données via jdbc, fichier xml, javabeans...);
  • encapsuler les api de visualisation des états dans des applications standalone ou web.
JasperReports est un projet sourceForge maintenu par une société  JasperSoft tandis que BIRT est un projet Eclipse.

Construction des modèles

Distinguons les deux ide Netbeans et Eclipse. Pour Eclipse,  JasperAssistant et Birt Report Designer sont deux plugins s'intégrant parfaitement. Notons au passage que BIRT propose une version RCP pour Eclipse ce qui permet d'obtenir ainsi un outil entièrement dédié à la création d'états.

IReport permet de construire des modèles Jasper. C'est une application Java standalone et donc indépendante des IDE. A noter qu'un plugin pour Netbeans 6 est en route et devrait être disponible lors de la sortie officielle.

new HelloWorld();

Bonjour !

Voilà, je me jette à l'eau : un blog, l'originalité est de mise n'est ce pas?

Par cet outil, je cherche un lieu où écrire quelques essais et expériences diverses et variées dans le développement informatique.

Ce blog n'a pas plus d'ambition que de centraliser des expériences et peut être apporter à d'autres des informations supplémentaires dans leurs tâches...

 bienvenue !
 Frank