Isaac,
1 and 3) Your tech stack is fine. Whether you use Hibernate or
JDBC probably depends on the complexity of your queries. If you use raw SQL, look at Spring's JdbcTemplate.
2) Think about what concurrent requests means to you. 50K requests per second? minute? etc. With large volume,
you should look into having small HttpSessions. Also, look about clones/multiple servers to support volume.
4) Read up on responsive design if you haven't already
TDD doesn't conflict with anything you mentioned above.