Injection JSF d'EJB à grains gérés
J'ai un EJB (PersonManager) dans l'Application d'Entreprise modul, qui injecte un autre EJB (Personne):
@Stateful
public class PersonManager implements PersonManagerLocal {
@EJB
private PersonLocal person;
@Override
public void setPersonName(String name) {
person.setName(name);
}
@Override
public String getPersonName() {
return person.getName();
}
}
Je veux utiliser le PersonManager EJB dans une application web JSF. Je le définir dans le faces-config.xml:
<managed-bean>
<managed-bean-name>personManager</managed-bean-name>
<managed-bean-class>ejb.PersonManager</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Le problème est que, l'injection de la PersonLocal EJB n'arrive pas. La personne de la propriété est toujours NULL. Qu'ai-je tort?
Mais si j'ai injecter le PersonManager dans un managed bean JSF comme ceci:
@ManagedBean
@RequestScoped
public class Index {
@EJB
private PersonManagerLocal personManager;
....
IL FONCTIONNE. J'ai besoin de le premier scénario, s'il vous plaît aider moi 😀
source d'informationauteur Forty
Vous devez vous connecter pour publier un commentaire.
Vous mélangez les responsabilités des Ejb et JSF géré les haricots. Le
faces-config.xml
seuls registres de JSF artefacts, comme la gestion de haricots et de ne pas les Ejb. Votre inscription dansfaces-config.xml
fait exactement la même chose que
En d'autres termes, vous êtes l'enregistrement de la classe comme un managed bean JSF qui est disponible dans les vues par
#{personManager}
. Il ne s'agit pas de la même instance que est géré par le conteneur d'EJB. Vous pouvez et devriez pas utilisationfaces-config.xml
pour enregistrer les Ejb. Là, vous utilisez les annotations de lajavax.ejb
paquet, comme@Stateless
et@Stateful
. C'est tout, vous devez créer un EJB.En fait, l'enregistrement de JSF géré les haricots dans
faces-config.xml
est un vieux JSF 1.x qui a en JSF 2.x été remplacé par le nouveau@ManagedBean
annotation.Mise à jour la bonne approche serait:
Vue (la Facelets fichier):
Contrôleur (le JSF managed bean):
Modèle (l'entité JPA):
Service (EJB stateless):