I will give that a try, but it is probably my fault, when I call shutdown()
on
the server the db.lck file is not deleted, so I guess se server is not
shutting
down as it should and a not to wild guess would be that it is my fault.
(The db.lck file is deleted when my application ends normally).
----- Original Message -----
From: "Kathey Marsden" <[EMAIL PROTECTED]>
To: "Derby Discussion" <[email protected]>
Sent: Tuesday, June 17, 2008 2:44 PM
Subject: Re: Derby shutdown question
Mikael wrote:
And then I start the server again just like above, but this does not
work, I can open a
connection but when I execute a query it fails with something like:
java.sql.SQLNonTransientConnectionException: Insufficient data while
reading from the network - expected a minimum of 6 bytes and received
only -1 bytes. The connection has been terminated.
I tried this and it seemed to work ok for me with 10.4.1.3. Can you
modify the attached program to show the failure? Also you might want to
look in derby.log to see if there is something that happenned server
side that caused the problem.
Kathey
--------------------------------------------------------------------------------
import org.apache.derby.drda.NetworkServerControl;
import java.sql.*;
import java.io.PrintWriter;
import java.net.InetAddress;
public class RestartServer {
public static void main(String args[]) throws Exception
{
int port = 1527;
NetworkServerControl nsctrl = new NetworkServerControl(
InetAddress.getByName( "localhost"), port); ;
startServer(nsctrl);
connect();
// bring down the server
nsctrl.shutdown();
startServer(nsctrl);
connect();
}
public static void startServer(NetworkServerControl nsctrl)
throws Exception {
nsctrl.start(null);
// ping until server comes up.
for (int i = 0; i < 30; i++)
{
try {
nsctrl.ping();
System.out.println("Server came up succssfully");
break;
} catch (Exception e) {
if (i == 29)
e.printStackTrace();
else
Thread.sleep(5000);
}
}
}
public static void connect() throws Exception {
// check client connection is working ok.
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
Connection conn =
DriverManager.getConnection("jdbc:derby://localhost:1527/testdb;create=true");
Statement s = conn.createStatement();
String sql = "select count(*) from sys.systables";
System.out.print(sql + ":");
ResultSet rs = s.executeQuery(sql);
rs.next();
System.out.println(rs.getString(1));
rs.close();
s.close();
conn.close();
}
}