Tout d'abord bonjour à tous et bonnes fêtes de fin d'année.

Mon problème se situe donc dans le cadre du développement d'une application J2EE qui dispose d'un module EJB et de trois modules clients. Lorsque j'ai créé mon projet dans Netbeans, il m'a créé l'EAR, le module EJB ainsi qu'un module client. J'ai par la suite créé deux autres modules clients que j'ai ajouté au projet comme il faut. J'ai de même ajouté une Java Class Library au projet pour contenir les interfaces distantes pour contacter les beans de session (une interface distante par application cliente).

Ma première application cliente, appelons-la MY-app1 (pour faire original !), est fonctionnelle et a été totalement développée (je rappelle que c'est celle qui a été créée avec le projet). Une fois celle-ci terminée, je suis donc allé dans les propriétés de mon EAR pour changer l'application à exécuter à son lancement par MY-app2 pour commencer le développement de celle-ci. Manque de pot, une erreur apparaît (alors qu'il n'y a rien dans le main de MY-app2 !), et je ne suis pas en mesure de trouver pourquoi, ni comment la corriger et pouvoir continuer mon travail. Cette erreur concerne MY-app1 (alors que cette application ne devrait pas être utilisée dans ce cas, non ?), la voici donc :

java.lang.RuntimeException: No matching injection setter method or injection field found for injection property pouet on class fr.package.defaut.Main for component dependency Remote ejb-ref name=fr.package.defaut.Main/pouet,Remote 3.x interface =fr.package.sessions.PouetRemote,ejb-link=MY-ejb.jar#Pouet,lookup=null,mappedName=,jndi-name=java:global/MY/MY-ejb/Pouet!fr.package.sessions.PouetRemote,refType=Session
at com.sun.enterprise.deployment.util.DefaultDOLVisitor.acceptWithCL(DefaultDOLVisitor.java:363)
at com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:188)
at com.sun.enterprise.deployment.ApplicationClientDescriptor.visit(ApplicationClientDescriptor.java:657)
at com.sun.enterprise.deployment.archivist.AppClientArchivist.validate(AppClientArchivist.java:168)
at org.glassfish.appclient.client.acc.FacadeLaunchable.validateDescriptor(FacadeLaunchable.java:175)
at org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:350)
at org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:311)
at org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:264)
at org.glassfish.appclient.client.acc.agent.AppClientContainerAgent.premain(AppClientContainerAgent.java:75)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)
Caused by: java.lang.NoSuchFieldException: pouet
at java.lang.Class.getDeclaredField(Class.java:1882)
at com.sun.enterprise.deployment.util.DefaultDOLVisitor.acceptWithCL(DefaultDOLVisitor.java:350)
... 14 more
Java Result: 1
Pour faciliter la lecture de l'erreur, j'ai mis en gras les éléments faisant référence à mon application:
- fr.package.defaut.Main est ma classe principale
- pouet est ma variable privée statique de type PouetRemote précédée de la mention @EJB
- Pouet est mon bean de session, et PouetRemote l'interface distante qui lui est associée
- Pouet est donc dans mon module MY-ejb, tandis que PouetRemote est dans la Java Class Library MY-RemoteInterfaces.

J'espère avoir été clair dans mon message, mais n'hésitez pas à poser des questions s'il manque quelque chose ! J'espère que quelqu'un pourra m'aider à sortir de cette impasse ...

Merci par avance