4 Replies Latest reply on Sep 14, 2004 3:31 PM by floorflux

    DukeBank / Hypersonic: localDB vs. server

    krumeich

      Hi,

      since I've just spent 2 hours getting the DukeBank example to run, I might as well share an experience to save some of you the bother of finding this solution yourselves:

      Upon changing the hsqldb-ds.xml file from localDB connection to server connection (Post 1701), as described in the tutorial, I got loads of messages in the JBoss console. Most of those messages said something about unfulfilled dependencies as in "I depend on...". The final message was:

      MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM:
      ObjectName: jboss:service=Hypersonic,database=localDB
      state: NOTYETINSTALLED
      I Depend On:
      Depends On Me: jboss.jca:service=ManagedConnectionFactory,name=DefaultDS

      Although I could populate the database with the provided ant script, it wasn't possible to log in to the bank example. The exception that caused the problem was:

      14:02:59,118 ERROR [LogInterceptor] EJBException:
      javax.ejb.EJBException: ejbFindByCustomerId Unable to connect to database. Could not dereference object

      It turned out that there is another setting that has to be changed in hsqldb-ds.xml: At the bottom of the file, just above the mbean configuration you have to change the line

      <depends>jboss:service=Hypersonic,database=localDB</depends>
      

      to
      <depends>jboss:service=Hypersonic</depends>
      

      to make JBoss use the server database. After that, the example worked like a charm.

      Good luck

      Alexander




        • 1. Re: DukeBank / Hypersonic: localDB vs. server
          floorflux

          I'm trying to get the DukeBank example to run and am getting the exact same message that you originally got:

          MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM:
          ObjectName: jboss:service=Hypersonic,database=localDB
          state: NOTYETINSTALLED
          I Depend On:
          Depends On Me: jboss.jca:service=ManagedConnectionFactory,name=DefaultDS

          Unfortunately, when I made the reccomended change, it didn't fix it for me. It did change the message to:

          MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM:
          ObjectName: jboss:service=Hypersonic
          state: NOTYETINSTALLED
          I Depend On:
          Depends On Me: jboss.jca:service=ManagedConnectionFactory,name=DefaultDS

          however. Like you were, I am able to add the data into the database, etc, but I am unable to login to the application. When I try to login, I get this message, though:

          Server Error
          Your request cannot be completed. The server got the following error:
          null

          Did you make any other changes to the hsqldb-ds.xml file other than what was shown in the documentation?

          • 2. Re: DukeBank / Hypersonic: localDB vs. server
            floorflux

            Interesting that I installed JBoss 3.2.4 and everything works fine! Nothing else in my configuration is different, so it must be a 3.2.5 problem! Hmm, I think that may have been posted somewhere else, I just didn't want to believe it!

            • 3. Re: DukeBank / Hypersonic: localDB vs. server
              krumeich

              Now that's strange. Your experince makes it sound like 3.2.5 problem. Anyway, for sake of completeness, I'll post my hsqldb-ds.xml file. You might want to compare this to yours:

              <?xml version="1.0" encoding="UTF-8"?>
              
              <!-- The Hypersonic embedded database JCA connection factory config
              $Id: hsqldb-ds.xml,v 1.1.2.13 2004/04/19 12:47:36 ejort Exp $ -->
              
              
              <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 tcp connection, allowing other processes to use the hsqldb
               database. This requires the org.jboss.jdbc.HypersonicDatabase mbean.
              -->
               <connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url>
              
               <!-- for totally in-memory db, not saved when jboss stops.
               The org.jboss.jdbc.HypersonicDatabase mbean necessary
               <connection-url>jdbc:hsqldb:.</connection-url>
              -->
               <!-- for in-process persistent db, saved when jboss stops. The
               org.jboss.jdbc.HypersonicDatabase mbean is necessary for properly 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 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>
               -->
              
               <!-- This mbean can be used when using in process persistent hypersonic -->
               <!--<depends>jboss:service=Hypersonic,database=localDB</depends> -->
               <depends>jboss:service=Hypersonic</depends>
               </local-tx-datasource>
              
               <!-- This mbean should be used only when using tcp connections. Uncomment
               when the tcp based connection-url is used.
              -->
               <mbean code="org.jboss.jdbc.HypersonicDatabase"
               name="jboss:service=Hypersonic">
               <attribute name="Port">1701</attribute>
               <attribute name="Silent">true</attribute>
               <attribute name="Database">default</attribute>
               <attribute name="Trace">false</attribute>
               <attribute name="No_system_exit">true</attribute>
               </mbean>
              
               <!-- This mbean can be used when using in process persistent db
               <mbean code="org.jboss.jdbc.HypersonicDatabase"
               name="jboss:service=Hypersonic,database=localDB">
               <attribute name="Database">localDB</attribute>
               <attribute name="InProcessMode">true</attribute>
               </mbean>
              -->
              </datasources>
              


              Good luck!

              Alexander


              • 4. Re: DukeBank / Hypersonic: localDB vs. server
                floorflux

                thanks for the completeness! After realizing that your hsqldb-ds.xml file worked for me too, I did a vi comparison against mine and realized that I'm an idiot and mispelled Hypersonic in the depends tag! Gotta love typos!