banq/jivejdon
31.5
Weak · 22 September 2026
45.5k
lines of production code
Java
with JavaScript
7
measurements over time
What this system is
This system is a Java-based community forum and blog platform that manages user accounts, threaded discussions, and content publishing. It provides administrative tools for moderation, search indexing via Lucene, and system configuration, alongside features like rich text editing, social login integration, and SEO optimization. The architecture has been refactored to use a Hexagonal pattern with event-driven processing for asynchronous operations like notifications and caching.
How it got here
2018 — Modernization and infrastructure migration
67 changes.
The project underwent a comprehensive modernization, migrating the build system from Ant to Maven and introducing Docker support for deployment. The codebase was significantly refactored to replace legacy Prototype.js with jQuery, remove the obsolete mobile web interface, and update the UI with HTML5 standards and CKEditor. Concurrently, the architecture shifted towards a hexagonal model with new Struts actions, JAAS authentication, and improved SEO and caching mechanisms.
2019 — Hexagonal architecture migration
33 changes.
The project underwent a comprehensive architectural refactoring to adopt a Hexagonal (ports and adapters) design, restructuring the API, domain, and infrastructure layers. This period introduced extensive event-driven pub/sub mechanisms, concurrent-safe repository implementations, and new features such as Lucene search, social authentication, and asynchronous email delivery.
2023–2026 — SEO optimization and forum management features
4 changes.
This period focused on enhancing search engine visibility through JSP refactoring, semantic HTML adoption, and Baidu link submission integration. Concurrently, administrative capabilities were expanded with a new thread migration feature, while underlying infrastructure was stabilized by fixing navigation paths and layout issues following directory restructuring.
Features
Add CKEditor Autosave plugin with localization support
The CKEditor Autosave plugin has been added to the application, enabling automatic saving of editor content to the browser's local storage. This feature allows users to recover unsaved work if they accidentally close the tab or navigate away; upon reloading, the editor detects any previously saved content and prompts the user to restore it. The implementation includes localization strings for German (de), English (en), and Simplified Chinese (zh-cn) to ensure the recovery prompt is displayed in the user's preferred language.
application/common/ckeditor/plugins/autosave · high confidence
Add CKEditor base64image plugin
The application now includes the base64image plugin for CKEditor, enabling users to insert images directly from their local device as base64 strings or via external URLs without requiring server-side processing. This change adds the necessary plugin files, including the dialog logic and internationalization translations for multiple languages, to the common CKEditor installation.
(repo-wide) · high confidence
Add ability to move a thread to a different forum
Users can now change the forum section of an existing thread. This change introduces a new UI flow: a list page (forumList.jsp) allows authenticated users to select a target forum from a dynamically loaded dropdown and submit the change, while a result page (saveResult.jsp) confirms the operation or displays any errors. The feature requires authentication; unauthenticated users are blocked from accessing the move functionality.
application/message/threadToForum · high confidence
Add sitemap generation and URL management components
This change introduces the presentation-layer components for the sitemap feature. SitemapServlet generates XML sitemaps by querying forum threads and managed URLs via the SitemapRepository, supporting pagination and caching headers. UrlForm provides validation for URL entries, ensuring they start with http:// or https://. UrlListAction enables listing and retrieving URL models directly from the repository, supporting the admin interface for managing sitemap URLs.
src/main/java/com/jdon/jivejdon/presentation/sitemap · high confidence
Add tag search and management actions
New Struts action classes (HotKeyListAction, MethodDispatchAction, TagsListAction) have been added to the tag presentation layer. These actions enable users to search for tags via query parameters, retrieve lists of hot keys, and save new tags with authentication checks. The implementation integrates with existing TagService and AccountService components to handle tag-related requests.
src/main/java/com/jdon/jivejdon/presentation/action/tag · high confidence
Add user activity tracking and JSP pagination tag library
The application now includes a \UserCounterListener\ that tracks active sessions and maintains a real-time list of online users in the servlet context, exposing this data for display in the UI. Additionally, a new set of JSP custom tags (\MPageTag\, \IndexTag\, \PrevTag\, \NextTag\) has been added to the presentation layer to handle paginated navigation, allowing views to render page indices and previous/next links based on model list forms.
src/main/java/com/jdon/jivejdon/presentation/listener, src/main/java/com/jdon/jivejdon/presentation/taglib · high confidence
Added BBCode plugin for the rich text editor
The application now includes a BBCode plugin for the CKEditor rich text editor. This addition enables the editor to parse and serialize BBCode syntax, mapping BBCode tags (such as bold, italic, links, and images) to their corresponding HTML equivalents, thereby allowing users to input and output content in BBCode format.
application/common/ckeditor/plugins/bbcode · high confidence
Added Baidu search link submission capability
Users can now submit new forum thread links to Baidu for real-time indexing. This change introduces a new \BaiduSearchTempParams\ configuration class and a \BlogPingSender\ component that handles the asynchronous HTTP POST requests to Baidu's link submission API, including necessary SSL/TLS handling for secure communication.
src/main/java/com/jdon/jivejdon/spi/component/pingrpc · high confidence
Added CDN URL refresh capability and thread post event listener
The system now includes a new \CDNRefreshUrls\ model class to manage CDN cache invalidation URLs, supporting content delivery optimizations. Additionally, a \ThreadPostListener\ has been introduced to handle \TopicMessagePostedEvent\ by updating the latest three threads in a forum and refreshing associated forum data, laying the groundwork for post-thread notifications and CDN cache updates.
src/main/java/com/jdon/jivejdon/spi/pubsub/subscriber/postThread · high confidence
Added CKEditor 4.10.1 rich text editor
The application now includes the CKEditor 4.10.1 (Standard preset) rich text editor, providing users with a comprehensive WYSIWYG editing experience. This addition includes the core editor library and a build configuration that enables a wide range of features such as image uploading, table and list management, link handling, and multi-language support across dozens of locales.
application/common/ckeditor · high confidence
Added CKEditor AutoGrow plugin
The CKEditor AutoGrow plugin has been added to the application, enabling the editor window to automatically expand or shrink to fit the content size. This change includes the core plugin implementation and a sample configuration page demonstrating how to enable the feature and set maximum height limits.
application/common/ckeditor/plugins/autogrow · high confidence
Added CKEditor dialog and advanced tab plugins
The application now includes the CKEditor 'dialog' and 'dialogadvtab' plugins, enabling advanced dialog functionality and additional tab options (such as ID, language direction, styles, and CSS classes) within the rich text editor interface.
application/common/ckeditor/plugins/dialog, application/common/ckeditor/plugins/dialogadvtab · high confidence
Added ETag-based caching and duplicate-post prevention utilities
This change introduces several new utility actions in the presentation layer to improve performance and data integrity. ForumEtagFilterAction, TagEtagFilterAction, and ThreadEtagFilterAction now handle HTTP caching via ETags and Cache-Control headers, reducing redundant data transfers for forum, tag, and thread views by returning 304 Not Modified responses when content is unchanged. ThreadEtagFilterAction specifically extends cache expiration to one year for posts modified over a year ago. Additionally, PreventingMultiplePosts.java adds a token-based check to prevent users from accidentally submitting duplicate posts, and ServiceMethodSimpleAction provides a generic dispatcher for invoking service methods by name.
src/main/java/com/jdon/jivejdon/presentation/action/util · high confidence
Added JAAS datasource configuration for SSO
A new jaas.properties file has been added to the Tomcat documentation library to configure JAAS datasource settings. This allows users with a Single Sign-On (SSO) database to customize the JDBC connection by changing the JAAS\_DATASOURCE property to point to their specific database environment.
doc/tomcat · high confidence
Added JAAS-based authentication implementation
The application now includes a new Java Authentication and Authorization Service (JAAS) login module located in the \com.jdon.jivejdon.auth.jaas\ package. This feature introduces \JiveJdonLoginModule\ to handle user login and logout flows, utilizing \DefaultRolesProvider\ to fetch user roles from a database via JDBC and \DigestUtil\ to hash passwords using MD5. Supporting classes \User\ and \Role\ implement \java.security.Principal\ to represent authenticated identities, while \PropertiesUtil\ loads configuration from \jaas.properties\. This change adds the core authentication infrastructure required for container-based security integration.
src/main/java/com/jdon/jivejdon/auth/jaas · high confidence
Added OAuth integration actions for Google and Sina Weibo
This change introduces new Struts action classes in the account OAuth package to support third-party authentication. Specifically, it adds Google OAuth support via GoogleCallAction and GoogleCallBackAction, and Sina Weibo support via SinaUserCallAction and SinaUserCallBackAction. These actions handle the OAuth flow, including redirecting users to the provider's authorization URL, processing the callback with the verifier, exchanging tokens, and saving the account or linking the social identity to an existing user. A utility class, CallUtil, is also added to assist with URL construction and parameter handling during these flows.
src/main/java/com/jdon/jivejdon/presentation/action/account/oauth · high confidence
Added asynchronous short message handler for @user notifications
A new ShortMessageHandler component has been introduced in the SPI pub/sub subscriber layer to process ATUserNotifiedEvent instances. When an @user notification event occurs, the handler asynchronously dispatches the event via Guava's AsyncEventBus, triggering the creation of a Weibo-style short message through the ShortMessageFactory. This change enables non-blocking processing of user notifications within the system.
src/main/java/com/jdon/jivejdon/spi/pubsub/subscriber/sm · high confidence
Added utility classes for IP blocking, bean manipulation, and caching
The \com.jdon.jivejdon.util\ package now includes several new utility classes to support system operations. \BanIPUtils\ provides functionality to block IP addresses by executing system commands. \BeanUtils\ enables setting and getting properties on Java Beans via reflection. A set of classes (\BlockCacheKeyFactoryFixed\, \BlockCacheManagerFixed\, \BlockStrategyFixed\, \CacheKeyFixed\) implements a fixed caching strategy for block queries, managing cache keys and data retrieval. Additionally, \BoundedTreeSet\ offers a thread-safe sorted set with a maximum size limit, \ContainerUtil\ manages model and cache interactions, \EmailTask\ handles asynchronous email sending, \EmojiRegexUtil\ provides regex patterns for emoji detection, \ExpiringCacheEntry\ wraps cached values with expiration logic, \FiltersUtils\ handles HTML escaping and property filtering, \HttpClientUtil\ simplifies HTTP requests, and \ImageUtils\ supports image resizing and processing.
src/main/java/com/jdon/jivejdon/util · high confidence
Blog UI modernization, SEO improvements, and new interaction features
The blog interface has been updated with a new CSS theme (jivejdon5.css) and simplified header logic, removing legacy caching and mobile-specific meta tags. SEO is improved through the addition of URL slugs (e.g., /12334-tokenpinyin.html), canonical links, and the removal of nofollow attributes on internal links. User experience is enhanced with a new 'Like' (dig) feature for posts, updated pagination labels ('上页'/'下页'), and a new 'My Subscriptions' view. Additionally, the search functionality now posts to a new action, and the 'Home' link points to the main jdon.com domain.
application/blog · high confidence
Initial resource configuration for JiveJdon application
This change introduces the foundational configuration files for the application, including application properties for internationalized error messages (English and Chinese), JAAS authentication settings pointing to a JNDI datasource, and logging configurations for both Log4j and Log4j2. These files establish the baseline for user-facing error handling, security authentication, and system logging behavior.
src/main/resources · high confidence
Introduce AnemicMessageDTO for message data transfer
A new AnemicMessageDTO class has been added to the infrastructure layer to serve as a data transfer object for forum messages. This class provides a flat structure for presentation and persistence, containing fields for message metadata, attachments, and user details. It includes static factory methods to convert PostTopicMessageCommand and ReviseForumMessageCommand instances into this DTO format, facilitating the mapping of command data to the presentation and persistence layers.
src/main/java/com/jdon/jivejdon/infrastructure/dto · high confidence
Introduce Lucene-based search infrastructure for forum messages
The search subsystem now uses Apache Lucene (version 4.10.3) to index and retrieve forum content. A new MessageSearchRepository interface and its MessageSearchProxy implementation handle creating, updating, and deleting message indexes, while LuceneUtils configures the IKAnalyzer for text processing. A ReBuildIndex background task can repopulate the index from the database, and AppendMessageThread supports asynchronous indexing of new messages.
src/main/java/com/jdon/jivejdon/infrastructure/repository/search · high confidence
Introduce property, tag, and upload repository interfaces and DAOs
This change adds the infrastructure layer for managing forum, thread, and user properties, thread tagging, and file uploads. It introduces the \PropertyFactory\ interface and its \PropertyFactoryDao\ implementation to handle CRUD operations and caching for properties, the \TagRepository\ interface and \TagRepositoryDao\ implementation to manage thread tags and tokens (including slug normalization for tokens), and the \UploadRepository\ interface and \UploadRepositoryDao\ implementation to handle uploading, saving, and deleting attachment files.
src/main/java/com/jdon/jivejdon/infrastructure/repository/property · high confidence
Introduces domain command and event classes for message operations
The domain layer now includes new command objects (MessageRemoveCommand, PostRepliesMessageCommand, PostTopicMessageCommand, ReviseForumMessageCommand) and corresponding domain events (ATUserNotifiedEvent, MessageOwnershipChangedEvent, MessagePropertiesRevisedEvent, MessageRemovedEvent, MessageRevisedEvent, RepliesMessagePostedEvent, ThreadNameRevisedEvent, TopicMessagePostedEvent, UploadFilesAttachedEvent) to handle message posting, revision, removal, and notifications.
src/main/java/com/jdon/jivejdon/domain · high confidence
Introduces new Struts presentation actions for forum navigation and content listing
This change adds a suite of new Struts Action classes in the presentation layer to handle specific user workflows. MessageListAction and MessageListOwnerAction manage the display of message threads and owner-specific views, with MessageListAction now utilizing CompletableFuture for asynchronous loading of thread context and link lists. Navigation is handled by MessageListNavAction and MessageListNav2Action, which manage redirects and waiting states for new messages. Additional actions include ThreadListAction for browsing threads with sorting and caching, StickyListAction for displaying pinned/announced threads, MessageDigAction for retrieving dig counts via AJAX, and ThreadRedirectAction for handling 301 redirects from old numeric URLs to new slug-based URLs.
src/main/java/com/jdon/jivejdon/presentation/action · high confidence
Introduction of Struts presentation forms for account, forum, and message management
The \src/main/java/com/jdon/jivejdon/presentation/form\ package now contains a comprehensive set of Struts ActionForms to handle user-facing data binding and validation. This includes \AccountForm\ and \AccountProfileForm\ for user registration and profile editing, \MessageForm\ and \ThreadForm\ for creating and managing forum discussions, and \ForumForm\ for forum administration. The new \BaseForm\ class centralizes validation logic, while utility classes like \SkinUtils\ handle registration code verification. These forms serve as the presentation layer for account, content, and subscription features.
src/main/java/com/jdon/jivejdon/presentation/form · high confidence
New MessageCRUDService for handling forum message persistence
A new MessageCRUDService component has been introduced in the infrastructure layer to centralize the creation, updating, and deletion of forum messages. This service acts as the implementation for domain commands, handling the persistence of topics and replies via the MessageRepositoryDao, managing thread updates, and executing logical deletions that cascade to associated tags and threads.
src/main/java/com/jdon/jivejdon/infrastructure · high confidence
New SQL-backed sitemap generation and management SPI
The sitemap component now uses a dedicated SQL repository to store and retrieve URL data, replacing previous mechanisms. This change introduces a new data model (Url, Sitemap, UrlSet) and a helper for generating standard XML sitemap and sitemap index files via JAXB. The service layer handles CRUD operations for URLs, enabling the system to maintain up-to-date sitemaps for search engines based on the forum's content.
src/main/java/com/jdon/jivejdon/spi/component/sitemap · high confidence
New account management and social login components
This change introduces new SPI components for account management and social authentication. AccountManager now handles password recovery by validating security questions and sending new passwords via email. Social login support is added for Google and Sina Weibo, including OAuth parameter configuration (GoolgeOAuthParamVO, SinaOAuthParamVO), OAuth submission logic (GoogleOAuthSubmitter, SinaOAuthSubmitter), and Sina-specific access token handling (AccessToken). A new exception class, ForumMessageNotFoundException, is also added for error handling.
src/main/java/com/jdon/jivejdon/spi/component/account · high confidence
New admin console actions for forum management
This change introduces a suite of new Struts Action classes in the admin presentation layer to support specific administrative tasks. Administrators can now ban and unban IP addresses (BanIPAction), view and delete cache keys (CacheKeysAction, MethodDispatchAction), manage message rendering filters including reordering and property editing (FiltersAction), configure hotkeys (HotKeysAction), browse uploaded images (ImageListAction), toggle site-wide input permissions (InputSwitcherAction), and list/search users and their messages (UserListAction, UserMessageListAction). These actions serve as the controller components for the admin UI, wiring user requests to the underlying domain services.
src/main/java/com/jdon/jivejdon/presentation/action/admin · high confidence
New event subscribers for reply message processing
The system now includes three new domain event handlers for the 'addReplyMessage' topic: AddReplyMessage, which persists reply messages via MessageCRUDService; AddReplyMessageSearchFile, which prepares for search indexing (currently with a placeholder implementation); and AddReplyMessageZ, which handles cleanup and state updates. These handlers are registered as consumers of the addReplyMessage event and execute in alphabetical order, enabling asynchronous processing of reply message events through the event disruptor.
src/main/java/com/jdon/jivejdon/spi/pubsub/subscriber/addReplyMessage · high confidence
New map-reduce components for homepage ranking, author lists, and thread context
This change introduces a new set of classes in the \mapreduce\ package to support the homepage mixer, author leaderboards, and thread navigation. \ThreadApprovedNewList\ acts as a scheduled background job that caches approved thread IDs and periodically refreshes them, while \HomePageComparator\ and \ThreadDigComparator\ implement the ranking algorithms used to sort threads based on dig counts, view counts, and approval status. \AuthorList\ provides a sorted list of top authors by message count, and \ThreadContext\ handles the logic for retrieving previous/next threads within a tag context and managing reblog links. These components collectively power the new homepage sorting and thread discovery features.
src/main/java/com/jdon/jivejdon/spi/component/mapreduce · high confidence
New message presentation actions for editing, reblogging, and thread management
This change introduces five new Struts action classes in the message presentation layer to handle specific user interactions. MessageEditViewAction now populates the edit form with existing message data using an AnemicMessageDTO. ReblogLinkAction enables users to manage cross-references between threads by parsing URLs to extract thread IDs and saving/retrieving these links via the TagService. UpdateThreadNameAction and UpdateThreadToForumAction allow administrators or moderators to rename threads and move them between forums, respectively, including validation that the target forum exists. Finally, UploadShowAction serves uploaded attachment files (images/documents) with correct content types and cache-control headers, falling back to a blank image on errors.
src/main/java/com/jdon/jivejdon/presentation/action/message · high confidence
New presentation actions for account, blog, messaging, and subscription features
This change introduces a suite of new Struts Action classes that serve as the presentation layer for several user-facing capabilities. In the account area, new actions handle profile viewing and editing, avatar display, email validation, and password assistance (including SMS verification via Tencent Cloud). For blog interactions, actions are added to list followers, following, and threads for specific users, as well as to display a user's message history. Short messaging functionality is expanded with actions to list and save drafts, received, and sent messages. Finally, subscription management is supported by actions to list subscriptions for accounts, forums, tags, and threads.
src/main/java/com/jdon/jivejdon/presentation/action/account · high confidence
New presentation filters for session security, caching, and access control
Added several new servlet filters to the presentation layer: DisableUrlSessionFilter prevents session fixation by invalidating sessions when the session ID is passed in the URL and strips URL-encoded session IDs from redirects; ETagFilter adds HTTP caching support for static resources (images, CSS, JS, fonts) by generating ETags and returning 304 Not Modified for unchanged assets; ExpiresFilter extends an existing library filter to set Cache-Control and Expires headers based on request parameters or attributes; IPForwardingFilter extracts the real client IP from the X-Forwarded-For header when behind a proxy; MessageEditAuthFilter and ThreadEditAuthFilter enforce authentication and authorization checks before allowing users to edit forum messages and threads; SpamFilter blocks requests from banned IPs and returns 503 Service Unavailable for detected spam.
src/main/java/com/jdon/jivejdon/presentation/filter · high confidence
New presentation servlets and upload monitoring infrastructure
This change introduces several new servlets and supporting classes in the presentation layer. CounterServlet now handles thread view counting with bot filtering and asynchronous updates, while RSSGenServlet generates RSS feeds with ETag-based caching. RegisterCodeAction and VerifySpammerAction manage CAPTCHA verification and spammer banning. Additionally, a new upload monitoring subsystem (ExtendedMultiPartRequestHandler, MonitoredDiskFileItem, UploadListener, etc.) has been added to track file upload progress and stats via session attributes.
src/main/java/com/jdon/jivejdon/presentation/servlet · high confidence
New query and search actions for forum threads and messages
This change introduces a comprehensive set of new Struts Action classes in the query package to handle forum content discovery. Users can now search for threads and messages using the new SearchAction and SearchThreadAction, which include input sanitization and encoding handling. The package also adds specialized list actions for displaying content: ThreadDigListAction and ThreadDigSortedListAction for dig-based sorting, ThreadApprovedHomeListAction and ThreadApprovedNewListAction for approved thread lists, StickyThreadList for pinned content, and TaggedThreadListAction with TaggedThreadListCaptchaAction for secure, bot-protected access to tagged thread lists. Additionally, new actions like MessageQueryAction and ThreadQueryAction provide advanced filtering capabilities by date, user, and forum.
src/main/java/com/jdon/jivejdon/presentation/action/query · high confidence
New query managers for hot/dig threads and slide images
Added HotThreadQueryManager to retrieve and cache hot and dig thread IDs based on reply counts, using a SortedSet to limit results to the top 100 threads. Added SlideImageQueryManager to fetch and cache upload info for slide images, filtering for image attachments belonging to messages. Introduced ThreadCompareVO as a value object to support thread comparison by message count.
src/main/java/com/jdon/jivejdon/spi/component/query · high confidence
New repository interfaces for forum, message, and thread persistence
The system introduces three new repository interfaces in the infrastructure layer to manage data access for forum entities. ForumFactory provides methods to retrieve forums, messages, and threads, as well as to reload thread states and generate next IDs. MessageRepository handles the creation, updating, and deletion of topic and reply messages, manages re-blog associations (saving, deleting, and querying by source or target message ID), and exposes underlying DAO facades. ThreadRepository allows for updating and deleting forum threads, including updating thread names. These interfaces define the contract for persisting and retrieving core discussion data.
src/main/java/com/jdon/jivejdon/infrastructure/repository · high confidence
New short message factory and Weibo notification parameters
The system now includes a ShortMessageFactory component that handles the creation, persistence, and delivery of short messages, including logic to notify target accounts and manage message counts. Additionally, a WeiBoShortMessageParams class has been introduced to configure subject and body templates for Weibo-style notifications, allowing dynamic content insertion based on user events.
src/main/java/com/jdon/jivejdon/spi/component/shortmessage · high confidence
Refactored forum thread listing views and removed legacy JSP components
The forum's thread listing interface has been refactored with the introduction of new JSP views for random threads (\randomThreadList.jsp\) and sorted digg threads (\threadDigSortedList.jsp\), which feature updated navigation tabs, search widgets, and structured pagination. These new views replace older patterns and include specific SEO handling, such as returning 410 status codes for empty lists. Concurrently, several legacy JSP files (\header.jsp\, \footer.jsp\, \lastPost.jsp\, \messagListCore.jsp\, \messageListAll.jsp\, \messageListBody.jsp\, \messagePostReply.jsp\, \navf.jsp\, \stickyThreadList.jsp\, and \threadsPrevNext1.jsp\) have been removed, indicating a consolidation of the view layer and a move away from the previous modular include structure.
application/forum · high confidence
Refactored view counter with IP-based rate limiting and async persistence
The view counting component has been refactored to introduce a new \ThreadViewCounterJob\ interface and implementation that decouples the counting logic from immediate database writes. The system now uses an in-memory cache (\ConcurrentHashMap\) to buffer view counts, flushing them to the database periodically via a scheduled executor (configurable via \ThreadViewCountParameter\). A key behavioral change is the addition of IP-based rate limiting: the \saveAndIncrement\ method now tracks unique threads accessed per IP address in a shadow map (\ipCountsMirror\) and prevents further increments if an IP exceeds a threshold (currently 5), effectively mitigating spam or bot-driven view inflation. The implementation also optimizes memory usage by clearing the cache snapshot immediately after creating the list for persistence.
src/main/java/com/jdon/jivejdon/spi/component/viewcount · high confidence
Removals
Removal of JdonFramework annotation and AOP infrastructure
The \lib/jf\ library has removed its core annotation definitions (including \@Component\, \@Service\, \@Model\, \@Send\, \@Consumer\, and \@Interceptor\) and the associated AOP interceptor implementations (such as \CacheInterceptor\, \PoolInterceptor\, and \StatefulInterceptor\). This change eliminates the framework's annotation-driven dependency injection, aspect-oriented programming, and domain event handling capabilities from this module.
lib/jf · high confidence
Removal of donation and feedback JSP views
The donation, feedback, and result JSP pages in the forum feed module have been removed. This eliminates the user-facing interfaces for making donations (displaying Alipay/WeChat images) and submitting feedback (including a Tencent Captcha integration), along with the subsequent confirmation page.
application/forum/feed · high confidence
Removal of legacy JSP views and CSS files; simplification of error pages
The application deletes a large set of legacy JSP files (forum, help, home, hotlist, imagesSlide, importSitemapUrl, onlineInfo, portlet\_css, post, shortmessage, test, tur, uploadDL, usermessages) and CSS files (jivejdon.css, jivejdon\_css.jsp, portlet\_css.jsp) that are no longer served. The 404 error page is simplified to return a 410 Gone status with a noindex header, removing the previous rate-limiting and email-alert logic. The 503 error page is stripped of its CAPTCHA verification form and caching headers, displaying a plain error message. Additionally, the main index.jsp is refactored to use a new layout structure with preconnect/dns-prefetch hints, updated SEO metadata, and a new ad slot configuration.
application · high confidence
Removal of legacy JiveJdon performance test artifacts
Deleted obsolete JMeter test plans (JiveJdon3.jmx, jmeteTest.jmx, JiveJdon.jmx), aggregated result CSVs, and a heap walker HTML report from the doc/performanceTest directory. These files contained hardcoded credentials and outdated configurations for the now-opensource JiveJdon project, and their removal cleans up the documentation repository.
doc/performanceTest · high confidence
Removal of legacy authentication, authorization, and event handling components
This change removes a significant portion of the legacy codebase within the \com.jdon.jivejdon\ package, including the \Constants\ class, the entire \auth\ subsystem (interceptors like \CUDInputInterceptor\ and \PermissionInterceptor\, JAAS login modules, and XML configuration), and the \event.bus.cqrs.query\ event handlers. For users, this means the previous XML-based permission rules, JAAS container authentication, and specific CQRS-based cache invalidation logic for forum messages are no longer available, likely requiring a migration to the platform's current authentication and event handling mechanisms.
src/com · high confidence
Removal of legacy mobile web interface
The entire mobile web application layer has been removed, including all JSP view templates (such as account registration, thread/message lists, and blog views), the jQuery Mobile 1.1.0 CSS framework, and the Google AdSense integration script. This change eliminates the legacy mobile user interface and its associated server-side rendering logic.
application/mobile · high confidence
Removal of mobile support and restructuring of application configuration
This change removes the dedicated mobile application layer, deleting the \struts-config-mobile.xml\ configuration file and stripping out all mobile-specific action mappings (such as \/mobile/\*\ paths) from the main Struts configuration files. It also cleans up the deployment configuration by removing the \jdbc/SecurityDS\ resource reference from \jboss-web.xml\ and deleting local test helper scripts (\test.bat\, \testover.bat\). Additionally, the application's internal package structure has been refactored, with model and repository namespaces updated from \com.jdon.jivejdon.model\ and \com.jdon.jivejdon.repository\ to \com.jdon.jivejdon.domain.model\ and \com.jdon.jivejdon.infrastructure.repository\ respectively, reflecting a shift towards a hexagonal architecture.
application/WEB-INF · high confidence
Architecture
Migrate build system from Ant to Maven and enable Docker deployment
The project replaces the legacy Ant build process (build.xml, build.bat) with Maven, removing Eclipse-specific configuration files (.classpath, .project, .buildpath) and introducing a Dockerfile.web for containerized deployment on Tomcat 8.5 with JRE 8. This change simplifies the build lifecycle and provides a standardized, reproducible way to run the application in a container.
(repo-wide) · high confidence
New DAO interfaces for domain entities
The repository layer now exposes a set of new DAO interfaces (AccountDao, ForumDao, MessageDao, MessageQueryDao, PropertyDao, SequenceDao, SetupDao, ShortMessageDao, SubscriptionDao, TagDao, UploadFileDao) and a MessageDaoFacade. These interfaces define the data access contracts for core domain objects such as accounts, forums, messages, tags, and subscriptions, establishing the infrastructure for how the application persists and retrieves this data.
src/main/java/com/jdon/jivejdon/infrastructure/repository/dao · high confidence
Refactored API layer to Hexagonal architecture with new service interfaces
The \src/main/java/com/jdon/jivejdon/api\ package has been restructured to follow a Hexagonal architecture pattern. This change introduces new service interfaces (\ForumMessageService\, \ForumService\, \AccountService\, \OAuthAccountService\, \PropertyService\, \ShortMessageService\, \SubscriptionService\) and their corresponding implementations (e.g., \ForumServiceImp\, \AccountServiceImp\, \ForumMessageServiceImpl\). The refactoring separates the public API contracts from the domain logic, moving DTOs to infrastructure and simplifying message handling and query logic. Users will experience this as a structural change to the application's internal organization, potentially affecting how services are wired or extended, while maintaining the existing functional capabilities for forum management, user accounts, and messaging.
src/main/java/com/jdon/jivejdon/api · high confidence
Refactored pub/sub publish layer to Hexagonal architecture
The publish SPI package has been restructured to support a Hexagonal architecture by introducing new role-based classes (LobbyPublisherRole, MessageEventSourcingRole, ShortMPublisherRole, ThreadEventSourcingRole) that act as adapters. These components now explicitly map domain events and commands (such as message revisions, thread updates, and AT user notifications) to specific pub/sub channels using the framework's @Send annotations, replacing the previous implementation with a cleaner separation of concerns between the domain model and the messaging infrastructure.
src/main/java/com/jdon/jivejdon/spi/pubsub/publish · high confidence
SQL data access layer refactored to new DAO implementations
The SQL data access layer has been restructured with new DAO implementations (AccountDaoSql, ForumDaoSql, MessageDaoSql, MessageQueryDaoSql, PropertyDaoSql, SequenceDaoSql, SetupDaoSql, ShortMessageDaoSql) and supporting infrastructure classes (JdbcTempSource, JdbcTempSSOSource, AccountSSOSql). These classes provide the concrete SQL operations for user accounts, forums, messages, properties, sequences, and setup values, utilizing JdbcTemp for database interactions and PageIteratorSolverFixed for pagination. The refactoring introduces separate data sources for SSO operations and implements specific query logic for message trees, user message counts, and thread listing.
src/main/java/com/jdon/jivejdon/infrastructure/repository/dao/sql · high confidence
Behavioural changes
Admin filters table styling and package path correction
The admin filters management page now uses CSS styles for table cell alignment instead of the deprecated HTML align attribute, ensuring consistent visual presentation. Additionally, a reference to the FiltersUtils class was corrected to use the updated domain model package path, fixing a potential runtime error when rendering filter properties.
application/admin/filters · high confidence
Application of custom Jdon CSS theme
The application now uses a new \jdon.css\ stylesheet to define the visual appearance of the site. This change introduces a custom theme with a warm, yellowish background (\#f7f4ed), specific font families for Chinese and English text, and a distinct color palette for links, buttons, and navigation elements, replacing the previous default styling.
application/js · high confidence
Asynchronous lazy loading of forum data via event-driven reconstruction
The system now offloads the loading of forum, thread, and message details to asynchronous event handlers, replacing previous synchronous or eager loading patterns. This change introduces a new \LazyLoaderRole\ that publishes domain events for specific data needs—such as user roles, subscription counts, message properties, view counts, and reblog links—and a set of corresponding \DomainEventHandler\ implementations (e.g., \LoadRolename\, \SubscriptionCounter\, \ViewCountLoader\) that fetch the data from the database and return the results. For users, this means that accessing detailed information about a forum post or thread may now happen asynchronously in the background, potentially improving initial page load responsiveness while ensuring data is available when needed.
src/main/java/com/jdon/jivejdon/spi/pubsub/reconstruction · high confidence
Autocomplete component migrated from PrototypeJS to jQuery UI
The autocomplete functionality in the application has been replaced, switching the underlying library from PrototypeJS to jQuery UI (v1.8.23). This change introduces new jQuery UI assets, including the full jQuery UI JavaScript bundle and CSS theme file, to support the new autocomplete implementation. Users will experience the autocomplete feature powered by jQuery UI instead of the previous PrototypeJS-based solution.
application/common/autocomplete · high confidence
Concurrent-safe repository builders for Forum, Thread, and Message entities
The repository builder layer in the infrastructure package has been refactored to introduce dedicated director classes (ForumDirector, MessageDirector, ThreadDirector) and factory components (ForumAbstractFactory, MessageInitFactory). These components now manage the creation and retrieval of domain entities using thread-safe mechanisms, specifically leveraging ConcurrentHashMap and FutureTask to prevent duplicate concurrent loads and ensure atomic object creation. The MessageDirector also utilizes CompletableFuture to parallelize the loading of related data (such as account details, filters, and properties) when building RootMessage objects, while the ForumAbstractFactory includes an LRU cache to track and limit repeated null-thread lookups. This change improves the robustness and performance of the data access layer under concurrent access.
src/main/java/com/jdon/jivejdon/infrastructure/repository/builder · high confidence
Database schema formatting and reblog link structure update
The MySQL DDL scripts have been reformatted for consistency, and the \reblog\ table structure has been modified to support bidirectional blog referencing. Specifically, the \reblog\ table's primary key was changed from a single column (\reblogToID\) to a composite key (\reblogFromID\, \reblogToID\), and the column order was adjusted to place \reblogFromID\ first. This change enables blogs to refer to each other via URL, as indicated by the commit context, while the rest of the schema files (\jiveForum\, \jiveThread\, \jiveMessage\, \user\, etc.) retain their original logical structure but with standardized SQL formatting.
ddl · medium confidence
Improved blog typography and font rendering
The default blog theme's CSS has been updated to enhance readability. The secondary content title size has been increased from 14px to 16px, and its subtitle span from 10px to 12px. Additionally, the main body text font size was increased from 14px to 15px, and the font family was explicitly set to 'Microsoft YaHei' to replace the previous undefined or corrupted font reference, ensuring consistent rendering across browsers.
application/blog/themes, application/common/blog · high confidence
Introduce SPI-based IP ban list management
The IP blocking capability in the block component has been refactored into a new Service Provider Interface (SPI) structure. This change introduces the \IPBanListManager\ and its \IPBanListManagerIF\ interface, along with supporting classes \IPHolder\ and \WhiteIPs\, to handle the storage, validation, and checking of banned IP addresses and whitelists. This restructuring separates the core logic from the implementation, allowing for more flexible configuration of IP blocking rules within the application.
src/main/java/com/jdon/jivejdon/spi/component/block · high confidence
Introduction of cache decorators for forum, message, and subscription data access
New cache decorator classes (ForumDaoCache, MessageDaoDecorator, MessageQueryDaoProxy, SubscriptionDaoCache, UploadFileDaoCache) have been added to the DAO layer. These components intercept data retrieval and mutation operations to implement caching behavior: read operations are cached to improve performance, while write operations (create, update, delete) automatically clear the relevant cache entries to ensure data consistency. This change introduces a caching mechanism for forum threads, messages, subscriptions, and uploaded files without altering the underlying SQL data access logic.
src/main/java/com/jdon/jivejdon/infrastructure/repository/dao/filter · high confidence
Migrate from Prototype.js to jQuery and add lazy loading
The application has replaced the Prototype.js framework with jQuery, removing legacy files such as \prototype.js\, \effects.js\, \autocomplete.js\ (which used Prototype), and the custom \JSManager.js\ loader. To support this shift, a new \index2.js\ script has been introduced to handle jQuery-based behaviors, including a sticky scroll effect for the \.scrolldiv\ element. Additionally, lazy loading for images has been implemented using the \jquery.lazyload-any.js\ library, and a new \waitingfor.js\ module provides a Bootstrap-based loading dialog.
application/common/js · high confidence
Modernizes forum thread listing views with SEO-friendly URLs and lazy loading
The JSP fragments in application/query/others have been updated to generate SEO-friendly URLs by appending the pinyin token (e.g., /threadId/pinyinToken.html) instead of using raw thread IDs. To improve page load performance, images now use the loading="lazy" attribute, and the heavy Prototype.js library has been removed in favor of lighter implementations. Additionally, the views now include meta tags (noindex, nofollow) and HTTP headers to prevent search engines from indexing these dynamic list fragments, while internal links have had target="\_blank" removed to keep users on the current page.
application/query/others · high confidence
Modernizes site header and removes legacy mobile dependencies
The application now uses a new \IncludeTopHead.jsp\ component to define the page head, featuring updated CSS styles (such as a 1.6rem body font size and a \#f7f4ed background) and optimized resource loading with preconnect/preload links for fonts and scripts. This change is accompanied by the removal of several legacy files, including the jQuery Mobile library (\jquery-mobile-min.js\), the custom FastClick implementation (\fastclick.js\), and the old home page stylesheet (\jdon\_home4.css\), effectively dropping support for the old mobile UI framework in favor of the new responsive design.
application/common · high confidence
New authentication and authorization interceptors for post limits and role-based access
The auth module now includes CUDInputInterceptor and PermissionInterceptor to enforce post-creation throttling and role-based method access. CUDInputInterceptor checks login status, applies a Throttler to limit post frequency, and validates input switches before allowing create/update/delete operations. PermissionInterceptor reads permission rules from an XML configuration via PermissionXmlParser and OperationAuthorization to verify that a user's role permits the requested service method. ResourceAuthorization adds owner/admin checks for modifying forum messages, ensuring only the message owner or administrators can update or delete content.
src/main/java/com/jdon/jivejdon/auth · high confidence
New event subscribers for message revisions and thread name updates
Added new domain event handlers in the SPI pub/sub layer to react to message and thread updates. MessageRevisedListener now updates the message store when a message is revised, while MessageSaveSearch updates the search index with the revised content. ThreadNameListener handles thread name changes by updating the repository and clearing the associated cache. These components implement the DomainEventHandler interface to process events from the event disruptor.
src/main/java/com/jdon/jivejdon/spi/pubsub/subscriber/updatemessage · high confidence
New event-driven subscribers for message, subscription, and file operations
This change introduces a set of new domain event handlers in the pub/sub subscriber layer to decouple and manage specific business operations. MessageMovingListener now handles forum message moves by updating ownership and refreshing adjacent thread references. MessagePropertiesListener manages the replacement of message properties via the property DAO. NewMessageBaiduSearchNotifier adds notifications to the lobby for new messages. SubscriptionCreator handles the persistence of new thread subscriptions, including short message actions. SubscriptionSender is present but currently has its asynchronous event bus posting disabled (commented out), effectively silencing subscription notifications. Finally, UploadFilesSaveListener persists attached files to the upload repository upon attachment events.
src/main/java/com/jdon/jivejdon/spi/pubsub/subscriber · high confidence
New message deletion event handlers in the SPI layer
Added two new event subscribers in the \spi.pubsub.subscriber.delmessage\ package to handle message removal operations. \DeleteMessage\ listens for the \deleteMessage\ event to execute the actual deletion via \MessageCRUDService\, while \RefreshThreadAction\ listens for the \delThread\ event to trigger thread state reloading and view model notifications via \ForumFactory\. These changes introduce new behavioral pathways for processing message deletion events within the application's domain event handling infrastructure.
src/main/java/com/jdon/jivejdon/spi/pubsub/subscriber/delmessage · high confidence
New post-throttling rules for VIP and new users
The throttle component now enforces specific posting limits for VIP and new users. The new \Throttler\ class applies distinct thresholds and time windows (configurable via \VIPUserThrottleConf\ and \NewUserThrottleConf\) to these user groups, allowing the system to restrict abusive posting behavior based on user status.
src/main/java/com/jdon/jivejdon/spi/component/throttle · high confidence
Refactor short message persistence and input filtering infrastructure
The short message system now uses a dedicated repository interface and DAO implementation to manage message storage and retrieval, decoupling domain logic from data access. Additionally, a new input filtering pipeline has been introduced, featuring an \InFilterManager\ to process incoming messages (such as adding image HTML) and an \InputSwitcher\ to control input permissions via configuration, alongside an \OutFilterManager\ for output processing.
src/main/java/com/jdon/jivejdon/infrastructure/repository/dao/util, src/main/java/com/jdon/jivejdon/infrastructure/repository/shortmessage, src/main/java/com/jdon/jivejdon/spi/component/filter · high confidence
Refactored account repository infrastructure with concurrent loading and validation
The account repository layer has been restructured into a new package (acccount) containing an AccountFactory interface and its implementation, AccountFactoryDao. This change introduces lightweight, concurrent account creation and retrieval using a ConcurrentHashMap to deduplicate in-flight requests, improving performance for simultaneous lookups. The implementation adds input validation for email and username fields to prevent injection or malformed data. Additionally, new factory classes (AccountInitFactory) and repository interfaces (AccountRepository, Userconnector) have been added to handle account initialization, persistence operations, and third-party social connector (OAuth/Weibo) authentication data.
src/main/java/com/jdon/jivejdon/infrastructure/repository/acccount · high confidence
Refactored email sending to use asynchronous delivery
The email sending mechanism in the SPI component has been refactored to deliver messages asynchronously. The new \EmailHelper\ now utilizes Guava's \AsyncEventBus\ to post \EmailVO\ objects to the \EmailSender\, which handles the actual SMTP transmission via JNDI-looked-up JavaMail sessions. This change decouples the email dispatch from the calling thread, allowing operations like password resets, subscription notifications, and validation code emails to proceed without blocking.
src/main/java/com/jdon/jivejdon/spi/component/email · high confidence
Refactored query result views to modern, SEO-friendly layouts
The query result pages have been completely redesigned to improve structure, performance, and search engine visibility. Old JSP files (hotThreadView, messageView, searchThreadResult, etc.) were removed and replaced with new, streamlined templates (approvedThreadList2, taggedThreadList2, threadListCore) that use semantic HTML5 elements and Schema.org ItemList markup. The new layouts feature responsive CSS grids, lazy-loaded images, and cleaner typography. Additionally, SEO controls were enhanced with proper canonical links, rel=prev/next pagination tags, and X-Robots-Tag headers to manage indexing.
application/query · high confidence
Refactored subscription notification actions with improved null safety
The subscription notification system in the SPI component has been refactored to implement the Hexagonal architecture pattern. New action classes (EmailAction, ShortMsgAction, SinaWeiboAction, and ShortMsgActionList) now handle email, SMS, and Sina Weibo notifications respectively. These changes introduce comprehensive null checks for subscription objects, notification handlers, and message factories before execution, preventing potential runtime errors. The SinaWeiboAction specifically addresses a previously invalid Weibo submission mechanism by commenting out the broken submitter call and adding expiration date validation for user connector authentication.
src/main/java/com/jdon/jivejdon/spi/component/subscription/action · high confidence
Refactored subscription repository to Hexagonal architecture
The subscription persistence layer has been restructured to follow Hexagonal (ports and adapters) principles. This introduces a new \SubscriptionRepository\ interface and a \SubscriptionRepositoryDao\ implementation that handles database operations via \SubscriptionDao\, while delegating object creation and enrichment to \SubscribedFactory\ and \SubscriptionInitFactory\. The change also updates the \Account\ model usage to create lightweight DTO-like references by default via \Account.createAsDTO()\, and removes support for QQ Weibo notifications, retaining only Sina Weibo integration.
src/main/java/com/jdon/jivejdon/infrastructure/repository/subscription · high confidence
Refined file upload form and validation logic
The file upload interface in the message upload module has been updated to improve usability and validation accuracy. The form no longer accepts remote URLs for attachment, removing the 'Online Attachment' input field and the associated JavaScript logic that previously processed HTTP links. Validation for file extensions and image types now correctly accesses the input field's value property, ensuring accurate checks. Additionally, the UI text for the close button and instructions has been clarified, and HTML meta tags have been standardized for better browser compatibility.
application/message/upload · high confidence
Removal of legacy configuration files
The application has removed several legacy configuration files, including \application.properties\, \application\_zh\_CN.properties\, \jaas.properties\, \log4j.properties\, and \log4j2.xml\. This change eliminates hardcoded error messages, JAAS datasource settings, and both Log4j and Log4j2 logging configurations from the source directory, likely as part of a migration to a different configuration management approach or framework upgrade.
src · high confidence
Removal of local Font Awesome 4.4.0 assets
The local copy of the Font Awesome 4.4.0 icon library has been removed from the application, including the CSS stylesheets, font files, and associated documentation. This change eliminates the bundled client-side dependency, likely shifting the application to load icons from an external source or CDN.
application/js/font-awesome-4.4.0 · high confidence
Removal of mobile forum list CSS styles
The mobile-specific stylesheet for the forum list (mList\_css.jsp) has been removed from the application. This change eliminates the custom CSS rules that previously controlled the layout and styling of the mobile forum list view, including specific adjustments for table elements, post headers, and sidebar positioning. Users will no longer see the styles defined in this file when viewing the forum list on mobile devices.
application/forum/css · high confidence
Simplified message edit page navigation URL
The JavaScript logic for navigating to the message edit page no longer appends the '/nocache' path segment, query parameters, or anchor fragments to the base URL. This change results in cleaner, more standard URLs when the user is redirected to the edit view, removing the previous mechanism intended to bypass browser caching or target specific page sections.
application/message/js · high confidence
Social profile pages remove nofollow attributes and drop Tencent support
The social profile and follower pages (contentfollower, follower, following, interest) no longer apply rel="nofollow" to outbound links for subscriptions, messages, and blog profiles, allowing search engines to follow these links. Additionally, support for Tencent (TecentUser) social accounts has been removed, as indicated by the deletion of the corresponding logic blocks and image rendering in the profile views.
application/social · high confidence
Subscription UI updates: remove Tencent Weibo, fix paths, and align with SPI
The subscription management views in application/account/protected/sub have been updated to remove support for Tencent Weibo (腾讯微博) notifications and its associated UI elements and JavaScript handlers. The tag listing links have been corrected from /tags/ to /tag/ to match the current routing, and the 'New Topic' button now points to postThread.jsp instead of post.jsp. Additionally, the JSPs now import the Account class from the domain model package and reference action types via the spi.component package, aligning the presentation layer with the refactored architecture.
application/account/protected/sub · high confidence
Subscription notifications now process synchronously
The subscription notification system has been refactored to disable asynchronous event publishing. The new \SubscriptionNotify\ component handles notifications synchronously via a \@Subscribe\ method, ensuring that email, short message, and social media (Sina Weibo) notifications are sent immediately within the same thread. This change introduces \NotifySubscribedFactory\ to construct notification objects and \SubscriptionActionHolder\ to manage action execution, replacing the previous asynchronous model to improve reliability and simplify the event flow.
src/main/java/com/jdon/jivejdon/spi/component/subscription · high confidence
Updated instructions for search index rebuild process
The setup page for the admin search module now provides more detailed instructions for users performing a full index rebuild. It explicitly states that the original directory /temp/jivejdonLuceneDB should be deleted before starting the process and instructs users to check jdon.log for the 'rebuildIndex finished!' message to confirm completion, in addition to the existing note about potential processing time for large datasets.
application/admin/search · high confidence
Fixes
Account protection pages: new online user view and URL/HTML fixes
A new 'Online Login User Status' page (onlineInfo.jsp) has been added to display currently logged-in users. Several account protection pages (autologin, loginhome, oauthlogin) now use the updated ToolsUtil.getAppURL method instead of the old RequestUtil, and loginhome redirects to the forum root path. HTML markup in EditAccountForm, myForm, and profile has been corrected for modern standards (DOCTYPE, viewport, charset) and inline styles replace deprecated align attributes. Additionally, a link in myForm has been updated to point to the correct message query path.
application/account/protected · high confidence
Admin UI modernization and URL cleanup
The admin interface has been updated to use modern HTML5 standards (DOCTYPE html) and improved mobile responsiveness via a viewport meta tag. Several legacy HTML attributes (align) have been replaced with CSS styles for better rendering. The pager labels were shortened (e.g., '上一页' to '上页'), and the autocomplete functionality relying on Prototype.js has been removed in favor of jQuery. Additionally, forum-related navigation links have been cleaned up by removing the '/forum/' prefix from their paths, and the tag management list limit was adjusted.
application/admin · high confidence
Admin UI modernization and security hardening
The admin user interface has been updated to replace deprecated HTML alignment attributes with CSS styles for better rendering consistency. A critical security vulnerability in the IP banning feature has been addressed by removing the \BanIP.jsp\ file, which previously executed system commands via \Runtime.exec\ to modify iptables rules directly; IP banning is now handled through a safer server-side action (\banIPAction.shtml\). Additionally, the registration CAPTCHA image URL has been secured by moving it under the \/account/protected/\ path, and the message list now correctly displays the message subject instead of the body content.
application/admin/user · high confidence
Fix forum admin page navigation and layout after directory restructuring
The forum administration JSP files have been moved from application/forum/admin to application/admin/forum. This change updates all internal relative includes (header.jsp, footer.jsp) and Struts action links (e.g., /forum/admin/... to /admin/...) to reflect the new directory structure, ensuring that navigation and form submissions work correctly. Additionally, minor layout fixes were applied to the image list and forum list pages, such as correcting HTML5 doctype declarations, updating meta tags for better browser compatibility, and replacing deprecated align attributes with CSS styles for table cell centering.
application/admin/forum · high confidence
Fixes broken tag subscription links
The tag subscription list page now generates correct URLs for individual tags. Previously, links pointed to paths like /tags/id, which were incorrect; they now correctly point to /tag/id/, ensuring users can navigate to the specific tag page without encountering 404 errors.
application/social/sub · high confidence
Fixes null pointer exception on OAuth success page
The OAuth success page (ok.jsp) now safely handles cases where the HTTP session is null. Previously, the code directly accessed the session to retrieve subscription parameters, which could cause a crash if the session was not available. The fix initializes the session variable safely and checks for null before attempting to extract the username and password.
application/account/oauth · high confidence
Fixes tag input errors and replaces autocomplete library
Resolves JavaScript errors in the tag management interface by replacing the deprecated Prototype.js-based autocomplete with jQuery UI, ensuring the autocomplete feature loads correctly without throwing 'autocomplete is not a function' errors. Additionally, the tag submission form now includes a new 'UrlSlug' input field for token management, and the post-save redirect link has been updated to point to the correct navigation action to prevent browser cache issues.
application/message/tag · high confidence
Forum JavaScript cleanup and API endpoint updates
The forum's client-side JavaScript has been updated to remove obsolete files (forumList.js, messageList.js, postreply.js, threadPost.js) and internal deployment metadata (dwsync.xml). Functionality previously in these files has been consolidated or replaced, including the integration of a rich text editor (CKEditor). Additionally, the thread list module now uses updated backend endpoints (/forum/latestPost.shtml and /query/threadLatestPostViewAction.shtml) to reflect a rename from 'lastPost' to 'latestPost', and the mobile browser detection script now references the correct utility class for resolving the application domain URL.
application/forum/js · high confidence
HTML standardization and CSS alignment in short message pages
The short message interface pages (draftbox, failure, header, messageform, newmessage, receivebox, result, sendbox, shortmessage, and shortmsg\_css) have been updated to replace deprecated HTML attributes with modern CSS styles. Specifically, inline \align="center"\ attributes on table cells and divs have been replaced with \style="text-align: center"\ to ensure consistent layout rendering. Additionally, the header page now uses the standard \\<!DOCTYPE html\>\ declaration, removes redundant meta tags, and the CSS generation page no longer sets a long-term cache header, ensuring styles are fetched fresh.
application/shortmessage · high confidence
Improved HTML standards and mobile responsiveness for upload pages
The upload result and user face upload pages now use the standard HTML5 doctype and include a viewport meta tag, ensuring proper rendering on mobile devices. Additionally, legacy IE compatibility tags and redundant charset declarations have been removed to clean up the markup, and instructional text has been updated to guide users on how to refresh the page to see new uploads.
application/account/protected/upload · high confidence
Modernized message posting and navigation with asynchronous submission and cache control
The message posting workflow has been refactored to use asynchronous form submission via hidden iframes, providing immediate user feedback without full page reloads. New JSP views (messagePostReply2.jsp, navf.jsp, navf2.jsp, resultSave2.jsp) handle reply posting, display waiting dialogs, and manage navigation redirects with strict no-cache headers to prevent stale content. The message form body (messageFormBody.jsp) now integrates CKEditor for rich-text editing and replaces the legacy Prototype.js autocomplete with jQuery UI. Additionally, the forum list JSON endpoint (forumListJSON.jsp) has been moved to the message module and updated to use a context-aware cache check, while various other message views have been updated to use Bootstrap grid classes and updated navigation links.
application/message · high confidence
Refactor thread JSPs to disable sessions and improve SEO structure
The thread-view JSPs (including messageList, messageListBody, and messagListCore) now run with HTTP sessions disabled to reduce server memory overhead. The page structure has been updated with proper HTML5 semantic tags, canonical URLs, and Open Graph metadata to improve search engine indexing. Additionally, the image display logic has been hardened to return 404 errors for missing parameters, and the thread redirect logic has been simplified to use request attributes instead of query parameters.
application/thread · high confidence
Replace custom autocomplete styles with icomoon icon font
The application now uses a new \style.css\ file that integrates the 'icomoon' icon font for rendering UI icons, replacing the previous custom CSS-based icon approach. As part of this change, the legacy \autocomplete.css\ and \autocomplete\_css.jsp\ files have been removed, indicating that the previous autocomplete styling is no longer used or has been consolidated into the new main stylesheet.
application/common/js/styles · high confidence
Restructured user registration flow with Tencent Captcha and registration limits
The account registration process has been refactored to improve security and manage spam. A new two-step registration flow (newReg.jsp and newAccount.jsp) now requires users to complete a Tencent Captcha verification before accessing the registration form. Additionally, a global registration limit is enforced via a session-scoped counter that decrements with each successful registration, and registration is restricted to specific business hours (10:00–16:00) to further prevent automated abuse. The previous registration form (NewAccountForm.jsp) and SMS verification logic (qqsms.jsp) have been removed, and the login interface has been updated to use a Bootstrap modal.
application/account · high confidence
Simplified installation with Docker and updated documentation
The documentation has been updated to introduce a Docker-based installation method as the primary setup option, providing clear commands for building and running the database and web containers. The manual installation instructions have been streamlined to focus on Tomcat, removing obsolete JBoss-specific configuration steps and legacy files such as \mysql-ds.xml\ and \login-config.xml\. Additionally, the database connection string now includes \rewriteBatchedStatements=true\ to optimize JDBC batch operations, and the \readme.txt\ and \todo.txt\ files have been removed to reduce clutter.
doc · high confidence
Tag management UI modernized with jQuery autocomplete and cleaner links
The tag administration interface has been updated to replace the legacy Prototype-based autocomplete with jQuery UI, providing a smoother tag-search experience in the thread-tagging forms. Additionally, navigation links for tag lists now use direct HTML anchors instead of Struts tags, and pagination controls have been simplified by removing the 'Go to page' tooltip feature while shortening button labels.
application/admin/tag · high confidence
Updated Tomcat startup scripts with JVM tuning and JAAS configuration
The Tomcat startup scripts in doc/tomcat/bin have been updated to include specific JVM tuning options and JAAS configuration. The Unix script (catalina.sh) was replaced with a new version (catalina\_sh.txt) that sets JAVA\_OPTS with aggressive garbage collection settings (e.g., CMS, ParNew) and memory limits (-Xms1500m, -Xmx1500m). The Windows batch files (catalina.bat and tomcat\_debug.bat) were also modified to set JAVA\_OPTS, including the -Djava.security.auth.login.config flag pointing to the JAAS config file, and the debug script now explicitly invokes catalina.bat with jpda start.
doc/tomcat/bin · medium confidence
Dependencies
Migrate to Maven and update core dependencies
The project build system has been migrated to Maven, introducing a new pom.xml that defines the project structure and dependencies. This change includes upgrading Apache Lucene to version 4.10.3 for search functionality, updating JUnit to version 5.0.0 for testing, and configuring specific repositories (hosted on Gitee) to resolve internal JDon framework components and other libraries like Struts 1.3.8 and Commons BeanUtils 1.9.4.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 35 → 31 (-3.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 24 → 28 (+3.9)
- Architecture 100 → 93 (-6.7)
- Maturity 73 → 73 (+0.5)
- Readiness 21 → 21 (+0.0)
- Security 46 → 59 (+13.4)
- Domain Modelling 100 → 100 (+0.0)
- Accessibility 27 (new)
Resolved (233)
- $ (cognitive 37) (application/common/ckeditor/plugins/bbcode/plugin.js)
- $ (cyclomatic 26) (application/common/ckeditor/plugins/bbcode/plugin.js)
- (anonymous) (cognitive 16) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 17) (application/common/login2.js)
- (anonymous) (cognitive 19) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 19) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 20) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 26) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 29) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 30) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 32) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 18) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 24) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 27) (application/common/autocomplete/jquery-ui.js)
- Change coupling: MessageForumListAction.java ↔ MessageListNavAction.java (src/main/java/com/jdon/jivejdon/presentation/action/MessageForumListAction.java)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (10 lines × 2) (src/main/java/com/jdon/jivejdon/api/impl/account/OAuthAccountServiceImp.java)
- Duplicated block (10 lines × 2) (src/main/java/com/jdon/jivejdon/domain/model/message/output/codeviewer/JavaCodeHighlighter.java)
- Duplicated block (10 lines × 2) (src/main/java/com/jdon/jivejdon/domain/model/message/output/codeviewer/JavaCodeViewer.java)
- …and 213 more
New (338)
- (anonymous) (cognitive 116) (application/common/login2.js)
- (anonymous) (cognitive 119) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 16) (application/common/js/waitingfor.js)
- (anonymous) (cognitive 17) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 18) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 24) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 31) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 34) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 39) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 39) (application/common/ckeditor/plugins/autogrow/plugin.js)
- (anonymous) (cognitive 49) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 51) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 56) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 59) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cognitive 70) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 100) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 19) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 25) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 29) (application/common/autocomplete/jquery-ui.js)
- (anonymous) (cyclomatic 29) (application/common/ckeditor/plugins/autogrow/plugin.js)
- …and 318 more
Changes since last survey
- 51 commits — 32 feature/other, 19 fixes
By area
- src/main — 41 commits
- application/forum — 5 commits
- application/message — 2 commits
- (root) — 1 commit
- application/WEB-INF — 1 commit
- application/query — 1 commit
Notable commits
- fix: fixed
- fix: fixed
- fix: fixed
- fix: fixed
- fix: fixed
- fix: fixed
- fix: fixed 100 -> 30
- fix: fixed @Inject lazyLoaderRole = null
- fix: fixed ViewCounter cached
- fix: fixed cdn ip
- fix: fixed format
- fix: fixed forumThread.getRootMessage().lazyLoaderRole
- fix: fixed getMessageVO() loading from db
- fix: fixed linkurl missed
- fix: fixed load balance
- fix: fixed memory leak
- fix: fixed performance
- fix: fixed strict lazy load
- fix: fixed waiting time 100
- change: <link rel="sitemap" type="application/xml" title="Sitemap" href="<%=domainUrl%>/sitemap.xml"> remove
- …and 31 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
banq/jivejdon was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 5b4451f36c725ad1f5612eda0901ecd35e4dff72 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-821afab8930d.