2009-04-22 74 views
1

J'ai une application qui effectue une opération différée. L'utilisateur génère 1 million de messages qui sont stockés dans la file d'attente JMS, puis un MDBeans consomme ces messages et effectue certaines actions et stocke des données dans la base de données. Étant donné que JMS Queue fonctionne trop rapidement, il tente de créer 1 million d'instances MDBean qui, à leur tour, essaient de créer 1 million de connexions à la base de données. Pas étonnant que certains d'entre eux expirent depuis que le pool de connexions JDBC ne peut pas servir 1 million de demandes de connexion.Contrôle du serveur JMS: trop de MDBeans créés (weblogic)

Quelle est la meilleure solution pour contrôler le nombre de MDBeans créés? Il vaudrait mieux qu'un million de messages soit traité par un certain nombre de MDBeans qui ne dépasse pas le nombre de connexions autorisées dans le pool JDBC

Répondre

1

Vous pouvez limiter le nombre d'instances de votre MDB en utilisant le paramètre max-beans- élément in-free-pool dans le descripteur de votre bean dans weblogic-ejb-jar.xml.

<message-driven-descriptor> 
    <pool> 
     <max-beans-in-free-pool>100</max-beans-in-free-pool> 
     <initial-beans-in-free-pool>50</initial-beans-in-free-pool> 
    </pool> 
    ... 
</message-driven-descriptor> 

Si gauche non précisée, le nombre d'instances créées ne seront délimité par le nombre de threads disponibles. Néanmoins, il est recommandé de définir le nombre maximal de threads égal ou inférieur à la taille de votre pool de connexions à la base de données.