11 Replies Latest reply on Jan 9, 2008 7:41 PM by Pete Muir

    how can I create a simple database aplication?

    Mussie Woldemi Newbie

      Hello forum,
      I'm trying to build an aplication where users can register with name, password and e-mail. I tried the examples in the seam reference in particular the registration example but that example just stores the name and password as long as the server is running. When restarting the server name and password are lost. So how can I store username and password?

      I also tried seam gen chapter "2.5 Generating an application from an existing database" I followed the steps there but I don't know how to do following: "You can browse the database, edit existing
      objects, and create new objects."

      I'm quite sure you'll find my questions silly but I'm totaly new to this and a little advice in the begining would help a lot.

      thanks and best regards,
      Mussie

        • 1. Re: how can I create a simple database aplication?
          Andrew Newton Newbie

          I'm no Seam expert. In fact, I'm very new to it. But I've been quite a bit of time trying to convert the registration example to use Maven. And I'm pretty sure it uses a database.

          There are two things to look for:
          1) If you downloaded JBoss AS, the registration example is probably using the built-in HSQL in-memory database. You can either reconfigure JBoss to use HSQL as a disk-based database, or point it to some other database.
          2) The persistence.xml in the registration example has "create-drop" under the hibernate.hbm2ddl.auto property. That will drop and the create your database tables every time the app comes up, I think. Another setting, such as "update" might be in order. You'll probably have to look at the Hibernate docs to find the right answer.

          I hope that helps.

          -andy

          • 2. Re: how can I create a simple database aplication?
            Mussie Woldemi Newbie

            Where can I configure Jboss to use HSQL as a disk based database?
            And where can I see the entries of the database?

            thanks and best regards,
            Mussie

            • 3. Re: how can I create a simple database aplication?
              Mussie Woldemi Newbie

              OK found out where to configure jboss to use HSQL as a database, its in $JBOSS_HOME/server/default/deploy/ejb3.deployer/META-INF/persistence.properties correct me if I'm wrong.

              But is it really necessary to change that file! I thought its enough to change the persistence.xml in the booking example from create-drop
              to update.
              But unfortunately after restarting my server I can't login with my username and password which I registered earlier.
              Anyone has an idea?.

              thanks and best regards,
              Mussie

              • 4. Re: how can I create a simple database aplication?
                Pete Muir Master

                Create a datasource that points to e.g. a mysql database, and alter the example to use it. Also make sure to use validate hibernate.hbm2ddl.auto property in persistence.xml (you'll need to make sure the tables exist in the database.

                • 5. Re: how can I create a simple database aplication?
                  Mussie Woldemi Newbie

                  Can't I use HSQL DB why mysql? And whats the sence of update if I have to validate the database?
                  I thought hibernate generates the db relations out of my entities?
                  Or do I have to create a database first with relations and attributes like username and password and then create the entities with username and password and after that hibernate is going to validate and map my entities to the database?

                  If this is correct does anyone know an example reference with JBoss Seam and HSQL DB?
                  And why are all the examples with in memory based persistence I can't picture any use-case for that.

                  Like I mentioned before I'm new to this topic so maybe some of you can give me some enlightenment.

                  best regards,
                  Mussie

                  • 6. Re: how can I create a simple database aplication?
                    Pete Muir Master

                     

                    "Mussie" wrote:
                    Can't I use HSQL DB why mysql?


                    Yes, just configure a HSQL in persistent mode in -ds.xml

                    And whats the sence of update if I have to validate the database?
                    I thought hibernate generates the db relations out of my entities?


                    Then use create-drop, but loose your data, or use update.

                    And why are all the examples with in memory based persistence I can't picture any use-case for that.


                    Because it's great for examples. Read the hsql docs, its a 2 line change to make it persistent, and without the tables being create-droped.

                    • 7. Re: how can I create a simple database aplication?
                      Mussie Woldemi Newbie

                      Hello again,
                      I changed create-drop to update in the persistence.xml.
                      Now I found out that in case of update the booking service can't find any hotels (no hotels found).
                      When I change the persistence.xml back to create-drop I can find hotels again!? Does anyone know why?

                      thanks and best regards,
                      Mussie

                      • 8. Re: how can I create a simple database aplication?
                        Pete Muir Master

                        Import.sql is only run by hibernate in create/create-drop.

                        • 9. Re: how can I create a simple database aplication?
                          Mussie Woldemi Newbie

                          hello,
                          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. 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?
                          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 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 -->
                           <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>
                          



                          • 10. Re: how can I create a simple database aplication?
                            Mussie Woldemi Newbie

                            Is this the right place to post my question or should I post it to HSQL Forum? 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

                            • 11. Re: how can I create a simple database aplication?
                              Pete Muir Master

                              ds questions should go on a jboss AS forum (probably a newbie forum).