11

多くの Java x Scala の比較は、言語のみ (構文、コレクション API、アクターなど) に焦点を当てているようですが、エンタープライズ アプリケーション開発についてはどうでしょうか?

Scala を使用して分散型エンタープライズ システムを構築する場合、Scala 構文を使用して従来の Java EE アプリケーション (例: Scala 構文を使用する EJB 互換クラス) をコーディングし、それを Java EE コンテナーで実行しますか、それとも Java EE の代替品はありますか? Scalaエコシステム?

2番目の場合、これまでのところ私が見つけた最も近いものはタイプセーフスタックです。それは Java EE コンテナーの Scala の代替品ですか?

Akka は JMS (およびおそらくセッション Bean) の代替品ですか? それとも、Scala システムは引き続き Java EE サービスを利用しますか?

4

3 に答える 3

23

さて、
Scala / Akka は、システム開発における多くの一般的な落とし穴に対して、さまざまな概念を提供します。ほんの一部を Java EE と比較するには、次のようにします。

=> JavaBeans:
Mutable Data-structures は単なる悪であり、スレッドセーフではありません。それらをコンテナに入れても何も変わりません。scala が CaseClasses で強制するので、代わりに不変のデータ構造を使用してください。

=> EJB: EJB
の構成は最悪です。実際の問題は、EJB が再利用性という点で有用であるためには、実際にはほとんど当てはまらない高度な凝集性が必要であるということです。それらを容器に詰めても、それ以上良くなることはありません. Scala では、構成に trait を使用すると、f-bounded ポリモーフィズムによって保護されたコンストラクター注入を通じて、アドホックな構成を使用できます。人生はとても簡単です。

=> トランザクション:
はい、トランザクション マネージャーは既に改善を行っていますが、それを機能させるには大きな Java EE スタックが必要です。Scala では、akka が提供する Software Transactional Memory (STM) を使用するだけで完了です。

=> 持続性:
ORM は本当に必要か? squeryl.org のようなプロジェクトは、厳密に型指定された LINQ を Scala に追加します。Hibernate が行うような重いクエリ言語マッピングの代わりに、クエリを scala に統合し、コンパイラによって完全にチェックされます。もちろん、これはリレーショナル DB にのみ当てはまります。no-sql の場合、利用可能な他のソリューションがあります。

=>スケーリング?
Java EE のクラスタリング? もっと言う必要がありますか?
akka では、サーバーをいくつか追加するだけで、システムが拡張されます。なんで?リモート アクターはローカル アクターと同じように扱われ、アクセスされるため、他のすべては分散アクター システムを構成するだけの問題です。Akka は Erlang モデルに基づいているため、フル システム負荷の下で、ファイブ ナインのアップタイムではなく、ナイン ナインのアップタイムを探します。同時に、akka は非常に簡単で軽量なので、Android でも使用できます。Android で Java EE を実行してみませんか?
https://github.com/gseitz/DiningAkkaDroids

はっきりさせておきますが、おそらく 10 年前、Java EE は大規模なエンタープライズ グレードのソフトウェアを構築する方法に関する質問に対する答えでした。Spring がそれを使用可能にすると、それはおそらく当時利用可能な最良のソリューションでした。
今日、世界は大きく変化し、古い答えのほとんどは今日の現実にはもはや適合しません。Scala は完璧ではありませんが、実際に 1 行に絞ると次のようになります。

scala では、Java EE とコンテナーのセットアップにかかる時間の何分の一かで、実際のプログラミングを完了できます。

Spring でさえ、Java EE のフレームワークとして選ばれているため、scala に移行しています。

http://blog.springsource.org/2012/12/10/introducing-spring-scala/

Akka の概念とベスト プラクティスの両方から始めるには、「Akka Essential」という便利な本があります。

http://www.akkaessentials.in/2012/12/adding-turbchargers-to-jee-apps.html

于 2013-02-08T00:13:42.063 に答える
2

Akkaは確かにJMSの一種の「代替品」です。このアイデア(そしてあなたの質問)の背後にあるのは確かにパラダイムの変化であり、私たちはそれを認識しなければなりませんが、この事実から始めて、メッセージパッシングから、akkaは次の将来にいくつかの用途で非常に広く使用される機会があったと思います分散型etherogeneusコンカレントプラットフォーム間の統合。

Typesafeスタックはスタックであるため、JavaEEコンタニエに関して考えるのは役に立たないことがわかりました。

そして最後に、最初の答え:EJB構文を使用する場合は、アノテーションの使用を検討してください。Javaとほぼ同じ方法で、EJBに加えて、scalaの「シンタックスシュガー」を作成する機会が必要です。

于 2013-02-08T00:01:06.040 に答える
2

Java EE が必要な場合は、すぐに Java EE を Scala で使用できます。しかし、Scala コミュニティーの中で Java EE から離れたくない(または避け続けている) 人を私は知りません。

于 2013-02-08T00:01:37.933 に答える