2010-12-01 16 views
1

標準のJava Webアプリケーションを起動するために埋め込みJettyを使用しています。私は私のアプリを起動し、それを参照し、すべてが動作しているように見えることが可能という点で、すべてが正常に動作しますWebappの起動に失敗しましたが、Jetty LifeCycleは「開始済み」と回答しました

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.util.component.LifeCycle.Listener; 
import org.eclipse.jetty.webapp.WebAppContext; 

... 

Listener listener = ...; 
Server server = new Server(8080); 
WebAppContext webapp = new WebAppContext(); 
... 
webapp.addLifeCycleListener(listener); 

server.setHandler(webapp); 
server.start(); 
... 

この:私のランチャーは、このようなものです。

しかし、私はランチャーにエラー報告を追加しようとしています。私は一時的にServletContextListenercontextInitialized()メソッドで例外をスローするようにWebアプリケーションを設定しました。例外がスローされ、

ERROR org.eclipse.jetty.util.log Failed startup of context [email protected] 

のログメッセージが表示されますが、私のLifeCycleListenerは失敗イベントを受信しません。実際には、開始イベントを受け取り、WebAddContextはリスナーに渡され、LifeCycle#isFailed()の場合はfalseを返し、LifeCycle#isRunning()の場合はfalseを返します。

Webアプリケーションをブラウズすると、503のサービスを利用できないというエラーが発生します。

これはJettyバージョン7.0.1.v20091125と7.2.1.v20101111で発生します。 Jetty 7 api docsを参照してください。

答えて

2

WebAppContextは、Heriの答えに対する私のコメントに従って、例外を取り除きます。それ以外の場合は、AbstractLifeCycleによってキャッチされ、失敗イベントが送出されます。これは私のところでほとんどの方法を取得します:

public class ThrowyWebAppContext extends WebAppContext { 
    @Override 
    protected void doStart() throws Exception { 
     super.doStart(); 
     if (getUnavailableException() != null) { 
      throw (Exception) getUnavailableException(); 
     } 
    } 
} 
1

コンテキスト要素のライフサイクルが正しく覚えている場合は、コンテキスト自体のライフサイクルに伝播されません(失敗したコンテキストはサーバー自体のライフサイクルに伝播されません)。文脈のSecurityHandlerServletHandlerおよびSessionHandlerのライフサイクルもチェックしてください。

+0

私は幸運のそれらのすべてにリスナーを接続しようとしました。私は[WebAppContextのソース](http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/webapp/WebAppContext.html#483)を見ています。このLog.warnは、私が見ているログメッセージと一致します(エラーレベルで表示されます...)。私がこの権利を読んでいれば、そのエラーは完全に飲み込まれます。 [AbstractLifeCycle](http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/util/component/AbstractLifeCycle.html#46)の関連部分は、例外がスローされたときに失敗を設定します。 'doStart()'をサブクラス化します。 – Patrick

+0

私は、WebAppContextを例外でよりスローに拡張しようとしていると思います。 – Patrick

+0

それは多かれ少なかれ働いた。私の投稿された答えを見てください。あなたのヒントをありがとう。 – Patrick

関連する問題