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 :

Appel d'EJB 3 sur Jboss 4.2.3 GA


Sujet :

Java EE

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Appel d'EJB 3 sur Jboss 4.2.3 GA
    Bonjour à tous,

    Je viens vers vous car je n'arrive pas à utiliser un EJB3 malgré lecture de nombreux tutoriel. J'ai 2 erreurs suivant la méthode que j'utilise

    Mon EJB et le client tourne sur la même machine pour le moment.

    Voici tout d'abord la structure du projet contenant les EJB :

    EJB_API

    - com....... IOrganizationDAO -> mon interface
    - com........OrganizationDAO -> mon ejb

    voici le code de mon interface :

    package com.ste.pris.organization.dao.api;

    import java.util.List;

    import javax.ejb.Local;
    import com.ste.pris.organization.model.api.IProductBu;
    import com.ste.pris.organization.model.api.IProductDivision;
    import com.ste.pris.organization.model.api.IProductGroup;

    @Local
    public interface IOrganizationDAO {

    IProductGroup getIProductGroup(String code);

    IProductDivision getIProductDivision(String code);

    IProductBu getIProductBu(String code);

    List<IProductGroup> getAllIProductGroup();

    List<IProductDivision> getAllIProductDivisionFromGrp(String grpCode);

    List<IProductBu> getAllIProductBuFromDiv(String divCode);

    }
    Voici le code de mon ejb :
    package com.ste.pris.organization.dao.impl;

    import java.util.List;

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

    import com.ste.pris.organization.dao.api.IOrganizationDAO;
    import com.ste.pris.organization.model.api.IProductBu;
    import com.ste.pris.organization.model.api.IProductDivision;
    import com.ste.pris.organization.model.api.IProductGroup;
    import com.ste.pris.organization.model.impl.ProductBu;
    import com.ste.pris.organization.model.impl.ProductDivision;
    import com.ste.pris.organization.model.impl.ProductGroup;

    @Stateless
    public class OrganizationDAO implements IOrganizationDAO {

    @PersistenceContext
    private EntityManager entityManager;

    public OrganizationDAO(){}

    public OrganizationDAO(EntityManager entityManager){
    this.entityManager = entityManager;
    }

    @Override
    public IProductGroup getIProductGroup(String code){
    return entityManager.find(ProductGroup.class,code);
    }

    @Override
    public IProductDivision getIProductDivision(String code){
    return entityManager.find(ProductDivision.class,code);
    }

    @Override
    public IProductBu getIProductBu(String code){
    return entityManager.find(ProductBu.class,code);
    }

    @SuppressWarnings("unchecked") @Override
    public List<IProductGroup> getAllIProductGroup(){
    return (List<IProductGroup>) entityManager.createQuery("From ProductGroup p Where p.activityStatus != '90' ").getResultList();
    }

    @SuppressWarnings("unchecked") @Override
    public List<IProductDivision> getAllIProductDivisionFromGrp(String grpCode){
    return (List<IProductDivision>) entityManager.createQuery("From ProductDivision p Where p.activityStatus != '90' and p.productGroup = '"+grpCode+"'").getResultList();
    }

    @SuppressWarnings("unchecked") @Override
    public List<IProductBu> getAllIProductBuFromDiv(String divCode){
    return (List<IProductBu>) entityManager.createQuery("From ProductBu p Where p.activityStatus != '90' and p.productDivision = '"+divCode+"'").getResultList();
    }

    }
    Ce projet une fois compilé avec Maven me donne 2 jar :
    pris_api-1.0.jar contenant les interfaces + les ejb
    et une version cliente me donnant que les interface :
    pris_api-1.0-client.jar

    Voici les 2 essais coté client

    package com.ste.crw.bean.form;

    import javax.ejb.EJB;
    import org.jboss.seam.ScopeType;
    import org.jboss.seam.annotations.AutoCreate;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.annotations.Scope;
    import org.jboss.seam.annotations.Startup;
    import com.ste.pris.organization.dao.api.IOrganizationDAO;

    @Name("TestBean")
    @Scope(ScopeType.SESSION)
    @AutoCreate
    @Startup
    public class TestBean {

    @EJB
    private IOrganizationDAO organization;

    public void test(){

    try {
    //InitialContext ctx = new InitialContext();
    //IOrganizationDAO organization = (IOrganizationDAO) ctx.lookup("OrganizationDAO/local");
    System.out.println(organization.getIProductGroup("11").getDescr());
    } catch (Exception e){
    e.printStackTrace();
    }

    }

    }
    Celui ci me donne un nullPointerException sur la ligne du print.
    Je précise que le jar déployé sur le seveur me monte bien l'EJB et le nomme : OrganizationDAO

    J'ai donc essayé plusieurs annotation tel que :

    @EJB(name="OrganizationDAO/local")
    @EJB(beanName="OrganizationDAO/local")
    @EJB(mappedName="OrganizationDAO/local")
    Ceci ne change rien , toujours Null Pointeur

    Le deusième essais réalisé était le suivant :

    package com.ste.crw.bean.form;

    import javax.ejb.EJB;
    import org.jboss.seam.ScopeType;
    import org.jboss.seam.annotations.AutoCreate;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.annotations.Scope;
    import org.jboss.seam.annotations.Startup;
    import com.ste.pris.organization.dao.api.IOrganizationDAO;

    @Name("TestBean")
    @Scope(ScopeType.SESSION)
    @AutoCreate
    @Startup
    public class TestBean {

    public void test(){

    try {
    InitialContext ctx = new InitialContext();
    IOrganizationDAO organization = (IOrganizationDAO) ctx.lookup("OrganizationDAO/local");
    System.out.println(organization.getIProductGroup("11").getDescr());
    } catch (Exception e){
    e.printStackTrace();
    }

    }

    }
    Le résultat obtenu est un ClassCastException $proxy.......

    Je precise que le jar client à été utilisé pour compiler avec maven pour projet client

    Avez vous une idée de comment résoudre se problème

    Merci d'avance

    Leod

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    J'ai enfin trouvé !

    Pour ceux qui aurait le même problème :

    Si vous générez un jar client possédent les interfaces de l'EJB, il ne faut pas que le jar contenant les EJB ai également les interfaces.

    En gros les interfaces ne doivent être qu'une seul fois dépoyé sur le serveur
    Sinon ClassCastException !

    Merci à tous en tout cas pour vos réponses constructive :p

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut injection EJB3
    Juste deus petites précisions à ton problème :
    1. dans jboss 4.2.x, on ne peut pas injecter directement des EJB dans des managed bean. En effet, jboss 4.2.x n'est pas un serveur jee5, mais un serveur j2ee 4 avec un support des ejb3.
    2. En général, on déploie le jar contenant les interfaces et les ejb dans jboss. Le second jar, qui contient juste les interfaces sert pour les clients effectuant des appels "remote" vers ton serveur

  4. #4
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 74
    Points : 88
    Points
    88
    Par défaut Interface Remote
    Tes EJBs devraient proposer des interfaces remote. Ce sont sur ces interfaces que tes clients devront faire un lookup ou faire une injection.
    Le fichier jndi.properties sur les clients, definira les parametres de ton serveur contenant les EJBs.
    Ocelotds : java/javascript communication framework
    https://github.com/ocelotds/ocelot
    JEE7, EJB 3.X, JPA 2.X, Servlet 3.X, CDI 1.1, Websocket, JAX-RS....
    Netbeans 8 - Glassfish 4.x

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Merci pour ces précisions, je vais en tenir compte

    Par contre j'en ai une autre plus simple je pense :

    J'arrive maintenant très bien à récupérer mes objets via ces EJB, ils viennent charger des listes de choix sur une interface web , des champs etc....

    L'utilisateur à la possibilité de sauvegarder et recharger des formulaires.

    Je me demandais donc si il était possible de sauver avec hibernate les objets récupéré depuis mes EJB via un autre entity manager ?

    En faite actuellement chaque formulaire est défini avec un classe qui possède un entity que je persiste.
    cette classe ne possède que des String comme paramètre
    Je voudrai maintenant passer au niveau supérieur en persistant non plus le code de l'objet mais l'objet lui même afin de nettoyer mon code et le rendre plus naturel

    Comment puis je faire ?

    J'ai essayé de simplement déclarer dans mon entity par exemple

    private IProductBu toto;

    IProductBu viens de mon EJB et je n'arrive pas à le persister

    Merci d'avance pour vos réponses

    Leod

Discussions similaires

  1. [EJB] Déployer un EJB sur JBoss
    Par flashwhite dans le forum Java EE
    Réponses: 1
    Dernier message: 29/06/2012, 13h37
  2. Réponses: 3
    Dernier message: 09/06/2010, 10h58
  3. Appel ejb déployé sur Websphere
    Par polo54 dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 04/12/2007, 08h47
  4. [EJB3] Deployer sur JBOSS un EJB(3.0) avec Oracle
    Par metalpetsFR dans le forum Wildfly/JBoss
    Réponses: 11
    Dernier message: 16/08/2007, 09h42
  5. Documentation, tutoriel sur JBoss et les EJB
    Par elitost dans le forum Wildfly/JBoss
    Réponses: 6
    Dernier message: 30/01/2007, 06h10

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