Skip to content

Conversation

@mitonize
Copy link
Collaborator

概要

#111 の対応として対Factory初期化フロー制御をServlet init-param方式で実装してデフォルトでは互換動作としました。

enableBackwardOrderLoadingtrue 指定されたときは新しい読み込み順(WEB-INF → META-INF → Built-in の順)で探索し、最初に見つかった有効なものが採用されます。未指定あるいはfalseが指定された場合は、これまでと同じ動き(Built-in → META-INF → WEB-INF の順で探索し、全てを読み込みながら後のものが前のものを上書き)となります。

変更内容

1. FactoryFactory.java

Servlet init-param対応の制御メソッドを追加:

  • isDisabledBackwardOrderLoading(): 読み込み順序の状態確認
  • setEnableBackwardOrderLoadingOverride(): init-param値の反映

2. MayaaServlet.java

  • applyInitParams() メソッドで Servlet init-param を読み込み
  • enableBackwardOrderLoading パラメータをサポート

3. FactoryFactoryImpl.java

getFactory() メソッドをリファクタリング:

  • collectSources(): ソース探索ロジック分離
  • loadFactoryBackward(): 逆順読み込み
  • loadFactoryForward(): 順順読み込み

4. ProviderFactoryImpl.java

FactoryFactoryImpl と同様のリファクタリング

5. テスト整備

  • FactoryFactoryImplTest.java: override機構テスト
  • LoadOrderTest.java (新規): Forward/Backward順序の統合テスト(9テストケース)

6. テスト用リソース

  • MockServiceCycleForLoadOrderTest.java: テスト用マーカークラス
  • WEB-INF/org.seasar.mayaa.cycle.CycleFactory: 読み込み順序検証設定

テスト結果

✅ 487/487 全テスト成功(478既存 + 9新規)

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses Issue #111 regarding incompatible factory loading order behavior introduced in version 1.3.0-a1. The implementation provides a servlet init-param mechanism to control factory initialization loading order, maintaining backward compatibility by default.

Changes:

  • Adds servlet init-param support (enableBackwardOrderLoading) to control factory/provider loading order
  • Default behavior (forward order): Built-in → META-INF → WEB-INF, with later sources overwriting earlier ones (backward compatible)
  • New behavior (backward order, when enabled): WEB-INF → META-INF → Built-in, using first valid source found
  • Refactors factory loading logic in both FactoryFactoryImpl and ProviderFactoryImpl with improved separation of concerns
  • Adds comprehensive test coverage (9 new tests) for the new functionality

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src-api/org/seasar/mayaa/FactoryFactory.java Adds static fields and methods to control backward/forward loading order via init-param override
src-impl/org/seasar/mayaa/impl/MayaaServlet.java Implements applyInitParams() method to read and apply enableBackwardOrderLoading parameter
src-impl/org/seasar/mayaa/impl/FactoryFactoryImpl.java Refactors factory loading into separate methods: collectSources(), loadFactoryBackward(), loadFactoryForward(), and adds validation
src-impl/org/seasar/mayaa/impl/provider/ProviderFactoryImpl.java Similar refactoring as FactoryFactoryImpl for service provider loading
src/test/java/org/seasar/mayaa/impl/FactoryFactoryImplTest.java Adds test methods for override mechanism and ensures proper cleanup
src/test/java/org/seasar/mayaa/impl/provider/LoadOrderTest.java New comprehensive test class with 9 test cases covering forward/backward loading scenarios
src/test/java/org/seasar/mayaa/impl/cycle/web/MockServiceCycleForLoadOrderTest.java Test marker class to verify which configuration file was loaded
src/test/java/org/seasar/mayaa/impl/provider/WEB-INF/org.seasar.mayaa.cycle.CycleFactory Test resource file for load order verification

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@mitonize mitonize merged commit b88cef8 into master Jan 29, 2026
1 check passed
@mitonize mitonize deleted the mitonize/issue111 branch January 29, 2026 15:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants