gif animé ordinateur

mercredi 29 décembre 2010

La gestion des transactions dans les applications entreprises

La gestion des transactions est un élément essentiel dans les applications d'entreprises car elle permet de garantir l'intégrité et la cohérence des données.
Le développeur que vous êtes, doit comprendre et appréhender les problèmes liés à la gestion de transactions lors du développement de ses applications. Vous avez à votre disposition une multitude d'API qui vous permettent de mener à bien cette tache. Personnellement, j'ai opté le plus souvent pour Spring pour la gestion de transactions.
Dans Spring, on peut gérer les transactions soit par programmation soit par déclaration. Les fonctions de prise en charge des transactions dans Spring offrent une alternative aux transactions des EJB en apportant des possibilité transactionnelles aux POJO (Plain Old Java Object).
Dans la gestion des transactions par programmation, le code de gestion des transactions est incorporé dans les méthodes métier de manière à contrôler la validation (commit) et l'annulation (rollback) des transactions. En général, une transaction est validé lorsqu'une méthode se termine de manière normale, elle est annulée lorsqu'une méthode lance certain types d'exceptions. Avec cette gestion des transactions, nous pouvons définir nos propres règles de validation et d'annulation.
Toutefois, cette approche nous oblige à écrire du code de gestion supplémentaire pour chaque opération transactionnelle. Un code transactionnel standard est ainsi reproduit pour chacune des opérations. Par ailleurs, il nous est difficile d'activer et de désactiver la gestion des transaction pour différentes applications. Avec nos connaissance en POA (Programmation Orientée Aspect), nous comprenons sans peine que la gestion des transactions est une forme des préoccupations transversale.
Vous comprenez donc que sans la gestion des transactions, les données et les ressources pourraient être endommagées et laissées dans un état incohérent. Cette gestion est extrêmement importante dans les environnements concurrents et répartis lorsque le traitement doit se poursuivre après des erreurs inattendues.
En première définition, une transaction est une suite d'actions qui forment une seule unité de travail. Ces actions doivent toutes réussir ou n'avoir aucun effet. Si toutes les actions réussissent, la transaction est validée de manière permanente. En revanche, si l'une des actions se passe mal, la transaction est annulée de manière à revenir dans l'état initial, comme si rien ne s'était passé.
Le concept de transactions peut être décrit par les propriétés ACID :
- Atomicité : une transaction est une opération atomique constituée d'une suite d'opérations. L'atomicité de celle-ci garantit que toutes les actions sont entièrement exécutées ou qu'elles n'ont aucun effet.
- Cohérence : dès lors que toutes les actions d'une transaction se sont exécutées, la transaction est validée. Les données et les ressources sont alors dans un état cohérent qui respecte les règles métier.
- Isolation : puisque plusieurs transactions peuvent manipuler le même jeu de données au même moment, chaque transaction doit être isolée des autres afin d'éviter la corruption des données.
- Durabilité : dès lors qu'une transaction est terminée, les résultats doivent survivre à toute panne du système. En général, les résultat d'une transaction sont écrit dans une zone de stockage persistant.
Pour mieux illustrer ça, quoi de mieux qu'un exemple :
Supposons, qu'on dispose d'une application pour gérer une librairie. Dans une libraire, il faut répertorier tous les livres (nous allons donc créer une table SQL BOOK), mettre à jour au quotidien le stock pour chaque livre (donc d'une table SQL  BOOK_STOCK) puis, pour chaque client, enregistrer son nom (ou son USERNAME) et son solde, et veiller à ce que ce solde ne soit jamais négatif ni nul, (table ACCOUNT)
Voici le script de création de chaque table :
CREATE TABLE BOOK(
ISBN VARCHAR(50) NOT NULL,
BOOK_NAME VARCHAR(100) NOT NULL,
PRICE INT,
PRIMARY KEY (ISBN)
);

CREATE TABLE BOOK_STOCK(
ISBN VARCHAR(50) NOT NULL,
STOCK INT NOT NULL,
PRIMARY KEY(ISBN),
CHECK (STOCK>=0)
);
La quantité en stock est  affectée d'une contrainte CHECK de manière à rester positive. Cette contrainte, bien qu'elle soit définie dans le SQL-99, elle n'est pas reconnu par tous les moteurs de base de donnée, je l'ai utilisée pour sa simplicité et pour les besoins de l'exemple

CREATE TABLE ACCOUNT(
USERNAME VARCHAR(50) NO NULL,
BALANCE INT NOT NULL,
PRIMARY KEY(USERNAME),
CHECK (BALANCE>=0)
);
De la même manière, la contrainte CHECK garantie que le solde (balance) reste positif.
Définissons, en java, une interface qui définit les opérations de notre librairie. Pour faire simple, l'interface ne définie qu'une opération PURCHASE() pour acheter.
public interface BookShop{
public void purchase(String isbn, String username);
}
Puis nous implémentons cette interface avec JDBC, nous crions la classe JdbcBookShop suivant, pour mieux comprendre les transactions, procédant sans l'aide de Spring.

public class JdbcBookShop implements BookShop{
private DataSource dataSource;
public void setDataSource(DataSource dataSource){
this.dataSource = dataSource;
}

public void purchase(String isbn, string username){
connection conn=null;
try{
    conn = dataSource.getConnection();
   preparedStatement stm1 = conn.prepareStatment("Select PRICE    FROM BOOK WHER ISBN=?");
 stm1.setString(1,isbn);
 ResultSet rs = stm1.executeQuery();
 rs.next();
  int price = rs.getInt("PRICE");
stm1.close();
PreparedStatment stm2 = conn.prepareStatment("UPDATE BOOK_STOCK SET STOCK=STOCK-1 WHERE ISBN=?");
 stm2.setString(1,isbn);
 stm2.executeUpdate();
 stm2.close();
PreparedStatement stm3 = conn.prepareStament("UPDATE ACCOUNT SET BLANCE=BALANCE -? WHERE USERNAME=?");
 stm3.setINT(1,price);
 stm3.set(2,username);
stm3.executeUpdate();
stm3.close();
  }catch(SQLException e){
    throw new runtimeException(e);
  }finally{
         if(conn!=null) try{conn.close()}catch(SQLException e){}
          }
}
}

Pour l'opération purchase(), nous exécutons trois requêtes SQL. La première obtient le prix du livre, tandis que la seconde et la troisième mettent à jour le stock du livre et ajustent le solde du compte en conséquence.
Si le client "utilisateur1" dont le solde =20 DHM, vient acheter le livre "Le premier livre" dont la quantité en stock=10 livres et le prix unitaire est 30 DHM et le ISBN='0001'. A l'exécution du programme au-dessus, nous allons lever une exception SQLException car la contrainte CHECK sur la table ACCOUNT n'est pas respectée. Ce résultat était attendu, puisque nous avons tenté un débit supérieur au solde du compte. Toutefois, si nous examinons le stock de ce livre dans la table BOOK_STOCK, nous constant qu'il a été diminué par cette opération ratée. En effet, nous avons exécuté la deuxième requête SQL pour diminuer le stock avant de recevoir l'exception générer par la troisième.
L'absence de la gestion des transaction a donc placé nos données dans un état incohérent. La solution est donc de placer nos trois requêtes de l'opération purchase() dans une même transaction. Si l'une des requête échoue, l'intégralité de la transaction est annulée pour défaire les changements apportés par les actions exécutées.
Ceci n'est qu'un simple exemple pour illustrer l'intérêt de la gestion des transactions.
Bonne lecture.

dimanche 19 décembre 2010

MySql, la base de données Open Sources de Sun MicroSystems


Aucune application entreprise, n'aura d'intérêt si elle ne permet pas stocker, de supprimer ou de mettre à jour des données qu'elle est sensée manipuler.
Par exemple, une application bancaire, doit permettre d'ajouter des informations sur un nouveau client, mettre à jour au quotidien son solde, et enfin, lui garantir la confidentialité et l'authenticité de ses transactions.
D'où le rôle des base de données. On trouve sur le marché, une multitude de vendeur de base de données, dont certaines sont gratuite (open sources). Le leader des fournisseurs de base de données open-sources, est Mysql (avec réserves, puisque depuis 2009, Sun Microsystems est passée sous la bannière d'ORACLE, et on ne sait pas s'il compte la maintenir ainsi gratuite).
A la date de rédaction de poste, MySql est gratuite et ouverte au téléchargement public.
Voici donc quelques astuces et requêtes les plus utilisées en langage SQL pour une base MySQL.
Pour infos, SQL veut dire Structured Query Language

--Trouver les doublons dans une table
select field_name,count(*) from table_name group by field_name having count(*) > 1;
--Créer un fichier csv avec les résultats d'une requête
 select * into outfile '/tmp/export.csv' FIELDS TERMINATED BY ";" OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' from table_name;
/*Il est préférable de spécifier le chemin du fichier en dur (ex: '/tmp/export.csv'). Il faut cependant s'assurer d'avoir les droits d'écriture à cette destination.
Ajouter une colonne dans une table*/
ALTER TABLE table_name ADD column_name VARCHAR(10) NOT NULL;
--La colonne sera la dernière de la ligne. Si on souhaite définir à quel endroit de la ligne la colonne est ajouté, on utilise FIRST ou AFTER col_name.
ALTER TABLE table_name ADD column_name FIRST VARCHAR(10) NOT NULL;
ALTER TABLE table_name ADD column_name AFTER column_name_2 VARCHAR(10) NOT NULL;
--Créer une table avec les résultats d'une requête
create table table_name as select * from table_name_2;
--Insérer les résultats d'une requête dans une table
 INSERT INTO table_name SELECT * FROM table_name_2;
--Supprimer des enregistrements avec une jointure
 DELETE FROM table1, table2 USING table1, table2 where pk_tbl1 = fk_tbl1 and pk_tbl2 = 'identifiant';
--Commandes utiles (interface mysql)
--Générer le script de création d'une table
SHOW CREATE TABLE tbl_name;
--Créer une base de données
create database db_name;
--Supprimer une base de données
drop database db_name;
--Exécuter un fichier de script
source /home/toto/sql/script.sql;
--Gestion des droits utilisateurs
--Autoriser l'accès à une base au sous-réseau 192.168.1.% :
grant all on mabase.* to 'monnom'@'192.168.1.%' identified by 'monmotdepasse';
--Remarque : Dans les cas où l'on désire se connecter depuis la machine local, il est important d'executer aussi la requete suivante :
grant all on mabase.* to 'monnom'@'localhost' identified by 'monmotdepasse';
--Restaurer un dump de base de données
--    * Créer la base de données cible (la supprimer si présente).
--    * Utiliser la base cible
use nom_de_la_base;
--    * Restaurer la base à partir d'un fichier de dump
 source chemin_du_fichier/nom_du_fichier;
--Gestion des index
--Afficher tous les index d'un table
 SHOW INDEX FROM table_name;
--Créer un index sur une colonne
 CREATE INDEX index_name ON table_name (column_name);
--Créer un index sur plusieurs colonnes
--Un index peut couvrir jusqu'à 15 colonnes
 CREATE INDEX index_name ON table_name;(column1_name,column2_name);

Commandes utiles (interface shell)
--Liste des commandes et requêtes en cours sur un serveur
mysqladmin processlist -p
--Interrompre une requête en cours
--Après avoir récupéré l'id de la requête avec processlist :
mysqladmin kill req_id -p
--Executer un script sql
 mysql -u login -p < dump_structure_indomco.sql
--Le mot de passe est demandé à l'exécution. Pour un script automatique on peut entrer le mot de passe directement dans le script :
 mysql -u login -ppassword < dump_structure_mycompany.sql
--Convertir une base de données (Sous Linux) de InnoDb à MyISAM
 mysqldump -u root -p database > database.innodb.sql 


 cat database.innodb.sql | sed -e 's/ENGINE=InnoDB/ENGINE=MyISAM/' > database.myisam.sql

 mysql -u root -p database < database.myisam.sql
--Sauvegarde / Restauration de bases de données
--Dump complet d'une base de données
mysqldump --quick --add-drop-table --extended-insert -u root -p db_name > dump_db_name_20101212.sql
--On peut utiliser la commande nice pour utiliser moins de ressources processeur
nice -n15 mysqldump --quick --add-drop-table --extended-insert -u root -p db_name > dump_db_name_20101218.sql
--Dump d'une ou plusieurs tables d'une base de données
mysqldump --quick --add-drop-table --extended-insert -u root -p db_name table_name1 table_name2 > dump_db_name_20101218.sql
--Dump de la structure d'une base de donnée
--On utilise l'option --no-data
mysqldump --quick --add-drop-table --no-data --extended-insert -u root -p db_name > dump_structure_db_name_20101218.sql

jeudi 16 décembre 2010

Les expression régulières (regexp), ou comment valider une chaine de caractère en Java

Les expressions rationnelles en Java (ou Regular Expression) comme dans les autres langages ont deux fonctions essentielles: la validation des données et l'analyse textuelle.
Ce modeste article n'a pas pour vocation d'être un cours exhaustif sur les expressions rationnelles mais on ouvrira des portes en décortiquant les exemples les plus utiles. Il ne vous restera plus qu'à les enfoncer.
Commençons par la validation des données pour cet article.
Supposons que je veuille valider qu'une chaîne de caratère est bien un emai
 En java on évoque la méthode statique 'matches' de l'objet Pattern, comme suite 
public static boolean validEmail(String email){        
       //pourrait être amélioré        
       return Pattern.matches(".+@.+\\.[a-z]+",email);        
  }

L'objet "Pattern" dispose d'une méthode statique "matches" permettant de valider rapidement la conformité d'une chaîne à un pattern.
Analysons ce pattern :
Il commence par ".+@" :
"." est une classe de caractère, il signifie n'importe quel caractère.
"+" est un quantificateur, il signifie au moins 1 (1 ou plus),
enfin @ qui n'a aucune signification particulière dans les expressions régulieres ne signifie rien d'autre que @ alias @, @ lui-même, en clair @.
Donc l'ensemble ".+@" siginifie que @ doit être présent, précédé par au moins 1 caractère.
A priori ça a l'air pas mal mais si on creuse un peu on voit tout de suite que c'est pas terrible pour vérifier qu'un mail est valide, quelles sont les chaînes de caractères qui obeissent à ce début de pattern :
mimi@
  mimi@@
  @@mimi@@@@@@@
  _-_-_-56?"""&&&@@@@ (a mon avis c'est pas un bon début pour 
un email valide)
et on peut faire encore plus horrible.
Bon ne desesperons pas, voyons la suite de ce pattern c'est à dire ce qui est situé après l'@.
.+\\.[a-z]+
".+" on connait déjà c'est n'importe quel caractère au moins une fois
ensuite "\\." est déstiné à exprimer "\." mais en java pour exprimer les "\" if faut aussi les echapper : "\." dans une chaine de caractère devient "\\." en java.
Mais alors que signifie "\." finalement ? "\." signifie que l'on veut literralement utiliser un "." dans la chaine de caractère, on ne veut pas que "." soit interprété comme une classe de caractère mais comme un caractère un point c'est tout!! En fait on essaye ici de capturer le "." qui sépare le domaine de son extension 'microsoft.com', 'taghjijt.ma' ...etc.
"[a-z]+" : "[a-z]" est une classe de caractère il signifie tous les caractères allant de a à z, quant à "+" on le connait déjà c'est un quantificateur, il signifie au moins une fois.

Quels sont les chaînes qui correspondent à ce pattern ?
microsoft.com
   microsoft.commerageetautreragot
   micro%%%%%%%%s(((((((oft.z
Là encore c'est pas terrible.

Finalement notre pattern dans sa totalité dit :
n'importe quel caractère mais au moins 1 fois, suivi d'un @ suivi de n'importe quel caractère mais au moins 1 fois suivi d'un '.' suivi de n'importe quel caractère entre a et z mais au moins 1 foi.

L'expérience montre qu'un simple pattern comme celui-là couvre dans la pratique 95% des besoins de validation des emails. Car l'utilisateur après un ou deux refus ne sait pas à quel point le contrôle des emails est fin et préfère gagner du temps en en saisissant un valide.

Mais 5% d'email c'est trop donc je vous propose d'analyser cette nouvelle regexp.
 ^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

Ce pattern est nettement meilleur et va nous permettre de faire un bien meilleur contrôle des emails. Il est aussi un peu plus complexe.
Commençons son analyse.
D'abord il y a le "^" qui signifie la chaine de caractère doit commencer par ce qui suit le caractère "^". De l'autre coté il y a le $ qui signifie la chaine de caractère doit finir par ce qui précède le caractère "$".
Vient ensuite une classe de caractère "[A-Z0-9._%+-]" ça nous oblige à décrire un peu plus rigoureusement la fontion joué par les crochets "[...]". Quand une chaine de caractère est compris dans des "[...]" cela signifie "ou"
1) [ab] signifie a ou b
2) [abc] signifie a ou b ou c
3) [a-c] signifie n'importe quoi de a à c (identique à la précédente), dans ce cas "-" est un opérateur de plage : la plage de caractère entre "a" et "c"
4) [a-z1-9] sigifie une lettre minuscule ou un chiffre
5) [a-z1-9+] sigifie une lettre minuscule ou un chiffre ou un caractère +, attention entre les crochets les caractères spéciaux perdent leur spécificité et sont interprétés literallement comme des caractères, c'est le cas aussi pour "." Comme on veut aussi proposer le caractère "-" dans la liste des caractères possibles et qu'on ne veut pas que "-" soit interprété comme un opérateur de plage on le met tout à la fin juste avant le crochet fermant.
Donc ^[A-Z0-9._%+-]+@ signifie la chaine de caractère doit commencer par au moins 1 élément de la classe [A-Z0-9._%+-] suivi d'un @
Comparé à l'exemple précédent
mimi@ passe encore mais
mimi@@
   @@mimi@@@@@@@
   _-_-_-56?"""&&&@@@@
ne passe plus, on a progressé !
Poursuivons l'analyse de cette regexp : "[A-Z0-9.-]+\.[A-Z]{2,4}$".
Comme on le sait déjà $ tout à la fin signifie la chaine de caratère doit finir par ce qui précède le $
"[A-Z0-9.-]" veut dire un caratere dans la plage "A-Z" ou "0-9" ou un point "." ou un "-". On peut remarquer que cette classe de caractère est moins large que la classe étudiée précédement en effet il est interdit d'utiliser dans les noms de domaine des caractères comme _ ou %.
Ensuite on connait déjà "\." cela veut dire le caractère "." et non la classe de caractère universelle. Attention dans une chaine de caractère java il faudra l'écrire "\\.".
"[A-Z]{2,4}" veut dire entre 2 et 4 caractères dans la plage A-Z
Mis bout a bout cette deuxieme moitié de regexp nous donne
Il faut que la chaine de caractère se termine par : Au moins un caractère dans la plage "[A-Z0-9.-]" Suivi d'un '.' suivi d'entre deux et quatre caractères dans la plage [A-Z]
Comparé à l'exemple précédent :
microsoft.com passe encore mais
microsoft.commerageetautreragot
   micro%%%%%%%%s(((((((oft.z
ne passe plus.
On est enfin bon, notre regexp valide correctement une adresse mail,
C'est ce genre de regex qui vous refuse parfois la saisie d'une adresse mail non valide sur un site web.

Cette regexp est utilisée en java de la façon suivante :
public static boolean validEmail(String email){
       //beaucoup mieux
       email = email.toUpperCase();
       return Pattern.matches("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$",email);
   }
Bonne lecture, et voici un lien pour plus d'infos sur les regexp. 

jeudi 25 novembre 2010

Spring, ou l'object factory des developpeurs java

J'ai pris le logo Spring 2.0, parce que c'est celui que j'ai trouvé par la recherche sur google, sinon, pour information, à la date de rédaction de ce poste, la version 3.0.5 est disponible



Spring est un framework complet d'applications java/j2ee hébergé par SpringSource , connu précédemment sous le nom INTERFACE21. Spring prend en charge de nombreux aspects du développement d'une application Java/ Java EE et peut vous aider à produire plus rapidement des applications de qualité et de performance élevées.
Le cœur du framework Spring est constitué d'un conteneur léger capable d'ajouter de manière déclarative des services d'entreprise à des simples objets Java.

Pour apporter ces services aux composants, Spring s'appuie énormément sur une excellente méthodologie de programmation dite la programmation orienté aspect (POA). Dans le contexte du conteneur Spring IoC, les composants sont également appelés beans (en français grain de café, puisque java en dialecte américain, veut dire tasse de café).

Le framework Spring lui-même se fond sur de nombreux design patterns orientés objet et ceux de Core Java EE de Sun Microsystems (aujourd'hui propriété d'Oracle). En utilisant Spring, vous êtes conduits à  employer les meilleurs pratiques industrielles pour concevoir et implémenter vos applications.

Spring n'entre pas en concurrence avec les technologies existantes dans certains domaines. Bien au contraire, il s'intègre avec de nombreuses technologies majeurs afin de simplifier leur utilisation. Spring représente ainsi une bonne solution parfaitement adapté à de nombreuses situations.

L'architecture de Spring repose sur des modules. La flexibilité d'assemblage de ces modules est telle que les applications peuvent s'appuyer sur différents sous-ensembles de manière variée.


Dans cette figure, les modules sont présentés sous forme hiérarchique, les modules supérieurs dépendant des modules inférieurs. Le module Core se trouve tout en bas car il constitue les fondations du framework Spring.

Core : fournit les fonctionnalités de base de Spring, il propose un conteneur IoC de base nommé BeanFactory.

Context : se fonde sur Core, il étant les fonctionnalités et propose un conteneur IoC élaboré, nommé ApplicationContext.

AOP : framework de programmation orienté aspect.

JDBC : ou Spring Java DataBase Connectivity : définit l'API JDBC native une couche abstraite qui permet d'employer JDBC.

TX : ce module permet de gérer les transactions par programmation ou sous forme déclarative (annotations).

ORM : Object Relationnel Mapping, intègre à Spring les frameworks classiques de mapping objet relationnel, type Hibernate, JDO, JPA ...etc.

Web MVC : framework d'applications web conforme au design pattern MVC (modéle - Vue - contrôleur).

Web Framework Integration : module pour intégrer les framework de présentation type : Struts, JSF, WebWork ...etc.

Testing : prend en charge des tests unitaires et d'intégration, il définit le framework Spring TestContext qui prend en charge les framework de test comme JUnit

Portlet MVC : définit un framework de portlet, également conforme de pattern MVC

Entreprise Intégration : intégre à Spring de nombreux services d'entreprise répondus, notamment des technologies d'accès distant RMI, les EJB, JMS, JMX ...etc.

voici un lien en français, sur developpez.com
Bonne lecture et n'oubliez pas de laisser vos commentaires.

mardi 2 novembre 2010

JUnit, ou comment tester le code en Java

JUnit est un framework de teste, utilisé par la communauté des développeurs Object, pour tester une classe java, une méthode ou tout simplement un bout de code. JUnit, c’est pour dire Java Unit Test (ou Testes Unitaire en Java).
S’il y a la notion du test unitaire, c’est pour faire référence au fait que le code java peut être isolé de son contexte et qu'on puisse le tester aisément, faute de quoi, il y a violation des concepts Object, très chers à la communauté des programmeurs Orienté Object (OO).
Un programme ou une application Java, doit respecter les trois principes suivants :
-          Forte cohésion : le programme (classe java) doit être cohérent entre ce qu’il doit faire et ce qu’il fait réellement, c'est-à-dire qu’une classe ne doit faire qu’une et uniquement une seule tache, les préoccupations doivent être séparées.
-          Faible couplage : les classes java, doivent être le plus faible possible couplées entre elles, c'est-à-dire, une modification dans un programme, ne doit pas entrainer la modification de toute une application, l’impact d’une modification sur les autres programme, doit être limité.
-          Un programme doit être testable, par les outils de test, notamment, par JUnit, et doit être maintenable (pour sa maintenance ou son évolution ultérieure).
Faute de ces trois principes, un programme n’est tout simplement pas bon et non conforme aux principes OO. C’est manière de dire que ce programme peut être sources de beugs et problèmes de performance dans une application entreprise.

Je ne vais pas réinventer la roue, sur internet, vous trouverez de quoi vous régaler en informations utiles sur JUnit. Sachez tout simplement, que pour appréhender tous les aspects java, vous devrez aussi lire des tutoriels en anglais, et que sans une compréhension de l’anglais, au moins technique, vous êtes vite limités en apprentissage de Java.

Je vous recommande ce premier tutoriel sur JUnit, écrit par Laurie Williams, Dright Ho, Sarah Heckman, Ben Smith de North Carolina State University.

Un Test JUnit qui marche se traduit graphiquement dans la console JUnit dans votre Eclipse, par une barre verte :



tandis qu'un test qui échoue se traduit par une barre rouge :


Les bonnes pratiques de programmations d'aujourd'hui, imposent aux programmeurs de coder leurs algorithmes dans une classe de teste, type JUnit, et puis une fois testé et validé, celui-ci est ensuite implémenté dans la classe métier correspondante.

lundi 25 octobre 2010

Eclipse, ou l'IDE open source des programmeurs java

Eclipse, c'est l'Environnement de Développement Intégré, ou en anglais un IDE (Integrated Development Environment),  outil écrit à 100 % en java par les ingénieurs d'IBM, rendu open source depuis. Son évolution est maintenant gérée par la Fondation Eclipse.



Énormément d'informations sont disponibles, sur internet, à ce sujet. Pour quelqu'un qui débute en programmation, il pourra trouver son bonheur en consultant ce tutoriel sur  developpez.com

Bonne lécture

vendredi 22 octobre 2010

Java ! mais c'est quoi ?

On ne va pas réinventer la roue, il y a un océan d'informations, sur internet, traçant et décrivant le java depuis sa première mise sur le marché.
Voici un lien très utile mis en ligne par la communauté des développeurs francophone, accessible à tout le monde sur developpez.com
Sachez qu'en langage courant américain, java veut dire une tasse de café, dégustée dans un pub (Bistrot ou café) avec des amis, d'où l'emblème du langage du programmation Java :





jeudi 21 octobre 2010

Vous avez dit Taghjijt, c'est où ça ?



Taghjit, ou Le pays d’Id Brahim, c’est une oasis au porte du désert à 200 km au sud d’Agadir sur la route de Fem-Lhcen, elle est entourée de la célèbre chaîne montagneuse appelée “ Bani ” faisant partie de L’Anti-atlas .
La région est parcourue de Oueds désertiques comme : Oued Siad, oued Mait...



Le climat de la région est semi- saharien, la pluie rare et la température atteint parfois 48° en été.



La région est connue pour ses célèbres dattiers aux fruits succulents.


Introduction et présentation

Ce blog,est une tribune d'échange d'informations sur les technologies de la programmation java, j2ee et des frameworks qui tournent au tour, il vise à mettre en avant l'émergence d'une communauté de développeurs java issus du village de Taghjijt au sud du Maroc.
Java, ce n'est pas qu'un langage de programmation robuste qui a fait ses preuves, mais c'est aussi un moyen d'épanouissement et de promotion sociale, du fait que l'informatique au Maroc, c'est tout de même 25% du PIB national.