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 の新しいインスタンスが呼び出されたときに、古いインスタンスがまだ実行されていることです (本当に幸運で、新しいサーバーが起動する前にテストが行われない限り)。
サーバーが既に実行されているかどうかをテストしてから再起動しないことはわかっていますが、サーバーが既に存在する場合は、再起動のように動作するようにしたいと考えています。