Should I use Session EJBs to hide Hibernate, or have Hibernate code in each rich client, some how (assuming it's possible) using JBoss Cache to help the clients with performance?
We've got a project that requires several different rich, job specific GUI's (read: Swing or SWT) to be created. Some of these UI's are very data-intensive (e.g. a real-time dispatcher's screen). Would it be possible/wise to use Hibernate code at each client and have Hibernate utilize JBoss Cache? Or would it be better to leave the Hibernate code on the server behind Session EJBs and pass pure POJO's across the network?
In this project, data will change quite often and several people will need to see it updated on the fly, for others data will change at a slower pace (e.g. Quoting/Pricing)
Bonus Question: Would a combination of the two approaches work? Could I have the data-intensive, real-time, GUI's use Hibernate on the client and plug into the JBoss Cache being used by my Session EJBs?
It is hard to say. But keep in mind that cache only works when you have read-mostly data. If you update often, you may better off with direct access to DB, for the entity case.
But if you have a one active and multiple passives for stateful data, then JBossCache can still makes snese though.