2017-05-17 5 views
1

x次のようなLifecycleBase.start()メソッドをオーバーライドしました。 Catalina 8.xではこのメソッドが最終的になっています。 誰も私にこの問題を解決する方法を教えてもらえますか?ここで あなたはstartInternal()stopInternal()を使用することができますソースコードCatalina 6.x 8.xでの最後のbacomeの開始と停止

public void start() throws LifecycleException 
{  
    super.start(); 

    if(condition) 
    { 
     File checkDataFile = new File(DataFilePath); 
     if(containerLog.isDebugEnabled()) 
      containerLog.debug("checking secureDataFile: " + checkDataFile.getAbsolutePath()); 

     another code ... 
    } 
    else 
    { 
     throw new LifecycleException("illegal arguments"); 
    } 
} 

public void stop() throws LifecycleException 
{ 
    // sync via realm-object -> so the stop-event has to wait for active threads finishing their operations 
    synchronized(this) 
    { 
     super.stop(); 
    } 
} 

答えて

2

で、両方の方法はabstract protectedあるとstart()stop()によってそれぞれ呼ばれています。もちろん

super.start()super.stop()呼び出すことはありませんかstart()stop()はすでにカスタム「内部」メソッドを呼び出しているので、あなたは、StackOverflowErrorためです。

また、これらの2つの方法から慎重に契約をお読みください。

startInternal()

サブクラスは、状態が中にorg.apache.catalina.LifecycleState.STARTINGに変更されていることを確認する必要がありますこのメソッドの実行 。状態を変更すると、 org.apache.catalina.Lifecycle.START_EVENTイベントがトリガーされます。コンポーネントの起動に失敗すると、org.apache.catalina.LifecycleException がスローされ、親の起動に失敗したり、エラー状態になったりする可能性があります。その場合はstop()が呼び出されます。 コンポーネントを失敗したが、親コンポーネントは、通常

stopInternal()

サブクラスのミューを開始していきますこのメソッドの実行中に org.apache.catalina.LifecycleState.STOPPINGに状態が変更されていることを確認してください。状態を変更すると、 org.apache.catalina.Lifecycle.STOP_EVENTイベントがトリガーされます。

あなたが詳細に何が起こるかを確認したい場合は、 org.apache.catalina.util.LifecycleBaseの最新バージョンの 1のコードを見てください。

+0

ご協力いただきありがとうございます – Hasan

関連する問題