views:

319

answers:

1

I would probably say this is more of a general posting asking for advice rather than a direct solution request.

I am currently in the process of laying down the design and infrastructure for a startup with a colleague of mine, nevertheless, my experience lays in the realm of Java Swing development and JavaScript/Ajax worlds as well as some C++. With this mind, I believe there are many other out there who can help out with suggestions and thoughts regarding my design suggestion.

The development would be divided into three main components, the first is a web page for users to search through resources. This has to be both scalable and multilingual.

The second is a Swing (though open to other Java and opensource alternatives) terminal at local businesses to manager requests done through the web. The terminal would be continuously connected to our infrastructure for status updates and feedback.

Finally, the infrastructure would be a number of stand alone Java servers running in clusters based on their functionality (management, reporting, query, etc).

Currently I am thinking of using the following as solutions: For my web tier, i would be implementing it using the Google Web Toolkit (considering its strength, adoption, and potential). Web tier would be managed via a load balanced tomcat instances directly connected via ActiveMQ to internal server resources.

The servers would be simple multi threaded Java servers processing messages from the ActiveMQ messaging service. I need advice about maintaining clustering (making sure data is synchronized as well as the ability to load balance so communication between similar servers is crucial)

Finally, I am not sure how to implement this, but my initial thoughts are to connect remote terminals to the core network, through a gateway server (thought of a tomcat instance but for bidirectionality had to drop the thought) via Active MQ or simply over TCP.

I am not concerned with using Tomcat vs. JEE or spring since the bulk of the heavy lifting would in effect be done by the back end servers.

Is my design feasible? Do you have any recommendations? Major flaws? scalability issues? I would greatly appreciate all input...

+1  A: 

Instead of writing your own servers with custom threading, try using established JEE servers (Glassfish, JBoss, Geronimo). They will simplify you backend and reduce you development time. We are talking here of tried and tested application server. Spring has a rich API that have made me productive, with the downside of possibly lot of XML configs(which themselves are good since you can greater alter the application without writing a lot of code). I would recommend Spring on a JEE server

I would recommend Tapestry for the web tier because it simplifies development and have supports basic CRUD out of the box. Some detailed howtos. That said consider a detailed web framework comparison

For the Desktop application i would suggest Eclipse RCP, however you need to make sure you understand the Eclipse RCP framework, some tutorials. You might want to make the this application web based if they is not much business logic on the client side.

Connection issues can be greatly simplified by using Web Services over SSL with authentication. But this can be slow. Other option can be Google's Protocol Buffers

These are only tools for the trade, therefore consider coming up with a good design as well.

n002213f