3

現在、Web インターフェイスを持たず、Web コンテナーで実行されていない既存の Java アプリケーション (Spring ベース) があります。起動プログラムとうまくパッケージ化され、機能します。

私がする必要があるのは、いくつかの管理タイプのもののための管理 Web インターフェイスを追加し、リアルタイムのメトリックを取得し、おそらくいくつかのグラフを追加して、すべてが機能していることをユーザーに知らせて、あたたかくぼんやりとした感覚をユーザーに与えることです。私たちは Spring ショップであり、一部の Web アプリケーションは既に Spring MVC を使用しているため、それは私たちにとっては理にかなっていますが、社内の Spring 担当者からどのように進めるべきかについての提案には満足していません.

この Web インターフェースを追加するには、どのような方法が理想的でしょうか?

  • アプリケーションを Web アプリケーションに変換し、Web コンテナーでアプリケーションを起動します。私はこのアプローチにあまり熱心ではありません。Web 層は、実際にはプライマリ アプリケーションの二次的なものだからです。
  • war としてパッケージ化する別のプロジェクトを作成し、既存のアプリに Jetty を埋め込み、war をロードします。コンテキスト ローダー リスナーを使用して、アプリケーションのルート コンテキストを Web アプリケーションのスプリング コンテキストの親にすることができると思います。これには、私のMavenプロジェクトを2つのプロジェクトに分割することが含まれます。プライマリ アプリケーションが Web 対応ではないため、Web 層とプライマリ アプリケーション間の通信に既存の Web テクノロジを使用できません。
  • Jetty を埋め込み、Spring MVC のものをアプリに直接配置します。私は以前にこのアプローチを行ったことがありますが、いくつかの醜さを伴います - たとえば、JSP タグ ライブラリを私の jar に展開します。

ここでいくつかのきれいな分離について何か考えはありますか?

また、私の現在の jar には、いくつかのシェル スクリプトを起動するいくつかのユーティリティ アプリケーションが含まれています。純粋な WAR ルートに進むと、これはそれほど簡単ではなくなります。なぜなら、Java を war ファイルに向けて、実行するクラスを選択することができないからです。

ありがとう。

4

2 に答える 2

2

Web がアプリケーションへのマイナーな追加にすぎないというのが本当なら、それを WAR に移行してサーブレット コンテナーにデプロイするのはやり過ぎかもしれません。Jetty や Tomcat である必要はありませんが、Web サーバー/サーブレット コンテナーの組み込みははるかに簡単に見えます。JDK に組み込まれている Web サーバーを使用するか、または raw ソケットの上に Web サーバーを書き込むことができます。しかし、それを維持するのは地獄です。

読んでいるときに、さらに別の解決策が頭に浮かびます。

いくつかの管理タイプのもの、リアルタイムのメトリック、およびおそらくいくつかのグラフを取得するための Web インターフェイス

インターフェイスは必要ないかもしれませんが、代わりにインフラストラクチャを監視しますか? JMX を確認してください (Spring は JMXを強力にサポートしています)。JMX を介してスタンドアロンの Java アプリに接続し、メトリクスを派手な方法で表示する 2 つ目の Web アプリケーションを作成します。もう 1 つの方法は、JMX を REST サービスに変換するJolokiaを介して JMX を公開することです。

このアプローチにはいくつかの利点があります。

  • 監視 API はユニバーサルであり、無料で入手できます

  • Web クライアントを使用する必要はありません。監視アプリケーションは完全に分離されています。

  • 最後に、元のアプリケーションへの変更は最小限です。この概念実証を確認してください: 12

于 2012-10-24T19:40:33.327 に答える
0

それは、既存の Java/Spring アプリの構造と、それが提供する API の量に大きく依存します。私はこれと似たようなことをして、別の Spring MVC プロジェクトを作成してアプローチし、既存の Java アプリを JAR 依存関係として指定しました。

これは Maven (または Ivy など) を使用すると簡単で、優れたデカップリングを提供します。秘訣は、Spring MVC アプリでサービス クラスを作成し、依存する Spring アプリを介して単純な DAO クラスを介してデータにアクセスできるようにすることです。そのため、最初に、元の Java アプリの構造に依存すると述べました。DAO(impl)をプラグインできるデータアクセス用のAPIを提供できる必要があります。

これが簡単にできない場合は、Spring アプリを Spring MVC アプリに単純に変換することをお勧めします。私はこれを行った別のアプリに取り組みました。Maven を使用すると、ビルドで war ファイルまたは jar ファイル (またはその両方) を作成できるように指定できます。そのため、webapp (war 経由) または通常のアプリ (jar 経由) としてデプロイできます。はい、jar バージョンには少し肥大化がありますが、妥協する価値はあります。

Jetty を埋め込むか、war ファイルを介して Tomcat を使用するかという問題は、長所と短所がある完全に別の問題です。そもそも Web アプリを設計する際のアプローチに影響を与えるべきではありません。

于 2012-10-24T23:22:17.843 に答える