7

これはJavaRebelが行うことだと聞きましたが、ユーザーが以前のバージョンでアクティブな状態を維持できるようにしながら、EARの新しいバージョンをデプロイする他の良い方法はありますか?アプリケーションサーバーにはJBossを使用しています...

4

4 に答える 4

5

それは JavaRebel が行うことではありません。JavaRebel (説明によると) は、メモリ内のクラスをホットリプレースします。更新されたクラスがクライアントのロジックを壊す可能性があるため、システムへの既存の接続の場合は受け入れられません。

私が働いていた会社が同様の問題を抱えていたことがあり、次のように解決されました。

  • スマートルーターをロードバランサーとして使用
  • 新しいバージョンは、(新しい) クラスターのノードの 50% にデプロイされました
  • 新しい接続はこれらの更新されたノードに厳密に配信され、古い接続は古いノード間でバランスが取れていました
  • 古いノードはオフラインにされました (ノードごとのクライアント数を制限内に保つために、1 つずつ)
  • 同時に、新しいバージョンがオフラインの「古い」ノードに展開され、それらが新しいノードとして起動されました
  • EJB クラスタリングが原因で、セッションと Bean が他の古いノードによって取得されました
  • 最終的に (数時間で) 古いノードが 1 つだけ残り、古いバージョンのインスタンスが 1 つになり、古いバージョンを使用しているすべてのクライアントがそれに接続されました。
  • 最後の古いクライアントが切断されたとき、そのノードはあまりにもダウンしていました

さて、私はネットワーキングの専門家ではないので、多くの詳細 (ルーターのハードウェアが何であったかなど) をお伝えすることはできません。私の理解では、これは非常に簡単にセットアップできますが、私の記憶が正しければ、アプリケーションの新しいバージョンをデプロイするために追加の Weblogic ドメインをセットアップする必要がありました (そうしないと、JNDI 名で古いドメインと競合することになります)。

それが役立つことを願っています。

PS Ichorus は、アプリがクライアントのサーバーに展開されているというコメントを提供しました。したがって、ルーターのトリックは実行できない可能性があります。現在、実行可能な解決策は 1 つしかありません (今は 21:52 です。見落としている可能性があります :)) --

  • 「バージョン管理された」JNDI 名を使用して新しいバージョンを開発します。たとえば、Customer Bean がバージョン 1 で ejb/Customer の下にあった場合、バージョン 2 では ejb/Customer2 の下になります。
  • 安定した基本インターフェース (ファクトリー・スタイル) を備えたアプリケーションにビジネス・ファサードを持たせ、Customer Bean を要求されたときに、最もバージョンの高い JNDI 名を見つけようとします (もちろん、すべての呼び出しではなく、1 時間ほどキャッシュすることができます)。 )。そのファサードは別のアプリケーションとして展開できます (また、展開する必要があります)。更新されることはありません。
  • これで、すべての新しいクライアントがデプロイされた最新のアプリケーションにアクセスできるようになり、アプリケーションが競合することはなくなりました。

このアプローチには慎重な計画とテストが必要ですが、私見では機能するはずです。

最近、いくつかのアプリケーションを同様の方法で変更して、同じドメインに共存できるようにしました (異なるデータ ソースに同じ JNDI 名を使用する前に)。

于 2008-10-21T19:02:36.363 に答える
1

ロード バランサーの使用に関する Vladimir の提案は、目的を達成するためのかなり確実な方法です。必ずしもハイエンドのハードウェア ロード バランサである必要はないことに注意してください。むしろ、JBoss サーバーの前にネイティブ Web サーバー (Apache または IIS) と mod_jk または mod_proxy を配置すると、1 つの共通 Web ファサードを維持し、EAR のアップグレード時に適切なロードおよびルーティング ルーチンを実装できます。

//ニコラス

于 2009-01-04T06:48:51.287 に答える
1

私が理解しているように、WebLogic には並列デプロイメントと呼ばれる機能があり、EAR バージョンのアップグレード中のダウンタイムをなくすことができます。既存のアプリケーションを停止せずに新しいバージョンを展開できます。新しいバージョンが正常に展開されると、古いバージョンから新しいバージョンに透過的に切り替えることができます。

他のアプリケーション サーバーがこれをサポートしているかどうかはわかりません。

参照:http://edocs.bea.com/wls/docs100/deployment/redeploy.html#wp1022490

于 2008-10-22T09:22:56.063 に答える
0

OSGIフレームワークを使用してSpringを調べたいと思うかもしれません。 http://www.springframework.org/osgi

于 2008-10-22T02:27:09.867 に答える