Pages

Business Intelligence en quelque mot (article lu sur internet)

Le business intelligence : c’est quoi ?


Le business intelligence est un domaine très récent et il n’est pas encore instruit dans les écoles de commerce. Un peu d’évangélisation  qui concerne le business intelligence va faire bien.
Dernièrement, dans une réunion avec des partenaires étrangers occupant des positions assez importantes dans des grands cabinets, j’étais surpris d’entendre  « la BI (business intelligence)… ce sont les études de marché, c’est ça? » Dans cet instant, j’ai conclu qu’il restait beaucoup de travail pour transmettre cette notion auprès de tout le monde. Dont acte.

Au commencement était la finance

Tout a démarré avec la comptabilité et plus généralement la finance qui sont les premières entités au cœur d’une entreprise. Pour le fonctionnement continu d’une entreprise, il faut qu’elle gagne plus qu’elle dépense, ceci étant l’alpha et l’oméga du business.
La comptabilité décrit les flux financiers et autorise la gestion d’une entreprise.  L’introduction de la comptabilité et précisément de la partie double était une révolution en soi dans l’essai de retracer le cycle de production de l’entreprise.
Tout était relativement simple dans le passé.
Les choses se sont compliquées et a paru le contrôle de gestion. Cette activité était trop détaillée et donnait le moyen d’un  large accroissement comparant à la finance traditionnelle, à savoir  aider les opérationnels dans le pilotage quotidien et concret de l’entreprise.
Les renseignements généraux sur le cycle financier étaient insuffisants et le contrôle de gestion  notait  une évolution dans la compréhension de l’activité économique des entreprises.
Le contrôle de gestion et sa propagation dans des entreprises a permis d’aider les décideurs dans leur direction en collant au plus près de la réalité.

…puis vint l’informatique et tout s’accéléra…

Les équipements croissants en matériel informatique des entreprises  dans les 40 dernières années ont amené à un grand pic et une accélération du temps : là où 2 semaines de calculs étaient nécessaires dans le passé avec une feuille et un crayon, un tableur excel permettait de faire 30 simulations en changeant quelques cellules en l’espace de quelques heures.
Les choses qui contribuent à la baisse du temps de traitement nécessaire des opérations de bases sont le stockage des informations dans les bases de données,  la saisie de l’information via des terminaux, l’automatisation des taches routières permise par les premières machines. Tout cela donne un accès en un  clin d’œil aux informations importantes ce qui a permis de bien avancer dans les analyses.
A l’arrivée de l’informatique, on peut répondre à des questions que les personnes n’osait se poser dans le passé ; quelle est chaque heure ou en temps réel, la productivité de mes machines ou quel est le pourcentage réel vs tarjet sur chaque ligne de revenu et sur chaque produit par jour.
L’impact de cela est d’augmenter le nombre d’analyse, rendre quasiment tout calculable en temps quasi-réel  par conséquent créer des rapports et des analyses sur des points qui ne sont plus principalement financiers (de base pour une entreprise) mais opérationnels.
Donc le business intelligence est une évolution du contrôle de gestion, avec moins de finance, plus d’opérationnel et surtout une bonne connaissance de l’informatique et des systèmes d’information pour générer et mettre en place les rapports pertinents.
Le business intelligence se différencie du contrôle de gestion par une connaissance en même temps très fine des métiers de l’entreprise (RH, marketing, finance, sales…) via particulièrement  ses processus et ses indicateurs principaux et par une compréhension des techniques informatiques permettant de stocker, trier, nettoyer et restituer ces informations. La Business intelligence (ou « BI » en abrégé) est une évolution naturelle et complémentaire du contrôle de gestion.
Le business intelligence représente un intérêt important  pour les entreprises, et ce n’est pas pour rien que les DSI ont encore classé en 2013 cette discipline en tête de leurs priorités (Business intelligence = décisionnel).
Les entreprises peuvent effectuer de réelles économies dans le cas où le projet de décisionnel est convenablement mené : les informations essentielles vont remonter beaucoup plus vite et les opérationnels n’auront plus à perdre du temps inutilement pour de la création de rapports sur un tableur quelconque.
Le business intelligence va conjointement avec les opérationnels, mettre en place tous les rapports qui correspondent à la retranscription de la réalité opérationnelle de l’activité et des processus de l’entreprise.

