これはインタビューの質問として来ました。
インタビュアーは、Spring をすべての目的に使用して、Java EE フレームワークをまったく使用せずに済ませることができるかどうかを私に尋ねました。
私はイエスと答えましたが、彼はアプリケーションが分散されているかどうか、またアプリケーション サーバーのポイントは何かと尋ねました。
答えはわかりません。
Spring は、Java EE フレームワークが行うすべてのことを行いますか?
これはインタビューの質問として来ました。
インタビュアーは、Spring をすべての目的に使用して、Java EE フレームワークをまったく使用せずに済ませることができるかどうかを私に尋ねました。
私はイエスと答えましたが、彼はアプリケーションが分散されているかどうか、またアプリケーション サーバーのポイントは何かと尋ねました。
答えはわかりません。
Spring は、Java EE フレームワークが行うすべてのことを行いますか?
さて、春は広いです。そのため、ポイントごとに確認できます。私は Java EE の専門家ではありませんが、Spring は (すべてではないにしても) 多くの Java EE の問題をカバーできると確信しています。そして、Spring はアプリケーション内のほとんどのレイヤー/懸念事項を処理できると確信しています。
まずはSpring IOC。Spring IOC を使用してオブジェクト グラフを構成できます。レイヤーを実装するために必要なすべてのコンポーネントを構成するレイヤーで役立ちます。
Spring-MVC-Web: すべての Web アプリケーション要求を処理および提供するために、MVC Web コンポーネントを構成できます。かっこいいものが作れると思います。他のビジネス要素 (IPC - プロセス間通信を含む) を使用して、Web 応答とその必要な構成を構成します。
Spring Security は Acegi の遺産です。これは、Web リソースへのロール定義のアクセスを定義するための Web フレームワークです。
Hessian も Spring のものかどうかはわかりません。とにかく軽量で、 RMI 風の他のプロセスのコンポーネントと通信するのに役立ちます。
うーん...永続性についてはよくわかりませんが、SpringにはJDBC、Hibernateなどのテンプレートがあるので、とにかく役立つと思います(提案が示すように、JmsTemplateとRestTemplateは他のビジネスコンポーネントとの通信に利用できます!)。
ここでの中心的な考え方は次のとおりです。アプリをゼロから作成できるため、すべての場合において、Spring はすべてのレイヤーで難しい/反復的なタスクを軽減するフレームワークを提供できます。春はそれをしますか?はい。
他の機能をチェックして、Spring に何かあるかどうかを確認してください。私はそれを賭けます。
深く言えば、Java EE は一連の仕様です (その一部は Spring チームによって提供されています!)
Spring のミッション ステートメントは「Java 開発の簡素化」です。
これは、次の手法を使用して行われます。
Spring と Java EE には「対」の関係はありません。
上記の手法を使用して、Spring Framework では (Java EE) 標準ベースのアプリケーションをより効率的に構築できます。
>Does spring do everything that the Java EE framework does ?
上記の内容に基づいて、この質問は「Spring は Java EE 仕様を構成するすべてのテクノロジーをサポート/実装していますか?」と言い換えることができます。- いいえ、しかし、それは、ほとんどの Java EE テクノロジでの開発を簡素化するために設定したことを実行します。
とは言うものの、この Java 開発の簡素化のトレードオフは、(Spring Framework の) かなりの量の知識をすぐに使えるようにする必要があるということです... (練習とグーグルが付属しています:))
>Can't we use Spring for distributed java applications?
できますよ。Spring には、考えられるほとんどのユースケースに対応するために、大量の Exporters/FactoryBeans および Clients(Templates) があります。
はい、Spring は、Java EE を使用せずに分散アプリケーションで使用できます。1 つの XA トランザクション内で MQ にメッセージを送信し、データベースを更新するために使用しました。
この記事によると、Spring は分散アプリケーションで単独で使用できることは間違いありません。
http://www.wrox.com/WileyCDA/Section/Why-Use-the-Spring-Framework-.id-130098.html
http://www.artima.com/forums/flat.jsp?forum=276&thread=204508
歴史的に(5年前?)Springは分散アプリケーション領域、特にデータベースクラスタリングで弱かった。それはもはや問題ではありません。分散コンピューティングは、Java EEがまだアプローチしていないクラウド技術を精力的に追求しているため、Springは最近さらに進んでいると言えます。
私はそうは思わない。基本的に、Spring は Java EE フレームワーク間の統合に関するものです。
私の考えでは、Spring の主な利点は、Java EE フレームワークのより重いコンポーネント (エンティティ Bean、セッション Bean) のいくつかを取り除き、それらを軽量の代替品に置き換えたことです。
私が思うに、Spring の主な利点の 1 つは、多くのコンポーネントを分離し、XML またはアノテーションを使用してそれらを結び付けることです。これにより、(実際のコンポーネントではなくモック コンポーネントを注入することにより) ユニット テストを簡単に記述できますが、これは、重量のある Java EE コンポーネントを使用する場合には容易ではありませんでした (EJB 2.1 エンティティ Bean のユニット テストは容易ではありませんでした)。
それ以来、Spring の多くの概念が Java EE 標準に入ってきたので、Java EE はもはや重いオプションではなく、Spring は、アプリケーション サーバー管理の接続プール (JNDI 経由)、トランザクション マネージャーなどの Java EE コンポーネントと連携すると主張します。 、クラスター化、フェイルオーバー、ロード・バランシング、Web リソースの提供などの追加機能を提供できるアプリケーション・サーバーを使用して、非常に簡単に管理できるキュー・マネージャー...
そうは言っても、Spring (VMWare) の背後にいる人々は独自のアプリケーション サーバー ( tcServer ) を持っています。これは Apache Tomcat に基づいており、Spring で使用される多くの接着剤を提供しますが、従来のアプリケーションの一部のように「重い」とは見なされません。サーバー (Websphere、Weblogic)。
これには、春の統合フレームワークを使用します。
Spring Integration を使用して分散アプリケーションを管理するために、Akka フレームワークを使用できます。
Akka はアクター モデルをソフトウェア トランザクショナル メモリと共に使用して、抽象化レベルを上げ、適切な同時実行およびスケーラブルなアプリケーションを構築するためのより優れたプラットフォームを提供します。
Akka フレームワークを使用して分散アプリケーションを構築する方法の詳細については、ステップバイステップのチュートリアルをご覧ください。
一般に、分散アプリケーションは Java-RMI を使用して Java で構築されます。この Java-RMI は、Java の組み込みシリアル化を内部的に使用してノード間でオブジェクトを渡します。