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 :

EJBException in Business Interface.


Sujet :

Java EE

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut EJBException in Business Interface.
    Bonjour,
    Je souhaite faire marcher un programme d'authentification dans une application Ecommerce. J'ai un serveur JOnAS qui tourne, un bean d'authentification authBean:
    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
    package ecom.beans;
    import javax.ejb.Remote;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
     
    @Stateless()
    @Remote(AuthBeanInterface.class)
    public class AuthBean implements AuthBeanInterface {
     
    	@PersistenceContext
    	private EntityManager entityManager = null;
     
    	public boolean authCustomer(String email, String password)
    		{
     
    			CustomerBean cb = entityManager.find(CustomerBean.class, email);
    			if (cb.password==password){
    				return true;
    			} else {
    				return false;
    			}		
    	    }  
    }
    avec son interface associée. Avec un bean Entité CustomerBean qui a deux attributs, email et password, qui vont servir d'authentification pour l'utilisateur. Ce sont des String. Puis un bean CustomerBeanCentral qui centralise les méthodes. J'ai donc rajouté dedans un appel vers le bean d'authentification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	@Override
    	public boolean authCustomer(String email, String password) {
     
    		AuthBean auth = new AuthBean();
    		return auth.authCustomer(email, password); }
    Puis un bean shell dans lequel je fais les traitements restants et j'ai un retour dans mon terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    case 7:
    System.out.println("Entrez votre email : ");
    String email = Tx.readString();	        		
    System.out.println("Entrez le mot de passe du compte : ");
    String mdp = Tx.readString();			        		
     
    if (CustomerBeanCentral.authCustomer(email,mdp)){
    	System.out.println("Mot de passe VALIDE"); 
    }
    else {
    	System.out.println("Informations incorrectes !");
    }
    J'ai une entrée dans la BD MySQL avec par exemple "david@gmail.com" comme user "david" comme mot de passe.
    Quand je rentre les deux dans mon shell j'ai une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [java] javax.ejb.EJBException:  Exception in a business internface with REQUIRED TX attribute....
    par contre si je met le code du bean AuthBean dans CustomerBeanCentral tout fonctionne bien!
    Avez vous une idée du problème ??
    merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par mihaesti Voir le message
    Puis un bean CustomerBeanCentral qui centralise les méthodes. J'ai donc rajouté dedans un appel vers le bean d'authentification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public boolean authCustomer(String email, String password) {
    
    		AuthBean auth = new AuthBean();
    		return auth.authCustomer(email, password); }
    ....

    par contre si je met le code du bean AuthBean dans CustomerBeanCentral tout fonctionne bien!
    Avez vous une idée du problème ??
    Le problème c'est qu'au niveau du code que j'ai mis en gras, tu instancies directement la classe AuthBean au lieu de laisser le container s'occuper de l'instanciation de tes ejb. Du coup, pas moyen pour le container de lancer une transaction à l'appel des méthodes de ton ejb AuthBean, car l'attribut de transaction est REQUIRED par défaut en ejb3.
    Utilise l'injection de dépendance pour injecter l'ejb AuthBean dans ton ejb CustomerBeanCentral de manière transparente sans que tu n'aies rien d'autre à faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class CustomerBeanCentral implements ...{
          @EJB
           private AuthBeanInterface auth;
           ....
    }
    Et tant qu'on y est, il vaut mieux utiliser l'interface locale de l'ejb AuthBean pour l'injection dans CustomerBeanCentral.

    Voilà, j'espère que ça aide.
    SCJP 5 / SCBCD 1.3 Certified

Discussions similaires

  1. Réponses: 24
    Dernier message: 18/12/2009, 14h25
  2. Interfacer Compiere avec solution de Business Intelligence
    Par aboualhassen dans le forum Autres ERP
    Réponses: 0
    Dernier message: 16/12/2008, 17h24
  3. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  4. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  5. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27

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