We are building a product for Procurement Domain in JAVA.
Following are the main technical requirements.
- Platform Independent
- Database Independent
- Browser Independent
In functional requirements the product is very dynamic in nature. The main reason being the procurement process around the world is different from client to client.
Briefly we need to have a dynamic workflow engine and a dynamic template engine. The workflow engine by which we can define any kind of workflows and the template engine allows us to define any kind of data structures and based on definition it can get the user input through workflow.
We have been developing this product for almost 2 years. It has been a long time till we can get down with the dynamics of requirements.
Till now we have developed a basic workflow and template engine and which is in use at one of the client.
We have been using following technologies.
- GWT-Ext (Front End Framework)
- Hibernate (Database Layer)
In between we have faced some issues with GWT-Ext (mainly browser compatibility) and database optimization due to sub classing in hibernate.
For resolving GWT-Ext issue, which a dying community so we decided to move to SmartGWT. In SmartGWT we faced issues related to loading and now we are able to finalize that GWT 2.3 will be the way to go as the library is rich and performance is upto the mark.
We are able to almost finalize GWT-Spring based front and middle layer.
In hibernate, we found main issues with sub-classing due to that it was throwing astronomical queries and sometimes it would stop firing any queries for 5-10 seconds or may be around 30 seconds and then resume again. Few days back I came to one article related to ORM.
I am a traditional .Net SQL developer and I have always worked with relational database. Reading through this article, I also found it relating to the issues I face. I am still not completely convinced of using hibernate and this article just supported my opinion.
Following are the questions for which I am looking for an answer.
- Should we be going with Hibernate in case of dynamic database requirements and the load of the data will be heavy in future? How can we partition the data, how we can efficiently join the data, how we can optimize the queries? If the answer is no then how do we achieve database independence?
- Is our choice related to GWT and Spring proper or do we need to change that too?
- Should we use any other key value pair database if the data is dynamic in nature and it is very difficult to make it relational?