Instanciation de portée d'application JSF et injection
Probablement ma question est triviale, mais je n'ai jamais utilisé une application champ d'application de haricot avant. J'ai besoin de l'application de haricots parce que j'ai à faire, beaucoup de temps de transactions sur la base de données.
ma recherche n'a satisfaire ma curiosité.
Je ne sais pas pourquoi, mais je n'ai pas réussi à s'initialiser le haricot (elle est nulle) ou de l'application s'est écrasé.
Donc, j'ai une demande à portée de haricots
@ManagedBean(eager=true)
@ApplicationScoped
public class ApplicationContainer {
...
}
désireux=vrai, j'ai lu que dit JSF pour lancer le haricot à chaque fois lorsque le serveur d'application (j'ai utiliser GlassFish) est démarré.
J'ai lu à plusieurs endroits que je viens de mettre cette annotation et le haricot est initialisé.
Pour moi il n'est pas...
Après j'ai lu que si je veux injecter de l'application de haricot dans un autre bean-je utiliser @PostConstuct annotation
@ManagedBean
@SessionScoped
public class TestsBean implements Serializable {
private static final long serialVersionUID = 1L;
@ManagedProperty(value = "#{container}")
private ApplicationContainer container;
@PostConstruct
public void init() {
container.contructContainer();
}
cela donne une erreur dans d'autres bean que j'ai injecter le TestsBean en...
- si l'application de haricot est initialisé lorsque le serveur démarre quelle méthode fait appel dans le corps de l'application de la fève à faire les gestes qu'il nécessite? Ou dans le bean injecté c'est fait dans le post de construire la méthode?
Merci de m'indiquer la bonne façon de gérer l'application des haricots. J'ai un vraiment confus...
Merci à vous tous pour votre temps!
source d'informationauteur CyberGriZzly
Vous devez vous connecter pour publier un commentaire.
Il y a 2 erreurs potentielles.
Tout d'abord, le
@ManagedBean(eager=true)
œuvres, comme sa javadoc dit, qu'à la demande d'étendue de JSF géré les haricots. Donc, il ne fonctionne que si vous avez utilisé@ApplicationScoped
dejavax.faces.bean
paquet (et donc pasjavax.enterprise.context
paquet!). Leeager=true
signifie essentiellement que le bean sera automatiquement instanciés webapp de démarrage au lieu de seulement plus tard, quand il est référencé pour la première fois en EL.Deuxième, le managed bean nom par défaut de la classe dans decapitalized forme selon la spécification Ejb. Vous n'avez pas à spécifier explicitement un bean géré nom comme
@ManagedBean(name="container", eager=true)
de sorte que le managed bean nom par défaut seraapplicationContainer
cependant, pourtant, vous êtes toujours essayer de le référencer comme#{container}
au lieu de#{applicationContainer}
.Vous ne sont pas claires à tous les problèmes/erreurs que vous faites face. Si vous obtenez une exception, vous devez absolument lire/interpréter et si vous êtes incapable de le comprendre, copypaste dans son ensemble-y compris la stacktrace - dans la question. Il représente, à savoir l'ensemble de la réponse à votre problème à sa propre. Vous avez juste à les interpréter et les comprendre (ou nous avons juste à les expliquer en termes simples). Vous devrait vraiment pas de les ignorer et de les laisser sortir de la question, comme si elles ne sont pas pertinentes de la décoration. Ils ne sont pas!
Tous avec tous, la complète et la bonne approche serait, complet avec les déclarations d'importation juste pour être sûr, et aussi le pauvre homme stdout imprime pour le débogage: