# Java > Gnral Java > Persistance des donnes >  Problme d'instanciation d'un bean quand appel d'un DAO dans son constructeur

## PatLec

Bonjour,

Je dbute en Java EE et voici mon problme:
Je n'arrive pas  instancier un Bean lorsque dans son constructeur je fait appel  mon DAO.
Quand je fait appel  ce mme DAO dans un getter de ce mme Bean je n'ai aucun problme.
Mon but est de charger mes donnes de la base de donne lors de l'initialisation du Bean (constructeur) pour viter de faire des appels  chaque getter.
Comment dois-je m'y prendre?

Merci d'avance pour votre aide.

Patrick

----------


## tchize_

Et le DAO tu l'obtiens comment?

----------


## PatLec

Je fais une injection EJB et dans le constructeur je fais une dclaration new de mon DAO

----------


## Kasko

a serai mieux de montrer ton code si a te drange pas sinon avec moins d'information comme a il serait difficile de t'aider.

----------


## tchize_

Vu que c'est un ejb et que a marche dans les geters, j'en conclue qje l'injection fonctionne. dplace ton code dans une mthode d'initialisation que tu annotes avec @postconstruct. Le conteneur ejb appellera automatiquement cette methode aprs la cration de l'ejb.

----------


## PatLec

Super a marche 
Merci beaucoup

----------


## PatLec

Bonjour,
J'ai bien progress en utilisant cette mthode d'initialisation, mais maintenant je me retrouve devant un nouveau problme.
J'ai un bean qui fait appel  plusieurs tables dans ma base de donn (pour les autres cela marche bien).
J'obtient  l'appel de la page web l'erreur suivante: "Erreur lors de linjection de ressources dans le bean gr "
Si je dplace mon code de la mthode d'initialisation du bean (annot @PostCreate") vers la mthode getter,je n'ai plus de problme de problme. Mais c'est moins propre et je dois ajouter un test faire appel  la base qu'au premier appel du getter.
Mon code du bean en pice jointe.

Merci d'avance

----------


## tchize_

ce serait bien d'avoir le dtail de l'erreur.

----------


## PatLec

Voici l'erreur complte:

/resources/utilisateur/ListerRendezvous.xhtml @23,60 test="#{listerRendezvousBean.listeVide}" Erreur lors de linjection de ressources dans le bean gr listerRendezvousBean

Cette apparait quelque soit le paramtre de du Bean appel. Il s'agit donc bien d'un pb lors de l'appel du Bean et non li au paramtre ou  l'appel

----------


## tchize_

t'as pas de stacktrace dans tes logs? L c'est l'erreur JSF consquence de l'erreur d'initialisation, mais l'erreur d'initialisation doit bien tre loggue quelque part.

----------


## OButterlin

Il n'y a rien qui vous choque dans le constructeur ?
rendezvousDao, clientDao et prestationDao sont annotes avec @EJB et il y a un new pour chacune de ces classes...  ::roll::

----------


## PatLec

J'ai cern un peu plus le problme en mode dbug:
en passant la ligne suivante du code attach dans un message prcdent:
	client = clientDao.trouver(rendezvous.getIdClient());

2015-10-19T13:18:21.525+0200|Infos: RAR7113: destroying connection 1 since it has reached the maximum usage of : 10

Il semble donc que cel vienne d'un pb de configuration de mon pool de connexion.

Pourtant j'ai les paramtres suivants:

Pool Settings


 Initial and Minimum Pool Size:  8 Connections
Minimum and initial number of connections maintained in the pool   


 Maximum Pool Size:  32 Connections
Maximum number of connections that can be created to satisfy client requests   


 Pool Resize Quantity:  2 Connections
Number of connections to be removed when pool idle timeout expires   


 Idle Timeout:  300 Seconds
Maximum time that connection can remain idle in the pool   


 Max Wait Time:  60000 Milliseconds
Amount of time caller waits before connection timeout is sent   

Est-ce qu'il y ad'autresparamtres que je devrais regarder?

----------


## PatLec

OButterlin je pense qu'il y a quelque chose que je matrise pas bien.
Dans ce Bean j'ai besoin uniquement des rcuprer (pas de sauvegarde) des donnes situes dans trois tables diffrentes.
Quelle serait la meilleur manire de faire sachant que mes trois DAO sont dj prts? 

