I have a bunch of data in a central, MySQL database that is read-only so far as my application is concerned. I want to read that data into the local HSQL database at start, before users can start hitting my web pages, and update that information every 30 minutes or so.

1. Entity beans. Though for my intermittent process, it can be either since all it will do is transfer data, not perform logic on the contents.

2. Performance. Any data processing that can be done outside of the database needs to be done outside of it.

3. Noted. (Though, probably more important is that I'm using the columnDefinition setting in a few of my @Column annotations, which locks my entities in to MySQL. Setting up a local version instead of HSQL isn't a big issue, though.)

So far, the best that I've seen for running something at start is to use a ServletContextListener that I reference in the <listener> tag of web.xml. Should that work alright? If I attach a callback to a timer on a 30 minute delay, should that work fine as well?

If you are using JBoss AS6 then you have the Java EE6 spec specified @Startup @Singleton beans which can be used to do your startup activities. Java EE6 also have advanced timer functionality including auto-timers (i.e. you don't have to programatically explicitly create the timers).