Kerry,
I don't really need to use a database in the testcase. I just wanted
to make 100% certain that the database still existed after closing the
connection in the set up method (and it does). I do want to use that
same database in the web service and I do use the tcp://localhost in
that url. (The name of the variable is "testing" in the web service
and DATABASE_NAME in the testcase.)
Quote:
con = DriverManager.getConnection("jdbc:h2:tcp://localhost/mem:" +
testing + ";IFEXISTS=TRUE");
Marie
On Jun 25, 5:45 am, Kerry Sainsbury <[email protected]> wrote:
> 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 <[email protected]> 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 [email protected].
> > To unsubscribe from this group, send email to
> > [email protected]<h2-database%2bunsubscr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/h2-database?hl=en.- Hide quoted text -
>
> - Show quoted text -
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/h2-database?hl=en.