Are you saying that your test and your webservice need to talk to the same
database? In that case, don't you need to need to use similar connection
strings.

Instead of "jdbc:h2:mem:" + DATABASE_NAME
Try this:   "jdbc:h2:tcp://localhost/mem:" + DATABASE_NAME

Seems plausible to me -- but I haven't tested it :-)

Cheers
Kerry

On Fri, Jun 25, 2010 at 10:48 AM, Calcul8r <bbq.ea...@gmail.com> wrote:

> I have developed a web service that I'm running in WebSphere
> application server.  I want to test a method that simply retrieves all
> values from a database table and returns them as part of a payload in
> a response.  I want to use an in-memory database for testing so the
> tests will be easily repeatable.
>
> I create the database and populate the table in a @BeforeClass
> method.  I set up the database connection as follows....
> try {
> Class.forName("org.h2.Driver");
> } catch (Exception e) {
> e.printStackTrace();
> }
>
> // Set up table in h2
> Connection con = DriverManager.getConnection("jdbc:h2:mem:" +
> DATABASE_NAME + ";DB_CLOSE_DELAY=-1");
>
> The database is created correctly, because I can write some temporary
> code at the very start of my test case to prove the database is still
> alive and well...
> // is my database still alive
> Connection con = null;
> try {
>        con = DriverManager.getConnection("jdbc:h2:mem:" + DATABASE_NAME +
> ";IFEXISTS=TRUE");
>        PreparedStatement stmt1 = con.prepareStatement("SELECT * FROM
> BLAH.BLAH2");
>        ResultSet blah = stmt1.executeQuery();
>        while (blah.next()) {
>                System.out.println(blah.getString(1));
>                System.out.println(blah.getString(2));
>        }
>        blah.close();
>        stmt1.close();
>        con.close();
> } catch (SQLException e) {
>        // TODO Auto-generated catch block
>        e.printStackTrace();
> }
>
> And I get output in my console...
> ID1
> NAME1
> ID2
> NAME2
>
> Then I actually make the real web services call... I pass the name of
> the database in the query string.
> In the web services method, I attempt to get a connection to the
> database as follows...
>
> Connection con = null;
> if (testing != null) {
>        try {
>                Class.forName("org.h2.Driver");
>                con =
> DriverManager.getConnection("jdbc:h2:tcp://localhost/mem:" +
> testing + ";IFEXISTS=TRUE");
>        } catch (SQLException e) {
>                e.printStackTrace();
>        }
> }
>
> ... and it waits several seconds and ultimately bombs out with...
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R
> org.h2.jdbc.JdbcSQLException: Connection is broken: "session
> closed" [90067-137]
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.message.DbException.get(DbException.java:167)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.message.DbException.get(DbException.java:144)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.engine.SessionRemote.checkClosed(SessionRemote.java:470)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.engine.SessionRemote.connectServer(SessionRemote.java:331)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:
> 223)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.engine.SessionRemote.createSession(SessionRemote.java:217)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:111)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:95)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> org.h2.Driver.connect(Driver.java:58)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> java.sql.DriverManager.getConnection(DriverManager.java:572)
> [6/24/10 17:25:08:406 CDT] 00000023 SystemErr     R     at
> java.sql.DriverManager.getConnection(DriverManager.java:218)
>
> Is it possible to do what I am trying to accomplish... or am I hitting
> JVM/classloader issues?  (Note that I am using tcp://localhost in the
> web service connection.  I was using version 1.1.112 which also tossed
> a broken connection message.  This latest version (1.2.137) mentions
> the session is closed in addition to the broken connection message.
>
> --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To post to this group, send email to h2-datab...@googlegroups.com.
> To unsubscribe from this group, send email to
> h2-database+unsubscr...@googlegroups.com<h2-database%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/h2-database?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to h2-datab...@googlegroups.com.
To unsubscribe from this group, send email to 
h2-database+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to