Merci d'avance

----------


## Maine13

Bonjour,

Je pense que c'est un problme au niveau de ta couche service dans ton ejb, probablement du a ta manire de traiter tes requtes et prcisment l'ouverture et fermeture des tes connections. Tu peux nous post la manire avec laquelle tu rcupre tes rsultats de la base de donnes.

Sinon je te conseille de suivre encore des cours de programmation orient objet car tout ce que tu as mis dans ta mthode postContruct tu l'aurais pu rcuprer dans une seule ligne !!! 

Il y'a plein de truc comme dans ta classe Rendezvous tu dois avoir un attribut de type client mais pas un attribut idClient de type int...
Et la tu peux seulement tout faire depuis ta liste de rendezVous genre rendezVous.getClient.getOtherObject.getOtherList ....

----------


## PatLec

C'est vrai pour l'instant je dcompose un peu (pour dbugger plus facilement).

Pour le DAO je viens de le modifier pour accder aux diffrentes table avec le DAO RendezvousDAO:


```

```

Mon Bean est devenu:


```

```

Mais le problme reste le mme:
erreur JSF:


```

```


*
**Une ide?*

----------


## tchize_

```

```

Il y a quoi  ListerRendezvousBean.java:76 ?

----------


## PatLec

```
ligne 76 : 					rendezvousComplet.setNomClient(client.getNom());
```

caus par : 


```

```

----------


## tchize_

ben ton rendez-vous est null. Tu devrais vrifier la valeur de tes objet avant de les utiliser. Il y a plein de requte DB qui peuvent te retourner du vide  ::):

----------


## PatLec

Effectivement mais la ce n'est pas le problme

----------


## PatLec

Pour rsumer la situation:
Appel depuis le Bean d'une lecture en base par le DAO:


```
					client = rendezvousDao.trouverClient(rendezvous.getIdClient());
```

dans le DAO:


```

```

tout se passe bien :


```

```

Mais juste aprs j'obtient : 


```
2015-10-19T23:48:09.864+0200|Infos: RAR7113: destroying connection 1 since it has reached the maximum usage of : 10
```

ce qui se traduit par un client = null aprs retour dans le bean.

----------


## tchize_

Tu peux poster ton log complet. Ton persistence.xml.  Tes dao. Ton connexion pool.

----------


## PatLec

Mon fichier persistence:


```

```

Mon Bean  jour ainsi que mon DAO sont en pices jointes.
Une copie du log aussi en pice jointe.
Un conseil pour sortir un fichier de la console d'admistration Glassfish un fichier correspondant au connection pool?

----------


## tchize_

Rien de particulier  dire, mis  part ce que j'ai dj dit: tu ne vrifie pas la valeur de retour aprs ton appel

```
client = rendezvousDao.trouverClient(rendezvous.getIdClient());
```

 hors dans ton cas client est null, probablement parce que tu va rechercher un id incorrect. Autrement dit, t'as dans ta DB un rdv avec un idclient "1" mais tu n'as pas de client 1.


Quand  ton erreur RAR7113: , vu qu'elle a lieu 8 secondes avant je ne pense pas qu'elle soit lie. Je penserais plutot  une connexion que t'as oubli de fermer ailleurs et que glassfish tuerais aprs 10 secondes.

----------


## OButterlin

Je maintient qu'il ne faut pas faire un new


```

```

Peux-tu au moins faire le test ?

----------


## PatLec

Le problme est rsolu:
Je faisais appel  idClient qui avait t supprim par ailleurs et comme je ne testais pas ce cas ...
Merci tchize_ pour cette bonne leon que je retiens. Il me reste  vrifier l'ensemble de mon code car je dois bien avoir d'autres failles du mme type.
On apprend de ses erreurs.
Merci encore

----------


## tchize_

> Je maintient qu'il ne faut pas faire un new


Je suis d'accord avec toi, bien qu' part tre moche et inutile, a n'a aucun effet sur son code.

----------


## OButterlin

> Je suis d'accord avec toi, bien qu' part tre moche et inutile, a n'a aucun effet sur son code.


C'est vrai, le constructeur est appel avant l'injection, mais je trouve que si dj on utilise un EJB, autant l'utiliser correctement  :;):

----------

