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 :

Erreur CLI171 lors du déploy - débutant [EJB Stateful]


Sujet :

Java EE

  1. #1
    Invité
    Invité(e)
    Par défaut Erreur CLI171 lors du déploy - débutant
    Bonjour, je débute en java EE et je tente de réaliser un simple EJB stateful sans IDE.
    j'ai deux modules : un EJB et un client.
    mon module EJB contient les fichiers CalculRemote (interface) et CalculBean (implem) dont voici les codes :

    CalculRemote.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package calcul;
    import javax.ejb.Remote;
    @Remote
    public interface CalculRemote
    {
    	void addNombre(int a);
    	int getSomme();
    	int getMoyenne();
    	int getMinimum();
    	int getMaximum();
    }
    CalculBean.java
    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
    package calcul;
    import javax.ejb.Stateful;
    import java.util.*;
    @Stateful
    public class CalculBean implements CalculRemote
    {
    	private Vector v = new Vector();
    	public void addNombre(int a)
    	{
    		v.add(a);
    	}
    	public int getSomme()
    	{
    		int sum=0;
    		for (int i=0;i<v.size();i++)
    		{
    			if (v.elementAt(i)!=null)
    				sum=sum+Integer.parseInt((String)(v.elementAt(i)));
    		}
    		return sum;
    	}
    	public int getMoyenne()
    	{
    		int sum=0, cpt=0, avg=0;
    		for (int i=0;i<v.size();i++)
    		{
    			if (v.elementAt(i)!=null)
    			{
    				cpt++;
    				sum=sum+Integer.parseInt((String)(v.elementAt(i)));
    			}
    		}
    		avg=sum/cpt;
    		return avg;
    	}
    	public int getMinimum()
    	{
    		int j=0;
    		//on recup le premier elem du vec non nul
    		while (v.elementAt(j)==null)
    		{
    			j++;
    		}
    		int min=Integer.parseInt((String)(v.elementAt(j)));
    		//on passe tous elem suivants non nuls en revue
    		for (int i=j;i<v.size();i++)
    		{
    			if (v.elementAt(i)!=null)
    			{
    				if (Integer.parseInt((String)(v.elementAt(i)))<min)
    					min=Integer.parseInt((String)(v.elementAt(i)));
    			}
    		}
    		return min;
    	}
    	public int getMaximum()
    	{
    		int j=0;
    		//on recup le premier elem du vec non nul
    		while (v.elementAt(j)==null)
    		{
    			j++;
    		}
    		int max=Integer.parseInt((String)(v.elementAt(j)));
    		//on passe tous elem suivants non nuls en revue
    		for (int i=j;i<v.size();i++)
    		{
    			if (v.elementAt(i)!=null)
    			{
    				if (Integer.parseInt((String)(v.elementAt(i)))>max)
    					max=Integer.parseInt((String)(v.elementAt(i)));
    			}
    		}
    		return max;
    	}
    }
    et du coté du module client j'ai :

    Main.java
    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
    
    package calcul;
    import javax.ejb.EJB;
    public class Main
    {
    	@EJB
    	private static calcul.CalculRemote calculRemote;
    	public Main()
    	{
    	}
    	public static void main(String[] args)
    	{
    		// test de addnombre au vecteur
    		try
    		{
    			calculRemote.addNombre(3);
    			calculRemote.addNombre(21);
    			calculRemote.addNombre(111);
    			
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		// test getsomme (3+21+111 = 135!!!)
    		try
    		{
    			int res=0;
    			res=calculRemote.getSomme();
    			System.out.println("somme : " +res);
    			//test getmoyenne = 45!!
    			res=0;
    			res=calculRemote.getMoyenne();
    			System.out.println("moyenne : " +res);
    			//test getmin() = 3!!
    			res=0;
    			res=calculRemote.getMinimum();
    			System.out.println("minimum: " +res);
    			//test getmax() = 111!!
    			res=0;
    			res=calculRemote.getMaximum();
    			System.out.println("maximum : " +res);
    			System.out.println("fin des tests - ok");
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    			System.out.println("arret des tests - erreur");
    		}
    	}
    }
    
    j'ai compilé et empaqueté le module EJB et le module client et créé une archive .ear contenant ces deux modules et je veux donc déployer avec glassfish v2 UR2 et lors du déployement j'obtiens l'erreur suivante :

    "Deploying application in domain failed; Error loading deployment descriptors for module [applictest2part2] -- No matching injection setter method or injection field found for injection property CalculRemote on class calcul.Main for component dependency Unresolved Ejb-Ref calcul.Main/CalculBean@jndi: @null@calcul.CalculRemote@Session@ejb-labo1.jar#CalculBean"

    Voila je ne vois pas d'ou peut venir mon erreur, si quelqu'un à une idée?

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 83
    Points
    83
    Par défaut
    J'ai deux remarques:
    - Si j'ai bien compris vous essayez de déployer de client (classe Main). Pourquoi voulez vous faire cela ?
    Le client, comme vous l'avez écrit (Main.java), est fait pour est exécute dans un environnement non administré donc vous ne "devez" pas le mettre sur le serveur.
    - dans votre client, en aucun moment, vous ne récupérez l'instance de l'EJB. Ca c'est un autre problème. Vous auriez un nullPointer en essayant de lancer le client.
    Comme vous serez hors, conteneur, il faudrait utiliser un appel JNDi pour récupérer un proxy sur une instance de votre Stateless.

    Pour vôtre premier test, je vous conseille de suivre un tutorial. http://www.eclipsetotale.com/article...c_Eclipse.html

  3. #3
    Membre à l'essai
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Ce code est parfaitement valide, enfin presque, j'ai une erreur a cette ligne:
    sum = sum + Integer.parseInt((String) (v.elementAt(i)));
    ==> Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    at calcul.CalculBean.getSomme(CalculBean.java:20)
    Je conseille d'abord d'ecrire un test unitaire de cette classe, utiliser les generics (private Vector<String> v = new Vector<String>(), etc...

    L'erreur CLI171 est certainement lie a un probleme de deploiement. Cela peut etre le mot de passe admin ou n'importe quoi d'autre. Il est vrai que travailler sans IDE est plus difficile, de mon cote je conseille de jetter un oeil sur les tutoriels de ce site, en particulier NetBeans,

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par salber Voir le message
    J'ai deux remarques:
    - Si j'ai bien compris vous essayez de déployer de client (classe Main). Pourquoi voulez vous faire cela ?
    Le client, comme vous l'avez écrit (Main.java), est fait pour est exécute dans un environnement non administré donc vous ne "devez" pas le mettre sur le serveur.
    - dans votre client, en aucun moment, vous ne récupérez l'instance de l'EJB. Ca c'est un autre problème. Vous auriez un nullPointer en essayant de lancer le client.
    Comme vous serez hors, conteneur, il faudrait utiliser un appel JNDi pour récupérer un proxy sur une instance de votre Stateless.

    Pour vôtre premier test, je vous conseille de suivre un tutorial. http://www.eclipsetotale.com/article...c_Eclipse.html
    D'un point de vue logique, je sais que cela est mauvais, mais je me base sur les instructions données par l'enseignant. Néanmoins l'exemple est bien fonctionnel, même si le client est inclus dans l'archive à déployer. Une fois celle-ci déployée, l'exercice prévoit une partie pour rappatrier le client sur une machine host.
    En ce qui concerne l'instance de l'EJB,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static calcul.CalculRemote calculRemote;
    je pense que c'est ça...
    Mais merci quand même pour ces précisions!

    Citation Envoyé par psecheresse Voir le message
    Ce code est parfaitement valide, enfin presque, j'ai une erreur a cette ligne:
    sum = sum + Integer.parseInt((String) (v.elementAt(i)));
    ==> Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    at calcul.CalculBean.getSomme(CalculBean.java:20)
    Je conseille d'abord d'ecrire un test unitaire de cette classe, utiliser les generics (private Vector<String> v = new Vector<String>(), etc...

    L'erreur CLI171 est certainement lie a un probleme de deploiement. Cela peut etre le mot de passe admin ou n'importe quoi d'autre. Il est vrai que travailler sans IDE est plus difficile, de mon cote je conseille de jetter un oeil sur les tutoriels de ce site, en particulier NetBeans,
    En effet l'erreur CLI171 n'était nullement liée au code ou à la logique mais aux fichiers XML que j'utilisais pour les étapes d'empaquetage.
    Concernant le code, en effet, sum = sum + Integer.parseInt((String) (v.elementAt(i))); est mauvais =>
    sum = sum + Integer.parseInt(v.elementAt(i).toString()); fonctionne
    sum = sum + Integer.parseInt(v.get(i).toString()); est encore meilleur car elementAt est deprecated.

    Après plusieurs heures de recherche supplémentaire, mon exercice est finalement fonctionnel...Merci tout de même pour votre aide

  5. #5
    Membre à l'essai
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Yargggg...
    sum = sum + Integer.parseInt(v.elementAt(i).toString()); fonctionne
    sum = sum + Integer.parseInt(v.get(i).toString()); est encore meilleur car elementAt est deprecated.
    v contient deja des Integer, il n'y a pas besoin de convertir dans tous les sens puisqu'on utilise Java 5 minimum (autoboxing). Le vecteur peut etre declare Vector<Integer> (generic). Cela donne
    sum = sum + v.get(i), c'est tellement plus beau.
    Faut arreter de programmer comme papy

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

Discussions similaires

  1. [débutant]Erreur 1502 lors de la création d'un exe
    Par roroteamkart dans le forum LabVIEW
    Réponses: 2
    Dernier message: 07/08/2012, 12h33
  2. Réponses: 15
    Dernier message: 16/09/2004, 09h37
  3. [ACCESS] [JET] [ADO] Erreur 3000 lors d'un update
    Par Benjamin GAGNEUX dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/08/2004, 21h16
  4. Question facile, erreur bizzare lors d'un Left, Top
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2004, 12h56
  5. Erreur windows lors du malloc
    Par Elessar dans le forum C
    Réponses: 5
    Dernier message: 16/12/2003, 08h53

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