私は現在、Hibernateを使用してJ2EEアプリケーションを作成しており、Tomcat上で実行しています。プロジェクトはいくつかのセクション(DAO、サービス、コントローラ(サーブレット)、ビュー(JSP))に分かれています。 DAOとサービスはシングルトンです。コントローラとサービスを切り離すために、私はサーブレットのフィールドとしてサービスインタフェースへの参照を格納します。 Sonarqubeは、これらのフィールドを一時的にマークする必要があること、またはサービスクラスでSerializableを実装する必要があること、またはこれらのフィールドを削除する必要があることを示します。だから、サーブレットにフィールドを持つことは悪いですか?私はそれらを一時的にマークするだけですか?サーブレットのフィールドにサービス層オブジェクトがある
1
A
答えて
1
サーブレットのインスタンスフィールドに、結果のオブジェクトグラフが不変またはステートレスである限り、オブジェクト参照を格納することは完全に安全です。これが当てはまらない場合は、並行性の問題が発生します。
技術的には、シリアライズを使用して制御されたシャットダウン(または都合のいいとき)中にいくつかのコンテナがサーブレットの状態を保存するため、これらのフィールドにはtransient
修飾子を適用する必要があります。その結果、サーブレットはサービス参照フィールドを復活させるためにprivate void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException
メソッドを実装する必要があります。
詳細については、java.io.Serializable javadocsを参照してください。
1
同じインスタンスが異なるスレッド間で共有されているため、サーブレットで変数を宣言して使用することはお勧めできません。
Webコンテナによっては、サーブレットの状態が永続化することがあります。このようなシナリオでは、コンテナによってスローされるエラーが存在する可能性があるという警告が表示されます。
関連する問題
- 1. サービス層はHttpContextにアクセスする必要がありますか?
- 2. サービス層
- 3. サービス層のJsonResult
- 4. n層ビジネス/サービス層設計
- 5. プライシング層とサービス層とインスタンスサイズ
- 6. 私のファイルがあるサーブレット
- 7. Javaまたは唯一のリポジトリにあるサービス層
- 8. サービス層内のプライベートメソッド
- 9. RESTサービス層のアーキテクチャ
- 10. サービス層対ヘルパーオブジェクト
- 11. grailsサービス階層
- 12. サービス層とリポジトリ層の結合
- 13. 3層(3層)のオブジェクト(画像)を別のオブジェクト(バイト)に変換
- 14. コントローラからサービス層にアクセス
- 15. 最初のオブジェクトをnullにする前に、あるオブジェクトのフィールドを別のオブジェクトのフィールドに割り当てる
- 16. フィールドにオブジェクトがあるときにグリッドの空のテーブル
- 17. 私のサービス層のサービスは、別々のプロジェクト/ DLL /アセンブリに存在する必要がありますか?
- 18. サーブレットにマッピングがあり、サーブレットが見つかりません
- 19. サービス層はコントローラとモデル(マッパー)の間にありますか?
- 20. 3層アーキテクチャのWebサービスはどこにありますか?
- 21. Umbracoハイブとサービス層
- 22. J2EE - サービス層設計
- 23. サービス層とUIインターフェイス
- 24. サービス層のユニット・テスト・ビジネス・ロジック
- 25. Java Swingアプリケーションのサービス層
- 26. サービス層のPython/Flaskベストプラクティス
- 27. Magento2 - サービス層内のデータベーストランザクション
- 28. 別のサーブレットからサーブレットのサービスを呼び出す
- 29. サービス層でHttpServletRequestにアクセスするのがベストプラクティスですか?
- 30. サービス層と呼ばれるアクションメソッドがあるかどうかをチェックするユニットテスト