Convenciones
- $JBOSS_HOME es el directorio donde está instalado JBoss.
- $JBOSS_HOST es la dirección ip o host donde está instalado JBoss
- La configuración de JBoss que vamos a modificar es la default.
Habilitar Binding
En $JBOSS_HOME/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml, descomentar:
<bean class="org.jboss.services.binding.ServiceBindingMetadata"> <property name="serviceName">jboss:service=Hypersonic</property> <property name="port">1701</property> <property name="description">TCP/IP socket for remote connection to Hypersonic database</property> </bean>
Data Source
Modificar el archivo $JBOSS_HOME/server/default/deploy/hsqldb-ds.xml para ejecutar HSQL en modo server. El archivo que viene con JBoss tiene la configuración para este fin comentada, sólo hay que descomentar lo que se necesite y comentar lo que se deja de usar. Aqui muestro cómo quedaría:
<?xml version="1.0" encoding="UTF-8"?>
<!-- The Hypersonic embedded database JCA connection factory config -->
<!-- See http://www.jboss.org/community/wiki/Multiple1PC for information about local-tx-datasource -->
<!-- $Id: hsqldb-ds.xml 97536 2009-12-08 14:05:07Z jesper.pedersen $ -->
<datasources>
<local-tx-datasource>
<!-- The jndi name of the DataSource, it is prefixed with java:/ -->
<!-- Datasources are not available outside the virtual machine -->
<jndi-name>DefaultDS</jndi-name>
<!-- For server mode db, allowing other processes to use hsqldb over tcp.
This requires the org.jboss.jdbc.HypersonicDatabase mbean. -->
<connection-url>jdbc:hsqldb:hsql://${jboss.bind.address}:1701</connection-url>
<!-- The driver class -->
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<!-- The login and password -->
<user-name>sa</user-name>
<password></password>
<!--example of how to specify class that determines if exception means connection should be destroyed-->
<!--exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyExceptionSorter</exception-sorter-class-name-->
<!-- this will be run before a managed connection is removed from the pool for use by a client-->
<!--<check-valid-connection-sql>select * from something</check-valid-connection-sql> -->
<!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use -->
<min-pool-size>5</min-pool-size>
<!-- The maximum connections in a pool/sub-pool -->
<max-pool-size>20</max-pool-size>
<!-- The time before an unused connection is destroyed -->
<!-- NOTE: This is the check period. It will be destroyed somewhere between 1x and 2x this timeout after last use -->
<!-- TEMPORARY FIX! - Disable idle connection removal, HSQLDB has a problem with not reaping threads on closed connections -->
<idle-timeout-minutes>0</idle-timeout-minutes>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- example of how to specify a class that determines a connection is valid before it is handed out from the pool
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyValidConnectionChecker</valid-connection-checker-class-name>
-->
<!-- Whether to check all statements are closed when the connection is returned to the pool,
this is a debugging feature that should be turned off in production -->
<track-statements/>
<!-- Use the getConnection(user, pw) for logins
<application-managed-security/>
-->
<!-- Use the security domain defined in conf/login-config.xml -->
<security-domain>HsqlDbRealm</security-domain>
<!-- Use the security domain defined in conf/login-config.xml or the
getConnection(user, pw) for logins. The security domain takes precedence.
<security-domain-and-application>HsqlDbRealm</security-domain-and-application>
-->
<!-- HSQL DB benefits from prepared statement caching -->
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>Hypersonic SQL</type-mapping>
</metadata>
<!-- Uncomment when using hsqldb in server mode -->
<depends>jboss:service=Hypersonic</depends>
</local-tx-datasource>
<!-- Uncomment if you want hsqldb accessed over tcp (server mode) -->
<mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic">
<attribute name="Port">
<value-factory bean="ServiceBindingManager" method="getIntBinding" parameter="jboss:service=Hypersonic"/>
</attribute>
<attribute name="BindAddress">
<value-factory bean="ServiceBindingManager" method="getStringBinding" parameter="jboss:service=Hypersonic"/>
</attribute>
<attribute name="Silent">true</attribute>
<attribute name="Database">default</attribute>
<attribute name="Trace">false</attribute>
<attribute name="No_system_exit">true</attribute>
</mbean>
</datasources>
Cliente
Luego se puede acceder con un cliente configurándolo de la siguiente forma:
Driver Class: org.hsqldb.jdbcDriver (para usar esta clase incluír en el classpath del cliente $JBOSS_HOME/common/lib/hsqldb.jar)
URL: jdbc:hsqldb:hsql://$JBOSS_HOST:1701 (si JBoss estuviera instalado localmente entonces quedaría jdbc:hsqldb:hsql://127.0.0.1:1701)
Username: sa
Password: