2013-08-13 6 views
5

以下の問題の文脈で、プレイ開始とプレイ実行の実行の違いを理解したいと思います。Playの実行と開始の違いは何ですか?

私の特定のユースケースはかなり複雑ですが、私はこのようにそれを簡素化します:起動時に

  • (Global.scalaの一部として)、私のPlayアプリケーションは、エントリに直接メソッド呼び出しを行っていますJavaアプリケーションXのポイント。
  • Xは初期化の一部として、Tomcatの埋め込みインスタンスを開始します。
  • Xの初期化の終わりに、Tomcatが起動していることを確認し、要求に応答します。

ここで私がこのアプリケーションでplay startを実行すると、Tomcatは起動していて、Xは満足していて、人生は続いています。

しかし、私がplay runを実行すると、Tomcatは初期化に失敗し、Xは応答待ちの状態になり、最終的にタイムアウトします。

play runを使用する主な理由は、開発用です。私はEclipseデバッガを添付してplay debug runを実行しています。

私はこれが過度の簡略化であることを認識していますが、私があなたから得ることを望んでいるのは、アプリケーションの動作に違いを生む可能性があるPlayの実行とPlayの違いです。

ここでは、Playのデフォルトスレッドプールのスレッド数をhttp://www.playframework.com/documentation/2.1.x/ThreadPoolsに変更してみましたが、運が足りませんでした。

再生出力とログには、この問題に関する有用な情報がありません。

私がプレイ2.1.1

答えて

8
  • play runを使用していますが開発モードでプレイアプリケーションを起動します。

    これは、クラスの自動再読み込み、テンプレートの自動コンパイルなどを可能にするカスタムクラスローダーの魔法を使って、プレイプロンプト(実際はSBT内)から実行されることを意味します。アプリケーションを実行するこのカスタム方法はおそらくTomcatの起動を妨げる要因

    Tomcatからのログ出力やスタックトレースがないため、Tomcatが起動しない理由をさらに詳しく説明することはできません。これは、カスタムクラスローダー(Tomcatなど)を隔離する別のコンテナ内でTomcatを起動するのと少し似ています。

    編集:私は血みどろの詳細を自分自身を知らないが、それはすべてのthe play run commandreloaderで起こります。マスターではmore documentedと思われますが、2.1.xと2.2.xの間で変更があるかどうかはわかりません。

  • play startは、生産モードでアプリケーションを実行するインタラクティブな方法です。

    これは、再生プロンプト(デタッチするにはCtrl+Dが必要)から対話的に実行され、バックグラウンドではなく(したがって、自動展開には適していない)という点を除いて、java -cp [...] YourMainClassの呼び出しと完全に同じです。

しかし、実際の生産のためにあなたがplay distコマンドを使用して、スタンドアロン・バージョンを用意する必要があり、その後in the documentationが説明するように含まれているスクリプトを使用して起動します。

+0

ありがとう@gourlaysama、これは参考になりました。私はsbt内で起こる魔法について深く掘り下げたいと思います。あなたはクラスローダーに言及しています。おそらく、これは問題の場所です。私はこれについてもっと詳しく知ることができるか知っていますか?私が言及したように、Tomcatのログは有用な詳細を提供していないようですが、何とかしなくても何も起こらないことを排除することはできません。 –

+1

どこに書かれているのか分かりません(ソース自体の外で)...私は魔法が起こるところへのリンクを追加しました。編集を参照してください。 – gourlaysama