One of the problems with the Java programming language is there is just too many libraries to choose from.
If your going to do JSP, then… so many ways it can be done, Struts, RichFaces, Ajax4JSF, so many more, you cannot compare rationally. The bigger problem is what is the set of Java libraries you should be programming in.
Well my goal is simply to produce an Open Source CMS which I plan to release under LGPL. The primary language of the CMS is Scala in the LiftWeb environment, why? Since there is not yet a CMS in LiftWeb and so many people are interested in Scala, it can be a learning environment for those people. Also I will retain copyright and distribute it through my new I.T. company to help give positive press for it.
There will be different layers, the UI layer will be a combination of JQuery, HTML, Spry Framework and whatever LiftWeb and Scala can output.
The logic, control and presentation layer will be Scala and LiftWeb.
The services layer will be Java providing services to Scala and LiftWeb.
The database layer will be MySql combined with Sling content store.
The platform should be Tomcat or Jetty (keep it simple, not J2EE, we are a CMS not a Enterprise project).
Use Hibernate for database access.
Use Spring as well.
Use Apache commons.
Sling will be the content store.
Drools for business rules engine.
OSWorkflow for workflow.
Quartz for job schedule.
Clickstream to track users.
Maybe OFBiz, but I don’t understand it yet.
OSCache?
Compass for search or MG4J.
(I’ll keep searching for the set of Java libraries which are harmonious together)
Use Maven for the builds.
Use ActiveMQ for message Queue.
Use Scala for CMS logic and LiftWeb for CMS programming environment. Scala can call Java code easily, so it will access the database through Hibernate. By doing this it will keep a distance from database.
There will be a core of Java code which does some functonality and Scala code which calls Java code.
Why use Scala and LiftWeb? I could be using PHP and Zend Framework, its so nice, however there are many PHP CMS’s out there. My feeling is that its not worth the investment to attempt to competed in that area. There is a set of people who want to learn Scala and LiftWeb so the project can also assist them in learning in this area since its an Open Source project. Scala is also best of breed of programming languages, at a high level of abstraction. All control for the CMS should reside in Scala while services which assist the CMS should reside in Java.
Also since many people don’t have a Java Servlet stack, I’ll provide a PHP client program which can allow them to run the CMS on their LAMP stack or even ASP DOT NET stack (install PHP) and it calls the Scala server through web service calls. The PHP client will use Zend Framework.
The PHP client requires that the CMS server exists as a remote service, so this is what we call a hosted solution.
Perhaps I will provide the hosted solution for a minimal fee or add advertising to it.
Full control must reside in the LiftWeb and Scala language while Java librarys provides the environment in which it resides. Any plugins can be written purely in Scala. Why? I expect Scala programmers will be attracted to a CMS platform which can help them be productive and I agree with everything LiftWeb is doing so far from a technical point of view. I believe Scala programming could be much more productive than PHP programming and DOT NET programming. Java programming for the web is stuck in too many librarys and complex platforms while Scala and LiftWeb are new babies which can have a very nice CMS built on top to give one powerful platform. If the right abstractions are provided in Scala, then it can be very effective.
Now the rational is described its just a matter of slow steady progress towards that goal with baby steps and then to release early and get people involved.