我正在寻找一种在网络模式下运行 Apache Derby 服务器的好方法。我正在使用 NetworkServerControl 来启动服务器,它运行良好。
我这样启动服务器:
/**
* starts the network server
* @return true if sucessfull
*/
public boolean start()
{
try
{
// just to be sure that we don't start two servers
this.stop();
server = new NetworkServerControl();
server.start( null );
return true;
}
catch ( Exception ex )
{
this.logLogger.debug( ex );
return false;
}
}
并像这样停止它:
/**
* stops the server
*
* @return true if there were no problems stopping the server
*/
public boolean stop()
{
try
{
if ( server == null )
{
server = new NetworkServerControl();
}
server.shutdown();
return true;
}
catch ( Exception ex )
{
this.logLogger.debug( ex );
return false;
}
}
在 main() 我有这个,所以在服务器运行时进程不会死
(...)
clsDB.start();
while( clsDB.testForConnection() )
{
Thread.sleep( 60000 );
}
testForConnection() 看起来像这样:
/**
* Try to test for a connection
*
* @return true if the server is alive
*/
public boolean testForConnection()
{
try
{
server.ping();
return true;
}
catch ( Exception ex )
{
this.logLogger.debug( ex );
return false;
}
}
我的问题是,当我的 JAR 的新实例被调用时,旧的实例仍然会运行(除非我真的很幸运并且在新服务器启动之前进行了测试)。
我知道我可以测试服务器是否已经在运行,然后我不会再次启动,但是如果服务器已经在那里,我希望 start 像重新启动一样工作。