IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Sérialisation, Transient et ObjectOutputStream


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Par défaut Sérialisation, Transient et ObjectOutputStream
    Bonjour,

    Je souhaiterai un peu d'aide avec un problème sur lequel je bloque depuis 2 jours...
    Alors voilà, mon projet est la création d'une servlet qui fera office de pool de connections Essbase. J'ai donc dévellopé une classe qui permet de request une session à la servlet qui s'occupera de la créer.

    Le truc c'est qu'avec la JAPI Essbase, la connection créé est un objet que je dois renvoyer à la classe client pour qu'elle puisse l'utiliser (Cela permet de ne pas divulguer de mots de passes). Je ne peux donc modifier le code source de cet objet généré par la JAPI.

    Mon problème est que pour renvoyer cet objet obtenu par la servlet, je dois le sérialiser pour pouvoir l'envoyer par une méthode POST. J'utilise donc Xstream sans trop de soucis pour l'envoyer. J'obtient donc ce que je voulais : mon objet de connection dans ma classe client.. Mais oh surprise, l'objet n'est plus valide ! Alors je décompile la JAPI pour voir ce qui n'était pas sérialisé, et je trouve 5 fields qui sont noté en "transient" et qui par conséquent ne sont pas sérialisés.

    Donc ma question est : comment forcer la sérialisation des champs noté transient par Xstream ou équivalent... ? sachant que je ne peux pas modifier la classe objet et donc je ne peux pas initialiser l'objet avec un ReadResolve()

    Merci d'avance !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Il n'y a rien de surprenant à ce qu'un objet de ce genre ne puisse pas être sérialisé... Les applications ne peuvent pas se passer des objets Connection ou ce genre d'états internes les unes aux autres.

    Si ta servlet crée les connections, alors c'est elle qui les utilise. Les autres doivent passer par ta servlet pour s'en servir.
    Rien ne t'empêche de créer par un exemple un objet PseudoConnection qui consiste en fait à contacter ta servlet pour qu'elle utilise une de ses connexions pour faire la requête correspondante.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 13
    Par défaut
    Merci pour la rapidité de la réponse,

    J'ai déjà envisagé cette solution mais le problème c'est que les requetes sont bien trop grosses et il y en a plusieurs dizaines par minutes, donc beaucoup trop de requetes HTTP pour la servlet et beaucoup trop lent...

    Il n'y aurai t-il pas moyen de modifier le code source de Xstream pour lui faire ignorer les annotations transient ?

    ou existe t-il un autre moyen de passer un objet entre une servlet et une classe/applet/jsp autre que POST ou HTTP ? peut etre de façon binaire ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Citation Envoyé par Ethan0026 Voir le message
    Il n'y aurai t-il pas moyen de modifier le code source de Xstream pour lui faire ignorer les annotations transient ?

    ou existe t-il un autre moyen de passer un objet entre une servlet et une classe/applet/jsp autre que POST ou HTTP ? peut etre de façon binaire ?
    La représentation binaire de l'objet serait correctement passée, mais elle n'aurait aucun sens en dehors de l'application qui l'a créée. Entre autre, il serait fondamentalement incapable de communiquer avec la base.

    Si vraiment tu ne peux pas passer par un proxy, alors tu dois te passer d'un pool de connexion centralisé. À quoi sert-il d'ailleurs ? Au pire, tu peux toujours en faire un agent d'information à qui tout le monde dit quand il ouvre et ferme une connexion, ce qui lui permet d'indiquer combien de connexions sont ouvertes, et si il est acceptable d'en ouvrir une autre tout de suite.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par Ethan0026 Voir le message
    Le truc c'est qu'avec la JAPI Essbase, la connection créé est un objet que je dois renvoyer à la classe client pour qu'elle puisse l'utiliser (Cela permet de ne pas divulguer de mots de passes). Je ne peux donc modifier le code source de cet objet généré par la JAPI.
    J'ai du mal à voir en quoi créer l'objet côté serveur pour l'envoyer côté client résout un problème de divulgation de mot de passe : l'objet va de toute façon contenir des informations de connection ... et au pire, s'il est très light, la connection est liée à la machine hôte, et donc serait refusée par la base si on l'ouvrait côté serveur et qu'on essayait de la reprendre côté client, non ?

    La servlet devrait pouvoir servir de proxy, sinon ça revient à laisser les clés aux clients. Auquel cas, pourquoi s'embêter à ne pas leur envoyer les ids de connection (quitte à chiffrer ça un minimum) ...

Discussions similaires

  1. Sérialiser un attribut marqué transient !
    Par Mediii dans le forum Langage
    Réponses: 7
    Dernier message: 18/09/2008, 09h16
  2. Question sérialisation / transient
    Par ®om dans le forum Langage
    Réponses: 6
    Dernier message: 18/11/2006, 14h23
  3. [Serializable][image] Sérialiser une image
    Par Galima dans le forum Graphisme
    Réponses: 7
    Dernier message: 01/07/2004, 18h12
  4. Sérialisation avec sockets
    Par sebi77 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 03/05/2004, 20h24
  5. SGBD ou sérialisation
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/10/2003, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo