2009-05-04 71 views
7

Soy nuevo en jboss y me han pedido que incorpore el mecanismo de agrupación de conexiones jboss con una aplicación web existente. Teniendo en cuenta que la capa de la base de datos de una aplicación web está escrita correctamente, es decir, todos los conjuntos de resultados, declaraciones y conexiones se cierran correctamente cuando no son necesarios, lo que todo código debe cambiar en mi aplicación web después de haber configurado correctamente el origen de datos jboss.JBoss Database Connection Pool

¿Alguien puede dirigirme a un tutorial o un ejemplo de código que utiliza jtass datasource en una aplicación web.

+0

Configurando JBoss es una parte del acuerdo, hay un buen algunas muestras y tutoriales disponibles en línea. Lo que me preocupa son los cambios que podrían requerirse en la base de códigos. ¿Alguien puede dirigirme a una muestra o tutorial donde puedo ver cómo recuperamos una conexión de JBoss darasource y cómo se debe manejar más tarde, es decir, cerrar o liberar la conexión. Gracias. –

Respuesta

8

La agrupación en JBoss se maneja en la configuración de DataSource. Here es el HowTo. La aplicación web debería hacer una búsqueda JNDI de la fuente de datos para obtener la conexión de la base de datos en lugar de hacer una URL JDBC directa, y luego tendrá la agrupación.

Las transacciones son otra historia, sin embargo.

EDIT: En respuesta a su comentario acerca de cómo esto afecta el código, esto es lo que parece:

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

el punto de vista técnico PortableRemoteObject.narrow no es necesaria en una JBoss (4.2.2 todos modos) la configuración de servidor único es segura, pero es un código estándar J2EE más apropiado, ya que los servidores de aplicaciones generales no tienen que devolver un objeto del tipo correcto solo para hacer un Context.lookup.

Lo anterior no cubre la utilización de recursos y problemas de manejo de errores. Se supone que debes cerrar ese objeto Context cuando hayas terminado con él, y por supuesto la conexión a la base de datos, aunque JBoss te gritará si olvidas cerrar la conexión de la base de datos y la transacción finaliza, y la cierra por ti.

De todos modos, ese objeto Connection se puede usar tanto como DriverManager.getConnection (url);

1

No tiene que cambiar nada. Cuando selecciona el tipo correcto de origen de datos (local-tx-datasource/xa-datasource), el manejo de la conexión y la transmisión se realizan por usted. En $ JBoss/docs/examples/jca encontrará plantillas para prácticamente todas las bases de datos, que puede reutilizar.

Si está utilizando XA, debe configurar la recuperación de Tx. Consulte esta publicación en un instructivo: http://management-platform.blogspot.com/2008/11/transaction-recovery-in-jbossas.html (bueno, tal vez no sea un procedimiento en el modo independiente, sino junto con el código fuente de Jopr).

9

primero crear un archivo XML por su nombre xxx-ds.xml y colocar este archivo en 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> 

y ahora en su archivo .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(); 

***** asegurarse de que ref name recurso debe ser igual en todos

lugar