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

avec Java Discussion :

$Proxy0 cannot be cast to


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 12
    Points
    12
    Par défaut $Proxy0 cannot be cast to
    Bonjour!

    Je débute dans les EJB3. Je viens de faire une classe Entity très simple pour accéder à une table dans la base de données.
    J'ai un Bean session pour accéder à cet Entity.
    Et enfin, j'ai un client externe pour tester tout ça. Le serveur d'appli est Jonas (et tout se déploie bien).

    Le problème, c'est que quand je lance le client, il me sort l'erreur :
    Exception in thread "main" java.lang.ClassCastException: $Proxy0 cannot be cast to com.CPESessionBean
    at src.CPEHelloClient.main(CPEHelloClient.java:26)
    Voici les classes en question (tronquées):

    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
    @Stateful
    @Remote(CPESessionInterface.class)
    public class CPESessionBean implements CPESessionInterface
    {
    	@PersistenceContext(name="CPEPersistenceContext")
    	private EntityManager em; 
    	@EJB CPEBean cpe;
     
    	public void addCPE(String OUI, String Constructor, String Serial) 
    	{
    		cpe = new CPEBean();
    		cpe.setConstructor(Constructor);
    		cpe.setOUI(OUI);
    		cpe.setSerial(Serial);
     
    		em.persist(cpe);
    	}
    }
    Et le client :
    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
    public class CPEHelloClient 
    {	
    	 public static void main(String[] args)   
    	   {
    		   Hashtable<String, String> h = new Hashtable<String, String>();
    		   h.put("java.naming.factory.initial","org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory");	
    		   h.put("java.naming.provider.url","rmi://localhost:1099");
    		   h.put("java.naming.factory.url.pkgs", "org.objectweb.jonas.naming"); 		  
     
    		   /*InitialContext context = new InitialContext();
    		   ConnectionManager dataSource = (ConnectionManager)context.lookup("java:comp/env/jdbc/clientDB"+source);*/ 
     
    		  String JNDI_NAME = "com.CPESessionBean" + "_" + CPESessionInterface.class.getName() + "@Remote";
    		  try 
    	      {
    	    	 InitialContext context = new InitialContext(h);
    	         System.out.println("lookup " + JNDI_NAME);
    	         CPESessionBean beanRemote = (CPESessionBean) context.lookup(JNDI_NAME);	        
     
    	         beanRemote.addCPE("OhOUIAlors", "Builder", "Serialz");
    	         System.out.println(beanRemote.findByOUI("OUI"));
    	      } catch (NamingException e) 
    	      {
    	         e.printStackTrace();
    	         e.getRootCause();
    	      }
    	   }
     
    }
    Donc là je n'ai plus trop d'idée... je pense que le problème vient du client, mais je ne peux pas en être sûr...

    Merci d'avance pour votre aide!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Points : 135
    Points
    135
    Par défaut
    Salut,

    il faut que tu castes par rapport à l'interface et non la classe en direct. D'une manière générale, il faut privilégier les interfaces que les implémentations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CPESessionInterface beanRemote = (CPESessionInterface) context.lookup(JNDI_NAME);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Exact ! J'avais pensé à tout sauf à ça!
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/10/2009, 16h49
  2. Réponses: 3
    Dernier message: 30/09/2009, 11h36
  3. Réponses: 3
    Dernier message: 12/04/2009, 18h39
  4. Réponses: 2
    Dernier message: 21/07/2008, 14h53

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