2015-08-31 1 views
0

Lorsque vous essayez de jeter un Bean i obtenu par InitialContext # recherche() je reçois un ClassCastException comme ceci:ClassCastException pour Bean à distance sur Glassfish 3.1.2.2

java.lang.ClassCastException: EJB31_Generated__MyTestBean__Intf____Bean__ cannot be cast to ... 

ou

java.lang.ClassCastException: com.sun.proxy.$Proxy338 cannot be cast to de.package.name.beans.YourBeanInterface 

où MyTestBean est le haricot que j'essaye d'accéder.

Les deux applications s'exécutent sur le même serveur Web. MyTestBean implémente une interface annotée avec @ javax.ejb.Remote. Je reçois un objet de la recherche et j'ai vérifié par

logger.e(Arrays.toString(o.getClass().getInterfaces())); 
logger.e(Arrays.toString(o.getClass().getMethods())); 

qu'il ne fait mettre en œuvre cette interface très et a même les méthodes. Je peux même invoquer les méthodes avec succès par la réflexion.

Répondre

0

Je n'ai aucune idée de ce qui l'a résolu à la fin et n'a pas pu le retrouver. Mais voici quelques choses que j'appris et qui pourrait être suivi utile dans cette problématique:

  • Vous pouvez laisser votre « Remote » -Interface étendent à partir de Serializable et fournir une serialVersionUID. Cela ne semble pas nécessaire cependant.
  • Lors de l'utilisation du plugin maven war, assurez-vous que vous n'avez pas défini la propriété archiveClasses sur true. Ou si vous l'avez fait, assurez-vous que votre beans.xml est au bon endroit (src \ main \ resources \ META-INF?)
  • Assurez-vous d'utiliser l'interface jndi nom du bean. C'est à dire. : ctx.lookup ("java: global/youarpp/YourBean! de.package.name.beans.YourBeanInterface"); - pas la mise en œuvre.
  • Assurez-vous d'utiliser le bon @ javax.inject.Singleton ou @ javax.ejb.Singleton, voir http://germanescobar.net/2010/04/4-areas-of-possible-confusion-in-jee6.html quelques explications plus
  • Vous pourriez avoir à utiliser @LocalBean si vous voulez injecter la mise en œuvre (non seulement la interface) dans l'application où il est défini
  • en général si le comportement semble étrange, essayez d'arrêter/start-domain et effacer tous les dossiers de l'instance de glassfish de temps en temps (applications, générées, osgi-cache)