Como inicializar SessionFactory junto com o tomcat?

4 respostas
J

Amigos,

Já desenvolvo aplicações web a algum tempo e passei a utilizar o hibernate em nossas ultimas aplicações. Tudo corre muito bem, obrigado! Porém percebemos que o primeiro cara que acessa a aplicação após a inicialização do servidor tomcat fica meio cobaia da inicialização da sessão do hibernate, isso porque na primeira página são feitas algumas consultas ao banco para serem apresentadas e estas por sua vez requisitam uma sessão ao hibernate que acaba inicializando as classes mapeadas no hibernate.cfg.xml… Pois bem, gostaria de saber se há como deixar esta tarefa a cargo da inicialização do tomcat que ocorre uma vez na vida e outra na morte correto! Sendo assim diminuiria (muito) o tempo de acesso a primeira página de nossa aplicação. Andei vendo algo sobre a tag <load-on-startup> no web.xml porém não entendi como seria a implementação para este caso.

Alguém já passou por isso ? algum exemplo de implementação ?

Aproveitando o encejo, quando distribuímos aplicações web seja em arquivos .war ou simplesmente atualizando as classes/jsp´s diretamente no servidor também notamos que (no caso das páginas jsp) elas são compiladas em seu primeiro acesso para servlets e as vezes isso custa muito para um usuário mais apresadinho, diga-se de passagem “cliente” entendem… Existe alguma forma de compilar as páginas jsp para servlet´s e só após enviá-las ao meu servidor de produção ? Isso tb diminuiria (demais) o acesso as páginas que são modificadas com certa frequencia…

Bom, acho que é isso!

Quem puder dar uma maozinha eu agradeço e mutcho

Abraços

4 Respostas

L

Cara faz o seguinte:
1-Crie uma classe para criar sua sessionfactory
2-Crie um filter que é mapeado no web.xml
3-No filter vc invoca o metodo q cria sua session
resolvido seu mapping vai ser lido qdo o servidor de aplicacao for startado.

J

Ok!

Só não sei como dizer ao mapeamento do web.xml para invocar meu filter logo quando o tomcat for inicializado, pois do jeito que está ele está sendo invocado sempre qdo uma request é feita no servidor :sad:

Vlw

L
<web-app>

<distributable/>

<filter>

<filter-name>myFilter</filter-name>

<filter-class>com.my.Filter</filter-class>

</filter>

<filter-mapping>

<filter-name>myFilter</filter-name>

<servlet-name>filter</servlet-name>

</filter-mapping>

…

veja: <a href="http://e-docs.bea.com/wls/docs61/webapp/web_xml.html#1015950">http://e-docs.bea.com/wls/docs61/webapp/web_xml.html#1015950</a>

Nao se esqueca de implementar os metodos requeridos do Filter.
T

Olá Justino,

vc pode usar os listeners para resolver seu problema…

no caso o listener de Contexto … dê uma olhada na API em ServletContextListener … vc deverá implemntar essa interface em uma classe e codificar o método contextInitialized()…

Para falar para o container q essa classe eh um listener vc deve colocar na DD:

<listener>

<listener-class>

com.example.MyServletContextListener

</listener>

</listener-class>

Acho q eh isso… Abraço

Criado 23 de março de 2005
Ultima resposta 28 de mar. de 2005
Respostas 4
Participantes 3