Domanda

Sono nuovo su jboss e mi è stato chiesto di incorporare il meccanismo di pooling di connessioni jboss con un'applicazione web esistente. Considerando che un livello del database di un'applicazione Web è stato scritto correttamente, ovvero che tutti i set di risultati, le dichiarazioni e le connessioni vengono chiusi correttamente quando non sono necessari, quali modifiche al codice dovrò effettuare nella mia app Web dopo aver configurato l'origine dati jboss correttamente.

Qualcuno può indicarmi un'esercitazione o un esempio di codice che utilizza l'origine dati jboss in un'app Web.

È stato utile?

Soluzione

Il pool in JBoss è tutto gestito nella configurazione DataSource. Qui è il HowTo. L'app Web dovrebbe eseguire una ricerca JNDI per l'origine dati per ottenere la connessione al database anziché eseguire un URL JDBC diretto, quindi si avrà il pooling.

Le transazioni sono un'altra storia, tuttavia.

MODIFICA: in risposta al tuo commento su come ciò influisce sul codice, ecco come appare:

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();

Tecnicamente parlando, PortableRemoteObject.narrow non è necessario in una configurazione JBoss (4.2.2 comunque) server singolo, ma è un codice standard J2EE più appropriato, poiché i server applicazioni generali non devono restituire un oggetto di il tipo giusto solo per fare un Context.lookup.

Quanto sopra non copre i problemi di utilizzo delle risorse e di gestione degli errori. Dovresti chiudere l'oggetto Context quando hai finito con esso, e ovviamente la connessione al database, anche se JBoss ti urlerà se dimentichi di chiudere la connessione al database e la transazione termina, e chiuderla per te.

Comunque, l'oggetto Connection è utilizzabile tanto quanto DriverManager.getConnection (url);

Altri suggerimenti

prima crea un file xml per nome xxx-ds.xml e posiziona questo file in server / 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>

e ora nel tuo .java file

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();

***** assicurati che il nome di riferimento della risorsa sia uguale in ogni luogo

Non devi cambiare nulla. Quando si seleziona il giusto tipo di origine dati (local-tx-datasource / xa-datasource), la gestione della connessione e TX viene eseguita automaticamente. In $ JBoss / docs / esempi / jca troverai modelli per praticamente ogni database, che puoi semplicemente riutilizzare.

Se si utilizza XA, è necessario configurare Tx-recovery. Vedi questo post su un how-to: http://management-platform.blogspot.com/ 2008/11 / transazione-recupero-in-jbossas.html (beh, forse non un how-to in modalità standalone, ma in combinazione con il codice sorgente Jopr).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top