IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

[ServiceLocator] [BusinessDelegate] et comment lancer l'application? [EJB3]


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut [ServiceLocator] [BusinessDelegate] et comment lancer l'application?
    Bonjour,

    J'essaie de développer une application EJB 3.0

    J'ai une entity Bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    package fr.hh.com.persistence;
     
    import fr.hh.com.exception.ValidationException;
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;
    import javax.persistence.PrePersist;
    import javax.persistence.PreUpdate;
    import javax.persistence.FetchType;
    import javax.persistence.OneToOne;
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
     
    // #[regen=yes,id=DCE.7244A99D-CC04-7321-54F4-AAA965922125]
     
    // </editor-fold> 
     
    @Entity
    public class Utilisateurs extends PersonnePhysique implements java.io.Serializable{
     
        // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
        // #[regen=yes,id=DCE.4AA88341-4466-CACB-28D4-A1755B971FE9]
        // </editor-fold> 
        private String login;
     
        // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
        // #[regen=yes,id=DCE.E55BE869-A37F-7104-33EA-3486E8442E47]
        // </editor-fold> 
        private String mdp;
     
        // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
        // #[regen=yes,id=DCE.046C2A3F-4D0F-0343-CFED-6007DEE7D718]
        // </editor-fold> 
        @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        private Role mRole;
     
        /********************************
         *******Constructor*************
         ********************************/
        public Utilisateurs(){
            super();
        }
        public Utilisateurs(String login, String mdp, Role role){
            super();
            setLogin(login);
            setMdp(mdp);
            setMRole(role);
        }
     
         /********************************
         *******Methode de verification***
         ********************************/
        @PrePersist
        @PreUpdate
        private void validateData() {
            if (login == null || "".equals(login))
                throw new ValidationException("Login  invalide");
            if (mdp == null || "".equals(mdp) || mdp.length()<6)
                throw new ValidationException("Mot de passe  invalide");
        }
     
        /********************************
         *******GETTER and SETTER********
         ********************************/
        public String getMdp() {
            return mdp;
        }
     
        public void setMdp(String mdp) {
            this.mdp = mdp;
        }
     
        public String getLogin() {
            return login;
        }
     
        public void setLogin(String login) {
            this.login = login;
        }
     
        public Role getMRole() {
            return mRole;
        }
     
        public void setMRole(Role mRole) {
            this.mRole = mRole;
        }
     }
    Mon stateless
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package fr.hh.com.session;
     
    import fr.hh.com.exception.ValidationException;
    import fr.hh.com.persistence.Role;
    import fr.hh.com.persistence.Utilisateurs;
    import java.util.List;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
     
    /**
     *
     * @author Benjamin
     */
    @Stateless(name = "user", mappedName = "ejb/stateless/User")
    public class UtilisateursBean implements UtilisateursRemote {
     
        @PersistenceContext(unitName="HH-ejbPU")
     
        private EntityManager em;
     
        public Utilisateurs createUtilisateurs(Utilisateurs user, Role role) {
            if (user == null)
                throw new ValidationException("Utilisateur  est null");
     
            user.setMRole(role);
            em.persist(user);
     
            return user;
        }
     
        public Utilisateurs findUtilisateurs(Long idPersonne) {
            if (idPersonne == null)
                throw new ValidationException("id invalide");
     
            Utilisateurs user;
            user=em.find(Utilisateurs.class,idPersonne);
            return user;
        }
     
        public void deleteUtilisateurs(Utilisateurs user) {
            if (user == null)
                throw new ValidationException("Utilisateur  est null");
     
            // On supprime l'objet de la base de données
            em.remove(em.merge(user));
        }
     
        public Utilisateurs updateUtilisateurs(Utilisateurs user, Role role) {
           // On s'assure de la validité des paramètres
            if (user == null)
                throw new ValidationException("Utilisateur  est null"); 
          user.setMRole(role);
          // On modifie l'objet de la base de données
            em.merge(user);
            return user;
        }
     
        public List<Utilisateurs> findUtilisateurs() {
            Query query;
            List<Utilisateurs> user;
            // On modifie l'objet de la base de données
            query = em.createQuery("SELECT c FROM Utilisateurs c");
            user = query.getResultList();
            return user;
        }
    }
    Min interface Remote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package fr.hh.com.session;
     
    import fr.hh.com.persistence.Role;
    import fr.hh.com.persistence.Utilisateurs;
    import java.util.List;
    import javax.ejb.Remote;
     
    /**
     *
     * @author Benjamin
     */
    @Remote
    public interface UtilisateursRemote {
        /* creation utilisateur*/
        Utilisateurs createUtilisateurs(Utilisateurs user, Role role);
        /*trouver un utilisateur*/
        Utilisateurs findUtilisateurs(Long idPersonne);
        /*delete utilisateur*/
        void deleteUtilisateurs(Utilisateurs user);
        /*update*/
        Utilisateurs updateUtilisateurs(Utilisateurs user, Role role) ;
     
        List<Utilisateurs> findUtilisateurs() ;
    }
    Mon service Locator
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package fr.hh.com.locator;
     
    import fr.hh.com.exception.ServiceLocatorException;
    import java.util.HashMap;
    import java.util.Map;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.naming.Context;
    import javax.naming.InitialContext;
     
    /**
     *
     * @author Benjamin
     */
    public class ServiceLocator {
     
        private final String cname = this.getClass().getName();
        private Context initalContext;
        private Map<String, Object> cache;
        // ======================================
        // =             Singleton              =
        // ======================================
        private static final ServiceLocator instance = new ServiceLocator();
     
        public static ServiceLocator getInstance() {
            return instance;
        }
     
        private ServiceLocator() throws ServiceLocatorException {
            try {
                initalContext = new InitialContext();
                cache = new HashMap<String, Object>();
            } catch (Exception e) {
                throw new ServiceLocatorException(e);
            }
        }
     
        /* @param jndiName JNDI name of the EJB that we are looking for
         * @return the EJB Home corresponding to the homeName
         * @throws ServiceLocatorException thrown if lookup problems
         */
        public Object getRemoteInterface(String jndiName) throws ServiceLocatorException {
            String methodName = "getRemoteInterface";
     
            Object remoteInterface = getRemoteObject(jndiName);
            return remoteInterface;
        }
     
        private synchronized Object getRemoteObject(String jndiName) throws ServiceLocatorException {
            String methodName = "getObject";
     
     
            Object remoteObject = cache.get(jndiName);
            if (remoteObject == null) {
                try {
                    remoteObject = initalContext.lookup(jndiName);
                    cache.put(jndiName, remoteObject);
                } catch (Exception e) {
                    throw new ServiceLocatorException(e);
                }
            }
            return remoteObject;
        }
     
        public ConnectionFactory getConnectionFactory(String connFactoryName) throws ServiceLocatorException {
            String methodName = "getConnectionFactory";
     
            ConnectionFactory factory = (ConnectionFactory) getRemoteObject(connFactoryName);
            return factory;
        }
     
        public Destination getDestination(String destinationName) {
            String methodName = "getDestination";
     
            Destination destination = (Destination) getRemoteObject(destinationName);
            return destination;
        }
     
    }
    Mon Business delegate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    package fr.hh.com.delegate;
     
     
    import fr.hh.com.locator.ServiceLocator;
    import fr.hh.com.persistence.Role;
    import fr.hh.com.persistence.Utilisateurs;
    import fr.hh.com.session.UtilisateursRemote;
    import fr.hh.com.session.UtilisateursRemote;
    import fr.hh.com.session.UtilisateursRemote;
    import fr.hh.com.session.UtilisateursRemote;
    import java.util.List;
     
    /**
     * This class follows the Delegate design pattern. It's a one to one method
     * with the CustomerBean class. Each method delegates the call to the
     * CustomerBean class
     */
    public final class UtilisateursDelegate {
     
     
     
        public static Utilisateurs createUtilisateurs(Utilisateurs user, Role role) {
            return getUtilisateursRemote().createUtilisateurs(user, role);
        }
     
        public static Utilisateurs findUtilisateurs(Long idPersonne) {
            return getUtilisateursRemote().findUtilisateurs(idPersonne);
        }
     
        public static void deleteUtilisateurs(Utilisateurs user) {
            getUtilisateursRemote().deleteUtilisateurs(user);
        }
     
        public static Utilisateurs updateUtilisateurs(Utilisateurs user, Role role) {
            return getUtilisateursRemote().updateUtilisateurs(user,role);
        }
     
        public static List<Utilisateurs> findUtilisateurs() {
            return getUtilisateursRemote().findUtilisateurs();
        }
     
        // ======================================
        // =            Private methods         =
        // ======================================
        private static UtilisateursRemote getUtilisateursRemote() {
            UtilisateursRemote utilisateursRemote;
           utilisateursRemote = (UtilisateursRemote) ServiceLocator.getInstance().getRemoteInterface("ejb/stateless/User");
            return utilisateursRemote;
        }
    }
    Et mon fichier persistence xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="HH-ejbPU" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
    <class>fr.hh.com.Utilisateurs</class>
    <properties>
    <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/2h"/>
    <property name="toplink.jdbc.user" value="root"/>
    <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
    <property name="toplink.jdbc.password" value=""/>
    <property name="toplink.ddl-generation" value="drop-and-create-tables"/>
    </properties>
    </persistence-unit>
    </persistence>
    Comment je peux faire dans mon main pour tester la creation d'un utilisateurs??
    J'ai tenté ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    import fr.hh.com.delegate.UtilisateursDelegate;
    import fr.hh.com.persistence.Role;
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    import fr.hh.com.persistence.Utilisateurs;
     
    /**
     *
     * @author Benjamin
     */
    public class Main {
      /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
     
            Utilisateurs user =new Utilisateurs("bcoudou","azerty",Role.getRole("Laboratoire"));
            try {
                user = UtilisateursDelegate.createUtilisateurs(user, user
                        .getMRole());
                System.out.println("ok");
     
            } catch (Exception exc) {
               // System.out.println(exc);
               exc.printStackTrace();
            }
        }
     
    }
    J'obtiens une erreur suivante.
    init:
    deps-jar:
    compile-single:
    run-main:
    fr.hh.com.exception.ServiceLocatorException: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
    at fr.hh.com.locator.ServiceLocator.getRemoteObject(ServiceLocator.java:63)
    at fr.hh.com.locator.ServiceLocator.getRemoteInterface(ServiceLocator.java:49)
    at fr.hh.com.delegate.UtilisateursDelegate.getUtilisateursRemote(UtilisateursDelegate.java:47)
    at fr.hh.com.delegate.UtilisateursDelegate.createUtilisateurs(UtilisateursDelegate.java:23)
    at Main.main(Main.java:24)
    Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at fr.hh.com.locator.ServiceLocator.getRemoteObject(ServiceLocator.java:60)
    ... 4 more
    BUILD SUCCESSFUL (total time: 0 seconds)
    Je travailles sous Netbeans avec GlasshFish, Mysql.

    Pourriez vous me dire comment faire ou me guider? Merci d avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Il y a t il un probleme de ear? de fichier xml (ejb-jar.xml) ou encore de déploiement?

    Je bloques complètement.

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut
    tu devrais t'assurer de la présence du fichier "jndi.properties" dans la racine des sources, aussi tu devrais voir les logs du serveur d'application quand tu déploies vos ejb pour vérifier si la phase de déploiement s'est déroulé avec succès et sans exception, si ça ne marche pas pendant cette phase, inutile de créer le client ejb.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Citation Envoyé par issamki Voir le message
    tu devrais t'assurer de la présence du fichier "jndi.properties" dans la racine des sources, aussi tu devrais voir les logs du serveur d'application quand tu déploies vos ejb pour vérifier si la phase de déploiement s'est déroulé avec succès et sans exception, si ça ne marche pas pendant cette phase, inutile de créer le client ejb.
    meme pour ejb 3.0 ?

  5. #5
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut
    oui, le fichier "jndi.properties" sert au client qui va travailler par l'ejb de

    connaitre la machine où sont situés ces ejb...
    mais si tu veux avoir une instance d'un ejb dans une classe gérée par le conteneur,il te suffira de mettre l'annotation @EJB, aussi pour le nom jndi,je ne sais pas si c'est une différence entre les Serv d'APP, mais moi j'utilise dans jboss le nom "UtilisateurBean/remote" alors que je te vois faire /ejb/stateless/.. .

    comme je te l'ai dis auparavant,vérifie d'abord que tes ejb sont bel est bien déployés.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Citation Envoyé par issamki Voir le message
    oui, le fichier "jndi.properties" sert au client qui va travailler par l'ejb de

    connaitre la machine où sont situés ces ejb...
    mais si tu veux avoir une instance d'un ejb dans une classe gérée par le conteneur,il te suffira de mettre l'annotation @EJB, aussi pour le nom jndi,je ne sais pas si c'est une différence entre les Serv d'APP, mais moi j'utilise dans jboss le nom "UtilisateurBean/remote" alors que je te vois faire /ejb/stateless/.. .

    comme je te l'ai dis auparavant,vérifie d'abord que tes ejb sont bel est bien déployés.
    non ils ne sont pas bien déployés. Comment je peux faire pour qu il se deploient bien. ?

    Que dois je mettre dans le fichier jndi.properties?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Personne pour m aider?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] Comment lancer mon application
    Par Maria1505 dans le forum Langage
    Réponses: 7
    Dernier message: 18/12/2006, 23h42
  2. [VB.NET] Comment lancer une application externe dans ma Form
    Par afdmats dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/10/2006, 15h27
  3. Comment lancer une application qui a été développée sous Unix avec le navigateur IE
    Par diamonds dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 26/09/2006, 14h43
  4. Réponses: 9
    Dernier message: 18/07/2006, 14h48
  5. Réponses: 11
    Dernier message: 25/05/2006, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo