タグ付けされた質問 「spring」

Springは、堅牢なJava / Java EEアプリケーションを構築するためのモジュールベースのオープンソースフレームワークです。

2
EJB 3の代わりにSpring + Hibernateが優先されますか?
私の考えでは、新しいJEEプロジェクトが開始されると(これらの技術が適用される場合)、人々はEJB 3ではなくSpring + Hibernateの組み合わせを使用することを好みます。 若手プログラマーにもアドバイスされているようです、EJBの代わりにそのために行くことているようです。 これは個人的な好みですか、それとも適切な理由がありますか?(たとえば、EJBまたは技術の肥大化に対するパフォーマンスの理由または学習曲線に対する不信を引き起こした以前のEJBバージョンによって作成された個人的な傷跡)?

1
サーバーとクライアント間でインターフェースを共有するのはなぜそんなに悪い考えなのですか?
HTTPサーバーとそのクライアントの間でインターフェースを共有する方法を見つけたとき、Spring Cloud Netflixのドキュメントを読んでいました。彼らはこの例をマイクロサービスに使用していますが、一般的なHTTP通信に拡張できない理由はありません: // The shared interface, in a common library public interface UserService { @RequestMapping(method = GET, value = "/users/{id}") User getUser(@PathVariable long id); } // The controller, on the server @RestController public class UserResource implements UserService { } // The same interface used for the client @FeignClient("users") public …

2
Java Spring for Beginnerを使用したRESTfulサービスの構造
私はJava Web開発スキルの点で比較的新しいです。APIについて私が少ししか理解していないことから、RESTfulサービスの良い候補になると思うプロジェクトがあります。私はこれがどのように構成されているのかを詳しく説明しようとしていますが、Google検索やすでに持っている資料を読むという点では実際にはどこにも行きません。この投稿が、このトピックに関する私の知識と仮定の観点から、いくつかの検証やリダイレクトをもたらすことを望んでいます。 私の現在の仮定は、RESTfulサービスが次の構造を持つことです。 データベースデータ(SQL)。 ORM(私はCPOと呼ばれる比較的人気のないORMを使用していますが、ほとんどの人はこれをHibernateに置き換えるだけです)。 ORMと通信してデータを取得するメソッドを持つJavaマネージャークラス クラス/クラスはハンドルがマッピングおよび使用を要求することをAのJavaコントローラ@ResponseBodyに指示する/ HTTP動詞を介してデータの処理方法のURLとアクションを処理(http://mysite.com/computers/dellがあるかもしれないGET単語「デル」とのリクエストURLは、Dellコンピューターに関する情報のJSON配列を返すパラメーターです)。 このサービスは、Spring Bootで作成するか、何らかの形で独立して他のアプリケーションから独立させる必要があります。 上記が正しいと仮定すると、(非常に基本的なレベルで)データを消費および使用するために任意のアプリケーションが使用できるRESTfulサービスがあります。 そこで、Webアプリケーションを作成するとします。コンピューターハードウェア情報に関するWebアプリを作成しており、Springを使用してこのWebアプリを作成しているとします。私の仮定は次のとおりです。 私は、JSPとしてHTML、CSS、およびJavaScriptインクルードを持つJSPとして多数のビューを持っています。JavaScriptは、必要に応じてこのアプリケーションのコントローラーへのAJAX呼び出しを処理します(以下)。 このWebアプリには、アプリのURLリクエストとルーティングを処理する独自のコントローラーもあり、コントローラーは、たとえば、ModelAndViewオブジェクトまたはそれらの行に沿ったものを使用して、RESTfulサービスのコントローラーと「通信」し、渡されるデータを取得します、表示するためにそのデータをビュー(Javascript、JSPなど)に戻します。 私は正しい道にいますか?RESTfulサービスには認証の側面もあることは理解していますが、概念的にはまだありません(そして、私のプロジェクトはプライベートネットワークで使用されるため、現時点ではセキュリティは優先されません)。 洞察、批判、知識、フィードバック、または明確化は大歓迎です。

1
2000以上のクライアントマシンのアプリケーションサーバーとしてのRESTサービス。それは良い考えですか?
2000以上のマシンにデプロイされるjavaFxのUIを使用してシステムを構築します(最小は2000ですが、さらに多くなります-5000台のマシンに到達できます)。 他の理由/制限のため、マシンにインストールする必要があるため、Webブラウザーインターフェイスでは実行できません。 2000台以上のマシンは、異なる地理的ロケーショングループに属します。一般に接続は良好ですが、より多くの遠隔地ではそれほど良好ではない場合があります。 データベースに直接アクセスする代わりに、Spring + Spring Boot + Spring Data(java)を使用してRESTサービスクラスターを構築することを考えています。 RESTサービスはJsonを受け入れて返します。 私はそれが良い考えだと思う: サービスはデータベース接続プールとして機能します(データベースで2000以上の接続を行うと問題が発生すると思います)。 一部のクエリを処理するために、他の読み取り専用データベースへのログ配布を備えたデータベースを使用することができます。 より多くのマシンを追加してRESTサービスを実行できるため、スケーラビリティが向上します。 セキュリティおよび帯域幅節約の理由で、圧縮されたHTTPSを使用することができます。 2000以上のマシンを再デプロイせずに、ビジネスエンティティに集中的な変更を加えることができます。 他のシステムとの統合性が向上します(RESTサービスをポイントするだけです)。 それは本当に良いアイデアですか? 肯定的または否定的な経験を共有できますか? ありがとうございました。
11 java  design  rest  spring 

3
DDD-貧血ドメインモデルはアンチパターンですか?リッチドメインモデルを使用しているのでしょうか。[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 貧血ドメインモデルは、明らかにオブジェクト指向の原則などに反するため、EvansとFowlerによって以前から批判されていました。DDDコミュニティは、この発言と明確に一致しています。 しかし、近年、これはアンチパターンではなく、SOLIDの原則に従う例であると主張する意見の相違があります。 私は長年、Spring Frameworkを使用して作業してきました。すべての会社のすべてのプロジェクトには、貧血モデル(JPAエンティティ)で動作するリポジトリを使用して、ビジネスロジックを含むサービスレイヤーが常にあります。さらに、ほとんどのサンプルは、Springの公式のサンプルでさえ、この作業方法を示しています。 私の質問は次のとおりです。貧血ドメインモデルは依然としてアンチパターンと見なされていますか?私たち全員が(DDDに関して)間違ったことをしたことがありますか?リッチドメインモデルを持つことはSOLIDの原則に違反すると思いませんか?

1
既存のレガシーWebアプリを移行してOAuth2を使用する方法
私は現在、自家製の承認と認証システムを使用して、100万人近くのユーザーがいる15歳のレガシーモノリシックWebアプリケーションを持っています。ハッシュアルゴリズムなど)。 今後12〜18か月間、主にUIに重点を置いてアプリケーションのオーバーホールを行いますが、基盤となるパーツもゆっくりとアップグレードします(Spring、Spring Securityなどへのアップグレード)。このプロジェクトでは、モジュールごとにUIのアップグレードに取り組むことにしました。各モジュールが完成したら利用可能にする。モノリスを個々のWebアプリに分割する絶好の機会(すべて同じUXデザインを維持)。 これを計画しようとして私が行き詰まっているのは、認証と承認のレベルです。すべてのモジュールにまたがるクロスカッティングソリューションが必要です。これにより、ユーザーがあるWebアプリケーションから別のWebアプリケーションに誘導されたときに、シームレスな移行が実現します。ユーザーは異なるWebアプリケーション上にいることさえわかりません。OAuth2は完璧なソリューションのように聞こえます。 これを統合する方法を理解しようとするのに行き詰まっています。独自のカスタムOAuth2サーバーを構築する必要がありますか?それはひどい考えのように私を襲います。しかし、どうやって私は: すべてのユーザーアカウントと承認プロセスをサードパーティのOAuth2サーバーに移行する アプリケーションの残りの部分と一致するようにルックアンドフィールをカスタマイズします(これがどれほど簡単に/可能性が高いかわかりません) サードパーティのサーバーを介して接続するときに、一般的な「アプリケーションXYZがアカウントへのアクセス許可を求めています...」ポップアップを防止しますか?(例:Google OpenID、Facebookなど)。 私の目標は、ユーザーに現在の状態から新しい状態へのシームレスな移行を提供することですが、Webアプリケーションの外部ですべて認証および承認する個別のWebアプリケーションを作成する機能を提供することです。

2
開発から製品への構成の変更を効果的に追跡
この質問では、例としてSpring Bootサービスを取り上げていますが、これはどのようなテクノロジーでもかまいません。 次のように仮定します。 環境(dev / QA / prod)は異なるチームによって所有されています。これは、開発者が製品構成にアクセスできないようにする必要があることを意味します。 構成(application.propertiesとしましょう)は外部化されています。つまり、バイナリの一部ではありません。 同じバイナリ/パッケージ(service.jarとしましょう)が各環境にデプロイされ、自動デプロイメントによって制御されます バイナリアーティファクト(service.jar)への変更は自動的に各環境に伝達されますが、構成への変更には依然として手動による介入が必要であり、必然的に各環境で非同期化されます。 たとえば、開発チームが環境内のapplication.propertiesにいくつかのキーと値のペアを追加するとします。これらの新しいキーを記録する最良の方法は何ですか?それで、運用チームで展開が行われるときに、追加するキーが正確にわかっているため、新しいサービスを開始し、キーが見つからないために失敗することを確認するリスクが最小限に抑えられますか? 手動の手順が含まれることはわかっていますが、人々がこれをどのように処理し、最も効果的な方法を見つけるか知りたいです。

2
オフラインシステムとの同期
私は、データを生成してサーバーに送信するモバイルデバイス(アプリケーションが埋め込まれている)からのビジネスデータを同期するシステムを設計しています。同期される各行は、データベースに特定のビジネスログを生成します。 同期するデータによって、ビジネスデータの最終変更日よりも古い日付(同期データ内)のデータが生成された場合、それを無視して、ログをデータベースに追加するだけです。アップロードされたデータが処理されると、データベースからデータがフェッチされ、デバイスにダウンロードされます。 書き込み直後のこのダウンロードのため、同期は同期でなければなりません。このような何かが私の既存のソリューションを置き換えるのに十分な価値がある場合は、まだリーダー/ライターのパターンを持つことが可能です。より重要なことは、最新のデータをダウンロードできることです。そのデータは全体としてフェッチされ、現時点では差分は実装されていません(後で来る可能性がありますが、問題はありません)。 同じビジネスオブジェクトで複数の同期を実行している可能性があります。それは起こりそうにありませんが、起こり得、それを処理できることを望んでいます。組み込みモバイルアプリケーションを数日間再同期せずに使用しない限り、同期は数秒続くことが予想されますが、数分は続きません。 同期されるデータの量は、同期プロセスも大きくなることは想定されていません。 つまり、同期の方法で相互排除を使用することになります。より正確には、Javaを使用し、読み取り専用の同期をブロックしないように、同期プロセス全体ではなく、書き込みメソッドに同期を設定します。 私が知りたいのですが : この方法が理にかなっていますか?同期プロセスの量と時間は許容範囲です。 一般的に、どのような概念を検討する必要がありますか。おまけ:Springモジュールにこれらの概念の実装がある場合。

2
コードベースを依存性注入コンテナに徐々に移動する
多くの「アンチパターン」シングルトンを備えた大規模なコードベース、静的メソッドを含むユーティリティクラス、およびnewキーワードを使用して独自の依存関係を作成するクラスがあります。コードのテストが非常に困難になります。 依存性注入コンテナ(プロジェクトのGuice場合はGWT)にコードを徐々に移行したいと考えています。依存性注入についての私の理解から、それは全部かゼロかです。すべてのクラスは、Spring / Guiceによって管理されるか、まったく管理されません。コードベースが大きいので、コードを一晩で変換できません。ですから、徐々にそれを行う方法が必要です。 問題は、他のクラスに注入する必要のあるクラスから始めると、@Injectそれらのクラスがまだコンテナーによって管理されていないため、それらのクラスでシンプルを使用できないことです。したがって、これはどこにも挿入されない「トップ」クラスまでの長いチェーンを作成します。 私が見る唯一の方法は、Injector/アプリケーションコンテキストをシングルトンを通じてグローバルに利用できるようにすることです。これにより、他のクラスがそこからマネージドBeanを取得できるようになります。しかし、それcomposition rootはアプリケーションに明らかにしないという重要な考えと矛盾します。 もう1つのアプローチはボトムアップです。「高レベル」クラスから始めて、依存関係注入コンテナーにそれらを含め、ゆっくりと「小さい」クラスに移動します。しかし、まだグローバル/スタティックに依存しているこれらの小さなクラスをテストできるので、私は長い間待たなければなりません。 このような段階的な移行を実現する方法は何でしょうか? PS 依存性注入への段階的アプローチという質問はタイトルは似ていますが、私の質問には答えません。

4
春-構成上の混乱?
Springをどこかで読んだところ、設定よりも便利です。しかし、Springの人々は、構成に対して非常に多くの変更を取り入れているため、XML構成または注釈を使用することに本当に混乱しています。 XMLと注釈の使用について、誰でも確実な方法論または経験則を提案してほしい。 SOの例は、私のような多くの初心者が構成について混乱していることを示しています。 リンク-1 私は、機能の背後を把握していないようだ<context:annotation-config>と<context:component-scan>。 私が読んだものから、それらは異なる注釈(@ Required、@ Autowiredなどと@ Component、@ Repository、@ Serviceなど)を処理しているようですが、私が読んだものからは、同じBeanポストプロセッサクラスを登録しています。 さらに私を混乱させるために、annotation-config属性があります<context:component-scan>... リンク2 私はまだコンポーネントスキャンタグを持っています: <context:component-scan base-package="com.mycompany.maventestwebapp" /> しかし、私は別のタグ(同様のタスクを持っているように見える)も持っています。これは次のタグです。 <annotation-driven /> これら2つのタグの違いは何ですか?他の「奇妙な」ことは、前の例(注釈駆動型タグを使用しない)は、Spring MVCテンプレートプロジェクトを使用してSTSによって作成されたプロジェクトと非常に似ているが、注釈駆動型タグを構成から削除した場合です。ファイルは、プロジェクトが実行され、私に次のエラー与えることはありません:HTTPステータス404を- ... Spring 3.2はプロキシ用にcglibを必要としなくなりましたが、下位バージョンはcglibを使用します。SpringSourceブログからの引用 そのようなプロキシを生成するために、Springはcglibと呼ばれるサードパーティのライブラリを使用します。残念ながら、このプロジェクトは現在アクティブではありません。Spring 3.2では、SpringがデフォルトでJavassistを使用する可能性が非常に高いです。 これらは、Springが構成上の混乱であることを示唆するのに十分ですか?
9 java  spring 

1
インターフェイスを動的に実装する新しいJARをプラグインするにはどうすればよいですか?
背景:自分や他の開発者が実装するインターフェースの開発に取り組んでいます。このインターフェイスにより、ユーザーは新しい機能コードをシステムに「プラグイン」して、新たに使用することができます。この新しいコードは、すでに実行中のサーバー/アプリケーションから呼び出されます。(TLDR:オンザフライでアプリケーションにプラグインをインストールする機能を開発する必要があります) これまでにインターフェースで行ったすべての作業は、内部コーディングの目的で行われており、外部に公開されることはありません。ユーザーが新しいコード実装インターフェースをプラグインできるようにするために私が考えることができる唯一の方法は、ユーザーが実装クラスを含むJARファイルをフックし、何らかの方法でそのクラスシグネチャを呼び出し用に定義することです。これは以前に行われたことのように思えますが、私はコーディングの側面に触れたことはありません。 サーバー/アプリケーションの実行時に新しいJavaコードのこのプラグインを許可するために使用できるフレームワークはありますか?私は以前にAPIを使用したことがありますが、より多くのWebサービスでは、コアインターフェイスを「実装」せずにサービスを消費している場所を明らかにします。 参考までに、メインアプリケーションにSpringを使用してJavaバックエンドを使用しています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.