We do very hard to make MyCollab is the easiest open source project management to develop and maintain. MyCollab aims to be an enterprise application with a lot of features, many of advanced programming techniques and we also spend uncountable hours to do our best to MyCollab code base so it is not easy for you to understand the whole architecture at the moment. This page and its children pages will help you capture basic knowledge of MyCollab architecture, basic core components then you can customize community edition meet your needs. But the best approach to optimize your development cost and time is hiring MyCollab development team, we are author of MyCollab and we know all tricks, some of them are hard to be explained in community pages
We mainly use spring for manage dependency injection, database transaction, and project configurations somehow. We combine spring configuration in both XML format and annotation. We heavily use spring in our service code, so if you really want to customize MyCollab, you must have Spring knowledge to know how we configure our system by Spring.
We use MyBatis to play as persistence layer separate our service classes and database layer. MyBatis is used heavily in MyCollab with custom query, we also add several extensions to MyBatis make it more useful for our business, MyBatis is a must knowledge if you want to customize our query in persistence layer.
MyCollab UI is developed by using Vaadin. We enhance power of Vaadin by using our own MVP framework. You should learn Vaadin if you plan to customize MyCollab UI.
MyCollab uses Jackrabbit as an abstract layer to keep content metadata. We say ‘content’ means it may be a file, a document or some kind of information in MyCollab. The real storage to keep content may be on database, file system or Amazon S3. If you want to change our implement of the content system, you must learn how to use Jackrabbit API before diving to our code and make customization.
Testing is one of the most important tasks in our daily development time. All crucial features must be passed our automation test scripts. We also enhance unit test base on our needs og writing efficient test cases. The community export our part of testing framework, and several test cases only (more than 100) and you must learn to write functional test before starting to write test cases for MyCollab.
We love to write good code. We develop MyCollab in modular approach follow Object Oriented principle. We seriously follow package principlehttp://en.wikipedia.org/wiki/Package_principles and we may move our source codes from one project to another project. But there are projects they never change their names and responsibilities, you should know them before getting any extension of MyCollab.
Project contains core classes used across MyCollab module, classes are played as base classes and not specific for any business. There are some responsibilities of classes in core package:
- Utility classes
- Utility classes for Spring, Camel or so, which use in Spring loader or control life cycle of integration patterns etc
- Template context (base on Velocity engine)
MyCollab Data Access Layer
Project contains generic class of DAO and Service parent classes, also related classes of handling generic query with MyBatis.
Quartz is used as our main scheduler to run all types of scheduling. We mostly use Cron task supported by Quartz, and integrate with Spring Quartz component.
Contains all services class of MyCollab include CRM, Project, Document Management and more. In case you need to extend MyCollab service business, this module is one you must stay on.
Contains all MyCollab UI classes display views. MyCollab UI is developed base on Vaadin 7 framework and our custom MVP pattern. You may see how we develop MyCollab UI in subsequent chapters.