I have recently been assigned to a new web application project on my company. The application is a data mining application that batchruns at least once a day and produces reports based on that data. We have an existing application that is a total mess of bashscripts, unixcommands, sql-files, and some extremely creative use of pipes and input/output descriptors. After this the business people takes the resulting data (the "cleaned" data) and applies another bunch of sql-queries to get the final reports done an distributed.
The problem is that this application is totally inflexible and takes forever to run (one of the tables have over 15 million rows).
So the requirements for the new system is roughly like this:
- Build it on a new plattform (I'm set on Java/servlets or a webapplication framework)
- Build it resonably modular and extensible.
- The batchrun has to be optimized considerably (sometimes it takes over two hours to run sucessfully, and if there is an error somewhere in the input data is has to be rerun). You can imagine what managment thinks about not having the reports in their hands at the end of business day.
- Build interfaces for the BS people to enable them to tweak some parameters and view/edit/add different aspects of source data in specific ways. They also want a query interface with preset queries and result tables into the target data tables.
- It *has* to be done (as in ready for deployment on production servers) in a month and a half. Yep.
The problem is, I have never built a Java
web application before. I have build web applications in Perl and Php for almost two years before starting at this company a year ago. So I have the general http/html knowledge. Here I have been coding server side core Java ( a socket based solution) for about 7 monts. So no detailed JSP
and no servlets
I have been reading up on web application frameworks and presentation technologies and I've come up with the following trail of thought:
is definately overkill for this, and the time constraint makes it impossible. I do have access to a Weblogic server farm for development and production but I think I want to develop with Tomcat
and test/deploy on Weblogic since this is most probably going to be the production environment.
- Some kind of "light" application container like Spring. Since I will have to build a web tier/data access tier/logic tier, why not make componts out of it right?
- Do I go for raw JSP, Spring templating (Spring *does* have it's own templating right?) or do I use Velocity for templating? I want to focus on the logic not input data validation and crap like that.
- Can I get a speed improvement in a batchrun environment by using ORM products like Hibernate in this context? Besides doing ordinary sql optimization ofcourse... Or can I get far enough by just going core JDBC
or using some kind of DAO pattern
I am leaning towards Spring/Spring templating/JDBC to keep it as simple as possible (considering the time constraint and my limited previous knowledge), but still extensible for later. I already know I have to extend it with more functionality in a later stage.
*Any* input on this would be greatly appreciated!
Jonas Larsson, troubled Java developer