Gostaria de informações sobre uma melhor arquitetura para um sistema Web?.
Tipo para a camada de banco, qual a melhor opção utilizar, Hibernate?, qual uma outra forma de utilizar na camada de BD a não ser JDBC. Existe alguma opção onde você possa utilizar um arquivo de propriedades onda se possa colocar as querys e dai ser chamadas pela aplicação?.
Estou pensando em utilizar JSF + EJB3, porém tenho dúvidas sobre esta camanda de banco.
Não gosto da ideia de colocar as queries em um arquivo de propriedades. Acho que seria a mesma coisa que usar jdbc diretamente, porém sem precisar ‘recompilar’ o programa para o caso de mudanças.
Para persistência de dados a melhor coisa é realmente usar algum Object/Relational Mapping, o hibernate é muito bom e é o mais popular, por isso eu o recomendo.
O hibernate nada mais é que um provider, mais uma camada de software que você adiciona a sua aplicação.
A ideia de se utilizar JSF e EJB3 eu acho excelente, trabalho com essas tecnologias e acho produtiva e e interessante. O JSF no meu ponto de vista oferece uma visualização amigavél e fácil de se programar e você pode unir isto ao RichFaces, IceFace e por ai a fora.
Além do JDBC, eu indico fortemente para um sistema web você utilizar nao somente um container web como por exemplo o Tomcat, mas um servidor de aplicação como o JBoss e deixar que este AS seja responsavél pelo gerenciamento do seu pool de conexões, afim de evitar inúmeros problemas.
Então ai vai a minha humilde opinião, faça o uso das tecnologias Java Server Faces (JSF), Enterprise JavaBeans (EJB) e JPA (Java Persistence API) e como provider para utilização do JPA use hibernate.
O JPA é uma forma de persistência do Java muito interessante, onde você utiliza Entity e etc. Dê uma boa pesquisada na net caso lhe interesse, há inúmeros artigos sobre esta(s) tecnologia(s).