Quel est le profil type d’une personne en business intelligence?

Le profil est assez atypique si l’on considère le schéma académique traditionnel.
Il y a toujours un décalage de 20 ans entre ce qui est enseigné dans les écoles et les dernières orientations observées en entreprise. Par exemple, on enseigne toujours les 4P en donnant l’illusion aux producteurs que le prix est sous leur contrôle alors qu’il est le plus souvent dicté par la grande distribution (marges arrières par exemple, pression de la concurrence sur le prix) ou encore l’émergence encore timide de masters dédiés à internet alors que son poids dans le PIB est énorme. Bref, les écoles sont en retard.
On observe alors deux profils majeurs dans le business intelligence.
Le premier groupe est composé des ingénieurs purs et durs avec une bonne formation en informatique.  La maîtrise du  code informatique ne s’improvise pas. Pour manipuler correctement  les outils qui vont générer les tableaux de bord et autres rapports chiffrés, il faut une solide formation académique.
Le risque avec les ingénieurs c’est qu’ils ne captent rien du tout aux problématiques et au jargon business et donc une initiation aux concepts clés de gestion d’entreprise est nécessaire.
Le deuxième groupe contient des  profils commerciaux avec une solide appétence pour la technique. Cela permet de comprendre et souvent d’anticiper les besoins des opérationnels et aussi de les guider dans la création des rapports les plus pertinents.
L’affaire idéale est d’élaborer un centre de compétence de Business Intelligence  qui va rassembler des profils d’ingénieurs formés sur la manipulation des données et des outils de restitutions avec des business analystes.  Cette population devra apprendre à se connaître pour parler le même langage.
Le business intelligence est donc appelée à grandir et à s’institutionnaliser au sein des entreprises dans les prochaines années. Le Business Intelligence a de l’avenir.

Formation Android

Formation Android 
Devenez un développeur Android Vol 1 et Vol 2



La formation Devenez un développeur Android Vol 1 et 2 [Français]
Format: Archive .rar
Langue: Français
Taille du Fichier: 2,02Go

Description:


        Tout ce qu’il faut savoir pour commencer à programmer des applications pour Android, le système d’exploitation Open Source pour terminaux mobiles. Non seulement vous apprendrez à installer et paramétrer l’environnement de développement avec son éditeur de code et son émulateur, mais en plus vous allez découvrir comment tirer profit du Framework pour créer vos propres applications et les publier sur le Market Place de Google. Devenez un développeur Android !


Formation Android Vol 1 part 1

Formation Android Vol 1 part 2

Formation Android Vol 1 part 3

Formation Android Vol 2 part 1

Formation Android Vol 2 part 2

Formation Android Vol 2 part 3

Bonne visite

Envoyer un mail à partir d'un compte Gmail


Envoyer un mail à partir d'un compte Gmail


Ceci est un exemple d'un code permettant d'envoyer un mail automatiquement à partir d'un compte Gmail avec un accusé de réception demandé à la lecture.

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String host = "smtp.gmail.com";
String username = "mail emetteur";
String password = "password";
String port = "465";

String to = "mail destination"; // ou bien la liste des adresses de destination séparé par des virgules
String subject = "Test d'envoi automatique par Java";
String content = "Test d'envoi automatique de mail par Java en utilisant l'adresse: "+username;

