Skip to content

Conversation

@heguangyong
Copy link

🧩 Summary

This PR adds a link to a new community component: moqui-minio.

It provides enterprise-grade MinIO object storage integration for the Moqui framework, with production-ready architecture and comprehensive documentation.


🚀 Key Features

Core Capabilities

  • Bucket Management: Create, update, delete, and list buckets
  • Object Operations: Upload, download, delete, list objects (with large file support)
  • ElFinder Integration: Web-based file manager with full Chinese UI
  • Permission Control: Per-user bucket permissions (READ/WRITE/ADMIN)
  • Audit Logging: Full operation history with user/IP tracking

Enterprise Enhancements

  • Connection Pooling: Reusable MinIO clients with lifecycle management
  • Unified Configuration: Supports environment variables, XML config, and defaults
  • Exception Handling: Unified error classification and friendly messages
  • Security & Compliance: Sensitive info masking, access validation, and full audit logs
  • Monitoring: Connection status, usage statistics, and performance metrics

⚙️ Installation

cd runtime/component
git clone https://github.com/heguangyong/moqui-minio.git
cd moqui-minio
../../../gradlew jar

jonesde and others added 30 commits August 1, 2022 00:27
… and CVE-2022-2047 (low severity); update Shiro from 1.9.0 to 1.9.1 for CVE-2022-32532 (high severity); the Shiro vulnerability is not an issue for moqui-framework OOTB because the Shiro Servlet is not used to determine paths that need authentication or authz; the Jetty issue leaves sensitive data in memory, there are some configuration changes that can fix the issue but update is easier
…group setting for entity, view-entity and EntityDynamicView; after this change a group attribute on view-entity is still allowed, but if no specified will default to the group of the first member-entity instead of the system wide default as it was before which caused the issue reported in PR moqui#538
…e a bit flip on a public final boolean field is concerning
…e differently for EntityListIterator to avoid calling hasNext(); this improves performance and helps with a MySQL JDBC driver issue with useCursorFetch = true where ResultSet.isBeforeFirst() returns true when there are no results, and it should return false in that case
…eue in DB for better cluster support without distributed executor (moqui#545)

* Change ServiceCallJobImpl to use new ThreadPoolExecutor in ServiceFacadeImpl separate from ECFI worker pool, add new settings for this with default max queue size of zero so that queue is left in DB, generally more reliable behavior with less in the in-memory queue if a server crashes and will better split the load across multiple servers running jobs

* Use different ThreadFactory for different names for the general worker threads and the service job threads

* In ScheduledJobRunner track jobs ready but not run due to insufficient job slots, small changes to pool parameters for expected common case
…Actions iterator element did not auto close EntityListIterator instances; thanks to Deepak for reporting this on the forum
…nclude the catalog from the Connection; this is needed for MySQL which does not restrict meta data queries to the current connected database without specifying a catalog on these methods; this is tested with H2 and should be fine with Postgres as well, may cause issues with other databases and needs more testing
…tory() don't exclude the pageIndex from the save URL but ignore it when removing old history items
…, slf4j (2.0.2, now out of beta), snake yaml, and junit; note than even though SLF4J 2 is out of beta the Log4J2 adapter has not been updated so there is still a warning on startup
…, sometimes important to know about and matches the warning about unknown columns on a table
Due to a break in compatibility in the SLF4J binding, as of release 2.19.0 two SLF4J to Log4j Adapters are provided
- log4j-slf4j-impl should be used with SLF4J 1.7.x releases or older.
- log4j-slf4j2-impl should be used with SLF4J 2.0.x releases or newer.
https://logging.staged.apache.org/log4j/2.x/log4j-slf4j-impl/index.html
…n of openjdk (moqui#544)

* Remove myaddons.xml from .gitignore

* Add myaddons.xml and aws deploy workflow

* Allow open search with docker and clean up the docker workflow a bit

* Test aws action

* Test AWS Action

* Test AWS Build

* Test AWS lint

* Test AWS

* Fix docker open search and keep the basically same bash logic, Change default image because of deprecation of openjdk

* Fix database volume in moqui-ng-pg-compose.xml

* Remove aws workflow

* Remove myaddons.xml

* Keep compose-up.sh the same, and move docker-build.sh and compose-up.sh to build-compose-up.sh

* Flip build and compose-up
…tions where it was not already disabled, users should not need any special permission for these as access to DbResource is low level like a filesystem and access control is managed at higher levels
…t behavior of serializing the object and calling all get methods, can cause infinite recursion or errors for other objects that Databind can't serialize by default
…w-extra-path attribute in a XML Screen; first use in a new endpoint to get published wiki page, also added a couple more wiki page related endpoints but far from comprehensive for all or most in WikiServices.xml
…ceReference.putBytes() method behaves poorly because it wraps it in a stream and in DbResourceReference a stream is read into memory, creating a duplicate byte[], much better to go direct and avoid a duplicate buffer
…time ago, only happens when the allow any html setting on the WikiSpace is N because Y means don't filter or clean the incoming html; this was updated in the service ParameterInfo class along with the library but this change was missed; the upstream change in jsoup was renaming a class from 'Whitelist' to 'Safelist' to avoid use of a particular term (on a side note, they did not consider this a non-backward compatible change worthy of a major version bump)
… general effort to add UI and more config for E/S-ECA rules
FallingAKS and others added 27 commits September 15, 2025 11:05
更新网盘相关的基础配置
文件浏览器初始补充了debug日志,删除了多余的启动配置文件
@heguangyong
Copy link
Author

@moqui-maintainers
Hi, this PR adds the moqui-minio enterprise integration component.
The "Validate Gradle Wrapper" workflow is waiting for maintainer approval.
Please approve and run the workflow so all checks can complete. Thanks!

@acetousk
Copy link
Member

acetousk commented Oct 2, 2025

@heguangyong Can we get a PR for minio support that is ONLY for minio with separate PRs for jwt and localization etc?

@heguangyong
Copy link
Author

@acetousk Thank you for the valuable feedback! I completely agree with splitting the PR into focused, single-purpose contributions.

Proposed Approach

To make the contribution cleaner and more maintainable, I would like to propose creating a separate repository under the Moqui organization for the moqui-minio component, similar to other Moqui components like:

  • moqui/moqui-elasticsearch
  • moqui/moqui-hazelcast
  • moqui/moqui-camel

Benefits of This Approach

  1. Better component isolation - Independent versioning and release management
  2. Cleaner contribution workflow - Each feature enhancement can be a separate PR to the component repo
  3. Follows Moqui conventions - Consistent with how other integration components are organized
  4. Easier maintenance - Component-specific issues and features can be tracked independently

Proposed Steps

Step 1: Create moqui-minio Repository

If this approach is acceptable, could you please:

  1. Create a new repository: moqui/moqui-minio
  2. Grant me contributor access to push the initial code

Step 2: Initial Core Submission

I will submit the core MinIO functionality ONLY, including:

  • MinIO client connection management and pooling
  • Basic bucket operations (create, delete, list)
  • Object operations (upload, download, delete)
  • ElFinder integration for file management
  • Core service definitions and entities
  • English documentation only

What will NOT be included in the initial submission:

  • Localization support (Chinese translations) - will be a separate PR
  • Any JWT-related features (if applicable) - will be a separate PR

Step 3: Follow-up PRs

After the core is accepted, I will submit separate PRs for:

  1. Localization support - Chinese translations and i18n
  2. Any additional enhancements or features

Step 4: Update moqui-framework

I will close this PR (#670) and create a new minimal PR that simply:

  • Adds documentation reference to the moqui-minio component
  • Includes integration instructions (if needed in the framework itself)

Current Status

I have already:

  • ✅ Cleaned up the code and fixed all compilation issues
  • ✅ Tested the component successfully with JDK 11 on Windows
  • ✅ Verified all features work correctly (bucket management, file operations, ElFinder integration)
  • ✅ Prepared the core-only version (without localization)

The component is production-ready and includes:

  • Enterprise-grade connection pooling
  • Comprehensive error handling
  • Complete audit logging
  • Permission management
  • REST API support

What I Need

To proceed with this plan, I need:

  • Confirmation that creating moqui/moqui-minio repository is acceptable
  • The repository to be created by a Moqui org admin
  • Contributor access to push the initial code

Once the repository is ready, I can have the core functionality PR ready within 1-2 days.

Alternative Approach

If creating a separate repository is not preferred, I can alternatively:

  • Keep moqui-minio in my personal GitHub account: https://github.com/heguangyong/moqui-minio
  • Submit a minimal PR to moqui-framework that just adds a reference/link to the component
  • Manage the component independently with clear documentation for users

Please let me know which approach you prefer, and I'll proceed accordingly.

Thank you for your guidance on making this contribution fit well with the Moqui project structure!


发布后的跟进

预期响应 (3-7天)

场景 A: 同意创建仓库

  • 等待 moqui/moqui-minio 仓库创建通知
  • 收到 contributor 权限
  • 按照 CONTRIBUTING_STRATEGY.md 的阶段3执行

场景 B: 建议其他方案

  • 灵活调整,核心原则:只提交 MinIO 核心功能
  • 本地化和额外功能单独PR

场景 C: 需要更多信息
准备提供:

  • 功能详细列表
  • 架构设计图
  • 代码示例

如果7天无响应

礼貌地跟进:

Hi @acetousk,

I wanted to follow up on my proposal in PR #670 regarding the moqui-minio component.

I've prepared a clean, core-only version of the component (without localization) and I'm ready to proceed as soon as we decide on the repository approach.

If you have any questions or need additional information, please let me know.

Looking forward to your feedback!

Best regards,
[Your Name]

文件位置

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.