1 Reply Latest reply on Jan 12, 2008 3:45 PM by peterj

    hsqldb-ds not in memory persistence

    mussie

      hello forum,
      I'm trying to build a database aplication with jboss and could not make my
      data persistent. I allready changed the persistence from create-drop to update in the seam booking example.
      So here is my question:
      is it correct that I have to change the hsqldb into server mode to make the
      data persistent?
      I tried to do so by changing the hsqldb-ds.xml in my deploy directory. But when I start my hsql database manager it is still in in-memory type only the URL changed to jdbc:hsqldb:hsql://127.0.0.1:1701.
      Does anyone know why my database engine doesn't convert to server based persistence?
      This is how my hsqldb-ds looks like.

      <?xml version="1.0" encoding="UTF-8"?>
      
      <!-- The Hypersonic embedded database JCA connection factory config -->
      
      <!-- $Id: hsqldb-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ -->
      
      <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>
      
       <!-- For totally in-memory db, not saved when jboss stops.
       The org.jboss.jdbc.HypersonicDatabase mbean is required for proper db shutdown
       <connection-url>jdbc:hsqldb:.</connection-url>
       -->
       <!-- For in-process persistent db, saved when jboss stops.
       The org.jboss.jdbc.HypersonicDatabase mbean is required for proper db shutdown
      
       <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB</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 af
      ter 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 -->
       <metadata>
       <type-mapping>Hypersonic SQL</type-mapping>
       </metadata>
      
       <!-- When using in-process (standalone) mode
       <depends>jboss:service=Hypersonic,database=localDB</depends>-->
       <!-- 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">1701</attribute>
       <attribute name="BindAddress">${jboss.bind.address}</attribute>
       <attribute name="Silent">true</attribute>
       <attribute name="Database">default</attribute>
       <attribute name="Trace">false</attribute>
       <attribute name="No_system_exit">true</attribute>
       </mbean>
      
      
       <!-- For hsqldb accessed from jboss only, in-process (standalone) mode
       <mbean code="org.jboss.jdbc.HypersonicDatabase"
       name="jboss:service=Hypersonic,database=localDB">
       <attribute name="Database">localDB</attribute>
       <attribute name="InProcessMode">true</attribute>
       </mbean>
       -->
      </datasources>
      



      Anyway if someone knows what is wrong with my hsqldb-ds I'd appreciate it or
      is there a tutorial or example with Jboss Java5 and HSQL persistence (not in memory).
      Because this is all I need an example of an application where I can store user acounts
      in a hsqldb not only as long as the server runs. I want to find those acounts in the db
      even if I restart my server (PC)!

      Can anyone help me out?

      thanks and best regards,
      Mussie


        • 1. Re: hsqldb-ds not in memory persistence
          peterj

          No, you do not have to switch hsqldb to server mode to persist that data. When you shut down the app server, the data is persisted to server/xxx/data/hypersonic/localDB.script.

          But personally, I would not rely on hypersonic and use MySQL or PostgreSQL instead.