InternetAddress fromAddress =null ;
InternetAddress[] addresses = null;
try {
addresses = InternetAddress.parse(to, true);
fromAddress= new InternetAddress(username);

} catch (AddressException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", username);
props.put("mail.smtp.port", port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.socketFactory.port", port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");

System.out.println("creating session");
Session session = Session.getDefaultInstance(props, null);

System.out.println("creating message");
MimeMessage message = new MimeMessage(session);
try {
message.setText(content);
message.setSubject(subject);
message.setFrom(fromAddress);
message.setRecipients(Message.RecipientType.TO,addresses);
message.setHeader("Disposition-Notification-To",fromAddress.getAddress());

System.out.println("creating transport");
Transport transport = session.getTransport("smtp");

System.out.println("connecting to "+host+" with username = "+username);
transport.connect(host, username, password);

System.out.println("sending message");
transport.sendMessage(message, message.getAllRecipients());

transport.close();
System.out.println("transport closed");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}




Créer une application CRUD avec 
Hibernate JSF EJB 3.0

Dans cet article, je vais vous montrer comment développer une application CRUD permet d'effectuer les opérations de listing, ajout, modification et suppression sur une entité donnée. La mise en place d'une telle application nécessite la réalisation de deux parties essentielles, la première sera pour pouvoir effectuer les opérations CRUD sur une source de données et une deuxième partie permet de fournir une interface graphique pour réaliser ces opérations.
Outils : 
      Eclipse 3.7 (Indigo) Télécharger
      JBoss 4.2 Télécharger
      MySql 5.0 Télecharger
Installation et préparation d'environnement  
      - Installer MySQL
      - Télécharger puis décompresser JBoss ensuite le copier le dans le répertoire C:/JBoss
      - Télécharger puis décompresser Eclipse ensuite le copier le dans le répertoire C:/Eclipse



Maintenant, on va commencer la création de notre application. Tout d’abord, On va commencer par la création des EJB coté serveur. Ces EJB représentent la couche métier de l’application.

Création d’un EJB Project : 

Créer un nouveau projet et choisir « EJB Project ». Donner un nom à votre projet ex : JavaOnlineEJB



Après avoir entré le nom du projet, une configuration du serveur d’application est nécessaire.
Cliquer sur new Runtime, une fenêtre s’ouvre. Spécifier le serveur d’application à utiliser  (JBoss v4.2 dans notre cas) et la version du EJB puis cliquer sur Next.


Introduire le chemin du serveur utilisé : C:\Jboss-4.2.2.GA puis cliquer sur finish.



Vérifier la version du module EJB (3.0 pour notre cas) puis cliquer sur finish.


Maintenant, après avoir créé votre projet. Vous devez obtenir cette arborescence :


Fichiers de configuration :
Dans ejbModule/META-INF , il faut créer deux fichiers : orm.xml et persistence.xml

orm.xml 
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
                            version="1.0">
</entity-mappings>



persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
       <persistence-unit name="Demo">
       <jta-data-source>java:/MySqlDS</jta-data-source>
            
       <properties>
                    <property name="hibernate.hbm2ddl.auto" value="update" />
                    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"></property>
             </properties>
      
       </persistence-unit>
</persistence>


Création des entités et des beans :
Créer deux package :
-                                                     - org.formation.entity
-                                                     - org.formation.beans
On crée maintenant les entités (une seule classe ‘entité’ pour ce tutoriel) :
User.java
Click droite sur le package entity à new àClass

User.java

package org.formation.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User implements Serializable
{
       private static final long serialVersionUID = 1L;
      
       @Id
       @GeneratedValue(strategy=GenerationType.AUTO)
       private int id;
       private String name;
       private String reference;
       private String country;
       private String login;
       private String password;
       private boolean state;
      
       public int getId() {
             return id;
       }
       public void setId(int id) {
             this.id = id;
       }
       public String getName() {
             return name;
       }
       public void setName(String name) {
             this.name = name;
       }
       public String getReference() {
             return reference;
       }
       public void setReference(String reference) {
             this.reference = reference;
       }
       public String getCountry() {
             return country;
       }
       public void setCountry(String country) {
             this.country = country;
       }
       public String getLogin() {
             return login;
       }
       public void setLogin(String login) {
             this.login = login;
       }
       public String getPassword() {
             return password;
       }
       public void setPassword(String password) {
             this.password = password;
       }
       public boolean isState() {
             return state;
       }
       public void setState(boolean state) {
             this.state = state;
       }
}


On crée maintenant le session bean :
Click droite sur le package org.formation.beans à new à Session Bean (EJB 3.x)

 

Donner un nom au Bean (généralement nom de l’entité + Bean : UserBean dans ce cas), puis cocher Remote et Local dans ‘Create business interface’. Cliquer next puis finish.

On obtient cette arborescence :

 
UserBeanLocal.java

package org.formation.beans;
import java.util.List;

import javax.ejb.Local;

import org.formation.entity.User;

@Local
public interface UserBeanLocal
{
       void addUser(User user);
       void updateUser(User user);
       void deleteUser(User user);
       User getById(int id);
       List<User> getlistUser();

}


UserBeanRemote.java

package org.formation.beans;
import java.util.List;

import javax.ejb.Remote;

import org.formation.entity.User;

@Remote
public interface UserBeanRemote
{
       void addUser(User user);
       void updateUser(User user);
       void deleteUser(User user);
       User getById(int id);
       List<User> getlistUser();

}


 
UserBean.java

package org.formation.beans;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.formation.entity.User;
import org.hibernate.Criteria;
import org.hibernate.Session;

/**
 * Session Bean implementation class UserBean
 */
@Stateless
public class UserBean implements UserBeanRemote, UserBeanLocal {

    @PersistenceContext(unitName="Demo")
    EntityManager em;
      
       UserBean() {  }

       @Override
       public void addUser(User user) {
             em.persist(user);
       }

       @Override
       public void updateUser(User user) {
             em.merge(user);
       }

       @Override
       public void deleteUser(User user) {
             try
             {
                    user = em.find(User.class,user.getId());
                    em.remove(user);
             }
             catch(Exception e) {}
       }

       @Override
       public User getById(int id) {
             return em.find(User.class,id);
       }

       @Override
       public List<User> getlistUser() {
             Session session = (Session) em.getDelegate();
             Criteria criteria = session.createCriteria(User.class);
             List<User> users = criteria.list();
             return users;
       }

}



Préparation du serveur: 
On ajoute le jar qui permet la connexion avec la base des données MySql dans jboss\server\default\lib


Ensuite, on crée le fichier MySqlDS.xml et on le place dans jboss\server\default\deploy

Mysql-ds.xml

<?xml version="1.0" encoding="UTF-8"?>

<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/mabase</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>


 
Revenant à Eclipse, cliquer sur Servers puis ajouter un nouveau serveur :
Click droite --> New --> Server



Une fenêtre s’ouvre ‘New Server’
 
Cliquer sur Next deux fois.

 
Sélectionner JavaOnlineEJB puis cliquer sur Add puis sur finish.

 On obtient çà:

Click droite sur JBoss v4.2 at localhost puis start.
N.B: Vérifier la création des tables dans votre base des données.

Passons, maintenant, à la création du partie client.
Dans cette partie, on va crée la partie client du projet. Cette partie consiste à  développer les interfaces graphiques de l’application, d’une part, c’est la couche présentation. D’autre part, on va développer les contrôleurs qui assurent la communication entre la couche présentation et la couche métier.

Pour commencer, on crée un nouveau projet web sous le nom ‘JavaOnlineClient’ :
Menu >> File >> New >> Dynamic Web Project
  
Click next >> next >> finish.

On obtient ça:

Maintenant, on a besoin de quelques bibliothèques nécessaires pour la création des la couche présentation : JSF et JSTL. Donc on doit importer ces librairies.
Click droite sur le projet >> propreties, puis selectionner Java Build Path.
- choisir l’onglet Libraries
- cliquer Add Library
- Une nouvelle fenêtre s’ouvre, sélectionner User Library puis Next
- Cliquer User Libraries puis New, ensuite donner un nom pour votre nouvelle librairie (JSF)


-          Ensuite valider puis cliquer sur Add JARs 
Importer les jar suivants :  Jboss-faces.jar -  jsf-api.jar - jsf-impl.jar.
Ces jar se trouvent dans JBoss\server\default\deploy\jboss-web.deployer\jsf-libs

 
Puis valider.
Avec la même méthode, on va importer le librairie JSTL ( JSP Standard Taglib).
Jstl.jar se trouve dans JBoss\server\default\deploy\jboss-web.deployer\
Après avoir importé les bibliothèques nécessaires, il est recommandé de créer le fichier properties.jndi.
Donc, nous devons créer un dossier nommé config dans le répertoire Java Resources
Ensuite, click droite sur le projet >> properties >> Java Build Path, choisir l’onglet source.
Click Add Folder puis sélectionner config puis valider.
Création du fichier jndi.properties :
jndi.properties 
# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING
#
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099



Développement des contrôleurs
Maintenant, on va créer le contrôleur UserManagedBean.java.
On crée donc la classe UserManagedBean.java dans le répertoire src sous le package org.formation.managedBean.

On obtient :
UserManagedBean.java
package org.formation.managedBean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.naming.Context;
import javax.naming.InitialContext;

import org.formation.beans.UserBeanRemote;
import org.formation.entity.User;

public class UserManagedBean
{
    int id;
    private String name;
    private String reference;
    private String country;
    private String login;
    private String password;
    private String confirmPwd;
    private List<User> listUser;
    private String destination;
    public User user;
      
       public String active()
       {
             if(user.isState())
             {
                    user.setState(false);
             }
             else
             {
                    user.setState(true);
             }
             try
             {
                Context ctx = new InitialContext();
                UserBeanRemote userBean = (UserBeanRemote) ctx.lookup("UserBean/remote");
                userBean.updateUser(user);
                return "lista";
             }
             catch(Exception e)
             {
                    e.printStackTrace();
                    return null;
             }
            
       }
      
       public String update()
       {
             try
             {
                Context ctx = new InitialContext();
                UserBeanRemote userBean = (UserBeanRemote) ctx.lookup("UserBean/remote");
                    userBean.updateUser(user);
             }
             catch(Exception e)
             {
                    e.printStackTrace();
             }
            
             return "updated";
       }
      
       public String edit()
       {
             return destination;
       }
       public String add()
       {
             User user = new User();
             user.setCountry(this.country);
             user.setName(this.name);
             user.setReference(this.reference);
             user.setLogin(this.login);
             user.setPassword(this.password);
             user.setState(false);
             if(!password.equals(confirmPwd))
             {
                FacesContext facesContext = FacesContext.getCurrentInstance();
                FacesMessage facesMessage = new FacesMessage("Confirmation Failed !!");
                facesContext.addMessage(null,facesMessage);
                return null;
             }
             try
             {
                Context ctx = new InitialContext();
                UserBeanRemote userBean = (UserBeanRemote) ctx.lookup("UserBean/remote");
                userBean.addUser(user);
             }
             catch(Exception e)
              {
                e.printStackTrace();
             }
             return "success";
       }
      
       public String delete()
       {
             try
             {
                Context ctx = new InitialContext();
                UserBeanRemote userBean = (UserBeanRemote) ctx.lookup("UserBean/remote");
                user = userBean.getById(user.getId());
                userBean.deleteUser(user);
                return "deleted";
                                 
             }
             catch (Exception e)
             {
                    e.printStackTrace();
                    return null;
             }
       }
      
       public int getId() {
             return id;
       }

       public void setId(int id) {
             this.id = id;
       }

       public String getName() {
             return name;
       }

       public void setName(String name) {
             this.name = name;
       }

       public String getReference() {
             return reference;
       }

       public void setReference(String reference) {
             this.reference = reference;
       }

       public String getCountry() {
             return country;
       }

       public void setCountry(String country) {
             this.country = country;
       }

       public String getLogin() {
             return login;
       }

       public void setLogin(String login) {
             this.login = login;
       }

       public String getPassword() {
             return password;
       }

       public void setPassword(String password) {
             this.password = password;
       }

       public String getConfirmPwd() {
             return confirmPwd;
       }

       public void setConfirmPwd(String confirmPwd) {
             this.confirmPwd = confirmPwd;
       }

       public List<User> getListUser() {
             try
             {
                Context ctx = new InitialContext();
                UserBeanRemote userBean = (UserBeanRemote) ctx.lookup("UserBean/remote");
                return userBean.getlistUser();
             }
             catch(Exception e)
             {
                    e.printStackTrace();
                    return null;
             }
       }

       public void setListUser(List<User> listUser) {
             this.listUser = listUser;
       }

       public User getUser() {
             return user;
       }

       public void setUser(User user) {
             this.user = user;
       }
       public String getDestination() {
             return destination;
       }
       public void setDestination(String destination) {
             this.destination = destination;
       }

      
}

Dans le répertoire WebContent, nous devons avoir cette structure :




    Si vous remarquez que le fichier faces-config.xml est inexistant, vous devez suivre ces étapes :
-                                  - Click droite sur le projet >> properties
-                                  - Sélectionner Project Facets
-                                  - Cocher JavaServer Faces version 1.2



 
Faces-config.xml


<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    version="1.2">
       <managed-bean>
             <managed-bean-name>userManagedBean</managed-bean-name>
             <managed-bean-class>org.formation.managedBean.UserManagedBean</managed-bean-class>
             <managed-bean-scope>session</managed-bean-scope>
       </managed-bean>
</faces-config>


web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>JavaOnlineClient</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
</web-app>


On va faire un petit test. Créer un fichier index.html dans le répertoire WebContent :

Index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Java Online </title>
</head>
<body>
 <h1>My First Application Java Online ...</h1>
</body>
</html>
 
Résultat :

 
Maintenant on va importer JavaOnlineEJb à JavaOnlineClient, Click droite sur le projet >> properties >>Java Build Path. Sélectionner l’onglet Projects >> Add >> cocher JavaOnlineEJB puis valider
 
On crée maintenant les fichiers suivants dans le répertoire WebContent:

addUser.jsp
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Java Online - Add User</title>
</head>
<body>
       <f:view>
       <h2>Java Online From Tunisia </h2>
       <h3> Add New User </h3>
       <br><br>
             <h:messages/>
             <h:form>
                    <h:inputHidden value="#{userManagedBean.id}"></h:inputHidden>
                    <h:panelGrid border="0" columns="2" cellpadding="5" cellspacing="3">
                           <h:outputText value="Name"></h:outputText>
                           <h:inputText value="#{userManagedBean.name}" size="25"  maxlength="45" required="true" requiredMessage="Champs obligatoire !"
                                  validatorMessage="between 5 and 45 letters">
                                  <f:validateLength maximum="45" minimum="5"></f:validateLength>
                           </h:inputText>
                          
                           <h:outputText value="Reference" ></h:outputText>
                           <h:inputText value="#{userManagedBean.reference}" size="25"  maxlength="45" required="true" requiredMessage="Champs obligatoire !"
                                  validatorMessage="between 5 and 45 letters">
                                  <f:validateLength maximum="45" minimum="5"></f:validateLength>
                           </h:inputText>
                          
                           <h:outputText value="Country"></h:outputText>
                           <h:inputText value="#{userManagedBean.country}" size="25"  maxlength="45" required="true" requiredMessage="Champs obligatoire !"
                    validatorMessage="between 5 and 45 letters">
                           <f:validateLength maximum="45" minimum="5"></f:validateLength>
                    </h:inputText>
                          
                           <h:outputText value="Login"></h:outputText>
                           <h:inputText value="#{userManagedBean.login}" size="25" maxlength="15" ></h:inputText>
                          
                           <h:outputLabel value="Password : " for="pwd" />
                           <h:inputSecret label="Password" id="pwd" value="#{userManagedBean.password}" size="25" maxlength="15" required="true" redisplay="true" />
                          
                           <h:outputLabel value="Confirm password : " for="confPwd" />
                           <h:inputSecret label="ConfPassword" id="confPwd" value="#{userManagedBean.confirmPwd}" size="25" maxlength="15" required="true" redisplay="true" />
                    </h:panelGrid>
                    <h:commandButton action="#{userManagedBean.add}" value="Add"></h:commandButton>
             </h:form>
       </f:view>
</body>
</html>

listUser.jsp
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@taglib
       uri="http://java.sun.com/jsf/html" prefix="h"%><%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Java Online - List User</title>
<STYLE type="text/css">
<!--
.titre {
background-color:#CCCCFF;
color:#FFFFFF;
}
.paire {
background-color:#EFEFEF;
}
.impaire {
background-color:#CECECE;
}
-->
</STYLE>
</head>
<body>
      
       <h2>Java Online From Tunisia </h2>
       <h3> list User </h3>
      
       <f:view>
             <h:form>
             <h:dataTable value="#{userManagedBean.listUser}" var="user" border="0" rules="rows" cellpadding="3" 
                                  cellspacing="10" rowClasses="paire,impaire" headerClass="titre"  >
            
                    <br/><br/>
                    <f:facet name="header">list ...</f:facet>
                    <f:facet name="footer">end list</f:facet>
                    <h:column id="state">
                           <f:facet name="header">
                           <h:outputText value="State"  />
                           </f:facet>
                           <h:commandLink action="#{userManagedBean.active}">
                                  <h:graphicImage value="resources/img/state_#{user.state}.png" style="border:0"></h:graphicImage>
                                  <f:setPropertyActionListener target="#{userManagedBean.user}" value="#{user}"></f:setPropertyActionListener>
                           </h:commandLink>                 
                    </h:column>
                    <h:column id="Id">
                           <f:facet name="header" >
                                  <h:outputText value="Id"  />
                           </f:facet>
                           <h:outputText value="#{user.id}"/>
                    </h:column>
                   
                    <h:column id="name">
                           <f:facet name="header">
                                  <h:outputText value="Name"/>
                           </f:facet>
                           <h:outputText value="#{user.name}"/>
                    </h:column>
                   
                    <h:column id="ref">
                           <f:facet name="header">
                                  <h:outputText value="Reference"/>
                           </f:facet>
                           <h:outputText value="#{user.reference}"/>
                    </h:column>
                   
                    <h:column id="country">
                           <f:facet name="header">
                                  <h:outputText value="Country"/>
                           </f:facet>
                           <h:outputText value="#{user.country}"/>
                    </h:column>
                   
                   
                    <h:column>
                           <f:facet name="header">
                                  <h:outputText value="Edit"></h:outputText>
                           </f:facet>
                           <h:commandLink action="#{userManagedBean.edit}">
                                  <h:graphicImage value="resources/img/edit.png" style="border:0"></h:graphicImage>
                                  <f:setPropertyActionListener  target="#{userManagedBean.user}" value="#{user}"></f:setPropertyActionListener>
                                  <f:setPropertyActionListener target="#{userManagedBean.destination}" value="modif"></f:setPropertyActionListener>                      
                           </h:commandLink>                 
                    </h:column>


                    <h:column id="Delete">
                           <f:facet name="header">
                                  <h:outputText value="Edit"/>
                           </f:facet>
                           <h:commandLink action="#{userManagedBean.delete}">
                                  <h:graphicImage value="resources/img/delete.png" style="border:0"></h:graphicImage>
                                  <f:setPropertyActionListener target="#{userManagedBean.user}" value="#{user}" />
                           </h:commandLink>
                          
                          
                    </h:column>
             </h:dataTable>
      
       </h:form>
       </f:view>
</body>
</html>

editUser.jsp

<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Java Online - Add User</title>
</head>
<body>

       <f:view>
       <h2>Java Online From Tunisia </h2>
       <h3> Edit User </h3>
       <br><br>
             <h:messages/>
             <h:form>
                    <h:inputHidden value="#{userManagedBean.user.id}"></h:inputHidden>
                    <h:panelGrid border="0" columns="2" cellpadding="5" cellspacing="3">
                           <h:outputText value="Name"></h:outputText>
                           <h:inputText value="#{userManagedBean.user.name}" size="25"  maxlength="45" required="true" requiredMessage="Champs obligatoire !"
                                  validatorMessage="between 5 and 45 letters">
                                  <f:validateLength maximum="45" minimum="5"></f:validateLength>
                           </h:inputText>
                          
                           <h:outputText value="Reference" ></h:outputText>
                           <h:inputText value="#{userManagedBean.user.reference}" size="25"  maxlength="45" required="true" requiredMessage="Champs obligatoire !"
                                  validatorMessage="between 5 and 45 letters">
                                  <f:validateLength maximum="45" minimum="5"></f:validateLength>
                           </h:inputText>
                          
                           <h:outputText value="Country"></h:outputText>
                           <h:inputText value="#{userManagedBean.user.country}" size="25"  maxlength="45" required="true" requiredMessage="Champs obligatoire !"
                    validatorMessage="between 5 and 45 letters">
                           <f:validateLength maximum="45" minimum="5"></f:validateLength>
                    </h:inputText>
                    </h:panelGrid>
                    <h:commandButton action="#{userManagedBean.update}" value="Update"></h:commandButton>
             </h:form>
       </f:view>
</body>
</html>