Question

Je suis nouveau sur jboss et on m'a demandé d'incorporer le mécanisme de pooling de connexion jboss à une application Web existante. Considérant qu’une couche de base de données d’applications Web est correctement écrite, c’est-à-dire que tous les ensembles de résultats, instructions et connexions sont correctement fermés lorsqu'ils ne sont pas nécessaires, tout le code doit être modifié dans mon application Web après avoir configuré la source de données jboss correctement.

Quelqu'un peut-il m'indiquer un didacticiel ou un exemple de code utilisant la source de données jboss dans une application Web.

Était-ce utile?

La solution

Le pool dans JBoss est entièrement géré dans la configuration de la source de données. Ici , voici le HowTo. L’application Web devrait effectuer une recherche JNDI pour que la source de données obtienne la connexion à la base de données plutôt que de créer une URL JDBC directe. Vous bénéficierez ensuite d’un pooling.

Les transactions sont une autre histoire, cependant.

EDIT: en réponse à votre commentaire sur les conséquences sur le code, voici à quoi il ressemble:

String jndiPath = "java:DataSourceJNDIName"; //The exact prefix here has a lot to do with clustering, etc., but if you are using one JBoss instance standalone, this works.
Context ctx = new InitialContext();
DataSource ds = (DataSource) PortableRemoteObject.narrow(ctx.lookup(jndiPath), DataSource.class);
Connection c = ds.getConnection();

Techniquement parlant, PortableRemoteObject.narrow n’est pas nécessaire dans une configuration à serveur unique JBoss (4.2.2 de toute façon), mais il s’agit bien d’un code standard J2EE plus approprié, car les serveurs d’applications généraux ne doivent pas renvoyer d’objet de le bon type juste pour faire un Context.lookup.

Ce qui précède ne couvre pas les problèmes d'utilisation des ressources et de traitement des erreurs. Vous êtes censé fermer cet objet Context lorsque vous avez terminé, et bien sûr la connexion à la base de données, bien que JBoss vous hurle dessus si vous oubliez de fermer la connexion à la base de données et que la transaction se termine, et le ferme pour vous.

Quoi qu'il en soit, cet objet Connection est utilisable au même titre que DriverManager.getConnection (url);

Autres conseils

commencez par créer un fichier xml avec le nom xxx-ds.xml et placez ce fichier dans serveur / default / deploy / xxx-ds.xml

<datasources>
<local-tx-datasource>
<jndi-name>/jdbc/Exp</jndi-name>
<type-mapping>SQL</type-mapping>
<connection-url>jdbc:microsoft:sqlserver://          </connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name></user-name>
<password></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>1000</max-pool-size>
</local-tx-datasource>
</datasources>

jboss-web.xml

<jboss-web>
<!--  <security-domain flushOnSessionInvalidation="false"/>-->
<!--  <context-root>/BSI</context-root>-->
  <resource-ref>
        <description>Database connection resource</description>
        <res-ref-name>jdbc/Exp</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <jndi-name>java:/jdbc/Exp</jndi-name>
        <res-auth>Container</res-auth>
    </resource-ref>
</jboss-web>

web.xml

<resource-ref>
    <description>Database connection resource</description>   
    <res-ref-name>jdbc/Exp</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

et maintenant dans votre fichier .java

javax.naming.Context ctx1 = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ctx1.lookup("java:comp/env/jdbc/Exp");
con = ds.getConnection();

***** Assurez-vous que le nom de la référence de ressource doit être identique à tous les endroits

Vous n'avez rien à changer. Lorsque vous sélectionnez le bon type de source de données (local-tx-datasource / xa-datasource), la gestion de la connexion et la transmission sont effectuées pour vous. Dans $ JBoss / docs / examples / jca, vous trouverez des modèles pour pratiquement toutes les bases de données, que vous pouvez simplement réutiliser.

Si vous utilisez XA, vous devez configurer Tx-recovery. Voir cette publication sur un tutoriel: http://management-platform.blogspot.com/ 2008/11 / transaction-recovery-in-jbossas.html (enfin, ce n'est peut-être pas un tutoriel en mode autonome, mais en conjonction avec le code source Jopr).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top