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

avec Java Discussion :

Beans.instantiate(ClassLoader cls, String beanName)


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut Beans.instantiate(ClassLoader cls, String beanName)
    Bonjour à tous,

    j'ai un petit problème : j'ai lu que pour instantier un beans la meilleur façon (je dois l'utiliser) etait d'utiliser la methode Beans.instantiate(ClassLoader cls, String beanName) et que cette classe fonctionnait comme ceci :

    1) Elle recherche un fichier .ser passer dans le second parametre.
    2) -Si elle trouve le fichier.ser
    Alors elle charge automatiquement le fichier "dans le beans".
    -> throws IOException
    -Sinon, elle fait appel au constructeur par defaut du nom de la classe passe en 2e parametre. -> throws ClassNotFoundException.

    Pourtant si le beans n'a pas ete serialise le container devrait attraper une erreur de type IOException. Or il ne la 'catch' pas ---> bizarre.

    Est ce que ce fichier doit se trouver dans le repertoir courrant?

    Pouvez-vous m'aider a comprendre comment cette methode fonctionne?

    Merci

    ps: Il ne me semble pas avoir vu un sous-forum traitant tout particulierement des JavaBeans (suggestion de sous-forum)

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    la façon la plus simple d'instancer un Bean, c'est de faire new Xyz() ave Xyz la classe de ton bean, faut pas chercher plus loin.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    moi je ne dois pas utiliser le constructeur par defaut, je dois utliser la methode instantiate()
    Je ne cherche pas d'alternative.
    Quelqu'un peut-il m'aider?
    Merci

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Dans ce cas montre ton code, parce que ton problème est assez dur à suivre dans la question initiale

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    voici un bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     try {
                beanCommande = (BeanCommande) Beans.instantiate(null, "Beans.BeanCommande");
                beanEnregistrementCommande = (BeanEnregistrementCommandes) Beans.instantiate(null,"Beans.BeanEnregistrementCommandes");
                beanSignalCommande = (BeanSignaleCommande) Beans.instantiate(null, "Beans.BeanSignaleCommande");
                beanCommande.addCommandeListenner(beanEnregistrementCommande);
                beanEnregistrementCommande.addPropertyChangeListener(beanSignalCommande);
                Properties prop = new Properties();
                prop.load(new FileInputStream(System.getProperty("user.dir") + System.getProperty("file.separator") + "Config" + System.getProperty("file.separator") + "Config.properties"));
                System.out.println("multiple" + prop.getProperty("multiple-declenchement"));
                trg = new ThreadRandomGenerator(beanCommande, 1, 100, new Integer(prop.getProperty("multiple-declenchement")), 10);
                trg.start();
            } catch (IOException ex) {
                Logger.getLogger(FenGestionProduit.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(FenGestionProduit.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    le fichier .ser doit se trouver au même endroit que ta classe. Vu que tu récupère des ioexception quend tu as le .ser ou des ClassNotFound lorsque tu n'as pas de .ser, je pense que ton problème de base, c'est qu'il te manque des classes.
    Pour le ClassNotFoundException, le message précise clairement quelle classe n'est pas trouvée. Pour le IOException, l'exception contient généralement la cause de l'erreur dans le stacktrace.

    Je ne vois pas ce que tu entends par "il ne catche pas". Peut être pourrais tu nous dire ce qui ce passe avec le code que tu as envoyé.


    PS: je vois que tu utilise des majuscule dans tes noms de packages, ce n'est pas recommandé en java et contraire aux specifications java beans.

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    Tout fonctionne tres bien avec ce code
    c'est juste que j'ai lu que la factory Beans.instantiate(ClassLoader cls, String BeanName) cherchait d'abord un fichier BeanName.ser .
    Si la factory le trouvait il initialisait les valeurs du beans avec celles trouvees dans le fichier BeanName.ser
    Sinon la factory faisait appel au constructeur de la classe portant le meme nom que celui passe au 2e parametre de la factory.

    la factory ne se preocuppe pas des IOException et ClassNotFoundException, c'est au container de les traiter.(container = classe appelant la factory instantiate(...))
    Comme je n'ai pas serialise le beans en question on devrait toujours passer dans le bloc
    d'instruction catch(IOException e) vu qu'il ne trouvera pas le fichier en question (FileNotFoundException si je ne m'abuse fait partie de IOException)
    Or cette erreur je ne l'intercepte pas ! Bizarre.
    Voila mon probleme.


    En fait, dans le contructeur par defaut je fait appel a une fonction qui fait le meme travaille de recherche de fichier.ser et d'initialisation si elle en trouve un.
    Donc je suis en train de produire du code redondant. ---> Embetant

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par adrien1 Voir le message
    T
    la factory ne se preocuppe pas des IOException et ClassNotFoundException, c'est au container de les traiter.(container = classe appelant la factory instantiate(...))
    Comme je n'ai pas serialise le beans en question on devrait toujours passer dans le bloc
    Non pas du tout. D'abord Beans.instanciate, si tu regarde son code source, ne passe pas par des file mais par des ressources du classloader, donc aucune possibilité de FileNotfound. De plus, le renvoi d'une exception est un arret brutal de la méthode, il n'y a donc pas de valeur de retour. Ce serait facheux pour instanciate de lancer une exception là ou sa doc dit qu'il retourne un objet tout neuf.

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/07/2009, 15h33
  2. Bean populate quand type String devient Date
    Par Mister Nono dans le forum Struts 1
    Réponses: 5
    Dernier message: 12/09/2007, 12h03
  3. [Struts] Récupérer la String d'un <bean:message
    Par worldchampion57 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/04/2006, 15h21
  4. Tri alphabétique d'un TreeMap dont les clés sont des String
    Par Djakisback dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 31/03/2006, 14h33
  5. Réponses: 4
    Dernier message: 10/03/2006, 17h25

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