Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Does anyone know of any good books on this topic? I did search on amazon but ones that I found are pretty old publications.

share|improve this question
    
What versions of JEE technology are you using? What App Servers/DB/Operating System are you running on? Or are you just after some theory? –  Martijn Verburg Jan 17 '11 at 17:11
    
JEE 5. Weblogic with Oracle and DB2. I am also after some general guidelines too. Obviously I use profilers to track performance bottlenecks and improve where possible but I would like to find out from the "experts" on how they usually design enterprise high volume apps (common characteristics). I imagine it can't be covered in an answer so I was looking for a book that has details or use cases. –  CoolBeans Jan 17 '11 at 17:39
    
Note that most application servers have tuning tools which by nature are highly vendor specific. That might be a low hanging fruit. –  user1249 Jan 17 '11 at 21:26
    
Revised my answer to address the book recommendation –  Gary Rowe Jan 19 '11 at 9:59
add comment

1 Answer 1

up vote 4 down vote accepted

Edit to cover revised question (originally required characteristics of high performance JEE languages in lieu of available of books).

Book recommendation

You may find that Pro Java EE Performance Management & Optimization can help. It available on Zshops (from USA/UK) and Kindle if required. It may be a little dated at 2006, but the principles it details are sound.


General characteristics of a high performance JEE application

Assuming that you are targeting a Java web application, and not some JMS powered backend, then consider the following:

Stateless

Having a stateless design reduces the impedance mismatch between the underlying web protocol (HTTP) and the application. You are able scale it much better because you can simply add more nodes to your cluster and not worry about sharing state between nodes.

Simple

If your overall number of complex instructions and processes is reduced then the effort your application has to make to get a request processed is reduced. If all functionality can be easily contained in a single application (e.g. single WAR with multiple JARs providing tiered functionality) then bottlenecks for the data flow are greatly reduced.

Efficient internal communication

Parsing takes time. If your system relies on XSLT transformation after transformation, XML marshalling then unmarshalling then marshalling again as you work through the layers spread over multiple machines in a DMZ, you're going to introduce some significant overheads. If all your internal systems work on Java then you could consider using RMI internally, with the public facing interface being based on RESTFul web services. Web services are really for heterogeneous architectures to allow interoperability.

Efficient use of resources

Use a caching layer if it will help. Perhaps test the performance of a more lightweight application container (say Jetty with Spring) instead of the more bloated WebSphere approach. Change the hardware in the servers to use solid state drives, or an entirely RAM-driven solution for extreme performance.

Optimised database access

Verify that there are no full table scans occurring on large tables as a result of poorly designed queries or indices. Your DBA should be able to direct you to performance issues on Oracle or DB2. Any modern JPA/JTA implementation (e.g. Hibernate) will produce efficient queries in response to an efficient domain model.

share|improve this answer
    
+1: Those characteristics apply to all languages used in server programming, not just JEE. –  Sjoerd Jan 17 '11 at 21:31
    
Thanks for a detailed answer Gary! –  CoolBeans Jan 19 '11 at 14:46
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.