Y a-t-il un moyen de récupérer une session d'un pojo? Ou finalement pour récupérer un haricot d'un pojo. P>
Pour clarifier: P>
Fondamentalement, je crée un haricot d'un servlet et j'ai besoin d'accéder aux propriétés de cette haricot de l'extérieur du conteneur Web (d'un pojo). Je ne peux pas passer la demande au pojo; et la demande est nécessaire pour récupérer la session. P>
Plus spécifiquement, j'ai une application Web utilisant le cadre Cactus pour exécuter des tests Junit à partir d'une interface Web. Cependant, le servlet qui invoque le junit test Runner est compilé dans un pot; J'ai ajouté des menus de dépose supplémentaire pour modifier les paramètres d'un test JUnit à partir de la mise sous tension entre différents environnements (clusters WLI), étant donné que le servlet Runner est déjà compilé, je ne peux pas la modifier pour gérer les paramètres supplémentaires des environnements multiples. J'ai essayé l'approche de la persistance de l'écriture à un fichier .dat à laquelle le test Junit sera lu à titre de classe de lecture; Aussi, j'ai essayé l'approche de haricot qui n'était finalement pas accessible à partir du test Junit. P>
4 Réponses :
Un pojo est un ancien objet Java uni. Les pojos n'ont rien à voir avec des sessions. P>
La session HTTPS est disponible sur l'objet de la demande. P>
vérifier ceci p>
http: // Télécharger. oracle.com/docs/cd/e17802_01/webservices/webservices/docs/1.6/api/index.html P>
spécifiquement l'interface HTTPServLEQuest et la méthode de GetSession (). P>
pour la partie "haricot" de votre question. Un haricot est une classe Java qui est conforme à 3 normes. P>
Un pojo est un haricot s'il suit ces conventions. P>
Je veux dire récupérer une session Web générée à partir d'une session Web (à partir d'une sorte de demande) d'un pojo en dehors du conteneur Web. (Session ne vient pas du pojo bien sûr).
@Vapen un pojo en dehors du conteneur Web code> En aucun cas, vous devez persister les données certains où ou toute autre façon dont vous avez besoin de transférer des données
J'ai essayé l'approche de persistance en écrivant les paramètres à un fichier .DAT et j'ai rencontré une condition de course donnée des demandes simultanées pour accéder au fichier .dat.
@vapen, vous pouvez configurer un service Web de repos simple qui renvoie un XML / JSON / tout ce dont vous avez besoin pour obtenir les données dont vous avez besoin.
En supposant que vous faites référence à la programmation de servlet .... p>
Il n'y a pas de moyen direct de passer d'un pojo à la session. Vous devez obtenir la session de l'objet httpservletQuest. P>
Il y a 2 solutions populaires que j'ai vues pour traiter cela. p>
première option consiste à créer un objet de contexte de quelque sorte contenant la session. Ce contexte est ensuite transmis dans votre couche d'entreprise afin que vos pojos puissent obtenir ces informations si elles en ont besoin. p>
La deuxième option consiste à exploiter le stockage threadlocal. Souvent, la session est placée sur le stockage fillocal par un filtre ou un intercepteur. Ensuite, n'importe quel objet de votre système peut le récupérer dans le fil. Ce modèle apparaît dans beaucoup de cadres Web comme le printemps et les jambes de force. P>
J'ai besoin de l'objet contextuel pour être énorme et maintenir son état tout au long de la vie de la session et être mutable, est-ce possible?
Les solutions que j'ai offertes n'auraient accès que pendant la vie de la demande. Il serait possible d'accrocher une session et de stocker une référence à l'extérieur du cycle de vie de demande standard, mais je ne recommanderais vraiment pas cela. À ce stade, vous devenez voyagé à la manière dont votre conteneur de servlet gère les sessions. Pas vraiment où tu veux être. Pourriez-vous éventuellement reformuler votre question pour montrer ce que vous voulez faire à un niveau supérieur? Peut-être obtenir une référence à une session n'est pas la meilleure solution.
Merci, j'ai récemment édité ma question, pouvez-vous vérifier les nouvelles modifications. Je peux en outre expliquer les exigences si nécessaire :)
La session elle-même est remarquée et vous pouvez librement mettre tout ce que vous avez besoin. Utilise le. Ne construisez pas une deuxième session parallèle, vous finirez par le regretter.
oui, il y a. strong> Si vous utilisez un cadre Web, par exemple Wicket, il existe souvent un moyen d'obtenir le HTTPSession actuel. De là, vous pouvez obtenir l'application de printempsContext et si vous avez cela, vous pouvez obtenir des haricots de printemps. Cela fonctionne à n'importe quel endroit, à mesure que nous utilisons uniquement des méthodes utilitaires statiques. p> Notez cependant que le filtre à ressort et le filtre de guichet doivent être en place et gérer le courant Demander, sinon les méthodes utilitaires ne fonctionneront pas. P> Si vous ne vouliez pas vouloir les haricots de printemps, vous ne devez pas les stocker dans la session HTTP vous-même. Si vous n'avez pas de cadre Web, vous voudrez peut-être faire ce que RFeak em> suggère et implémente votre propre threadlocal. P> P>
"Object haricot = wac.getbean (" mybeanid ");" donnerait le haricot de la session en cours étant donné qu'il a une périmètre de session?
Non, pas un haricot de session, mais un haricot de printemps du contexte de l'application.
-1 Pour injecter le ressort dans la solution, il est toujours possible de créer des logiciels sans elle.
Seulement et seulement si votre pojo est en cours d'exécution dans le thread Créer la classe suivante: p> implémenter Notez l'importance de l'essai Déclaration de ressort. Il garantit que le et voici comment vous pouvez l'utiliser dans le pojo: p> httpservletQuest code> est en cours d'exécution, vous pourrez y parvenir avec l'aide de
ThreadLocal
javax.servlet.filter code>
, qui suit dans dofilter () code> méthode et est mappé sur un URL-motif code> d'intérêt, par exemple
/ * code> ou sur le nom du servlet code> de votre servlet de contrôleur avant. p>
YourContext # Fermer () code> sera appelé après que le filtre a effectué son travail et que la ressource
threadlocal code> sera effacée. Sinon, le thread le contiendra toujours lorsqu'il sera recyclé pour une autre requête HTTP. P>
YourContext context = YourContext.getCurrentInstance();
HttpSession session = context.getSession();
Merci, ça sonne bien. Quel paquet fait-il partie de la threadlocale modélisée? Le threadlocal natif JDK n'accepte pas les modèles.
Ok je l'ai trouvé dans JDK 6, j'utilise WLI 8, donc je suis limité à JDK 1.4, l'objet non modèles fonctionnera-t-il bien?
Le lien threadlocal
java.lang.threadlocal code> javadoc. Je ne suis pas sûr de ce que vous voulez dire avec des "modèles", mais si vous vous référez au paramètre de type générique
(contexte) code> le cas échéant. Comme l'indique Javadoc, le
ThreadLocal code> est disponible depuis 1.2.
Je suppose que cet objet de chaîne est de type filtre de type, où cet objet viendra-t-il?
C'est disponible en tant que dernier argument de dofilter () code> méthode. Voir aussi le Javadoc. Connaissez-vous aussi des filtres? Obtenez-vous-même dans notre page wiki .
Pouvez-vous s'il vous plaît élaborer un peu sur votre problème?
Décrivez votre problème mieux. Il est clair que vous avez une application Web qui manipule des données. Il semble que vous ayez besoin de le stocker, puis de le référer externe de l'application Web.
Ok voir ci-dessus mestituts, merci.