Pra quem anda desenvolvendo aplica��es com Struts, e nao sabe como integrar
com outras ferramentas, existe na sourceforge uma lista de exemplos de
aplicacoes com ferramentas integradas. uma delas, o proprio hibernate... :)

http://sourceforge.net/project/showfiles.php?group_id=49385

download recomendado! :)

abra�os...
miojo
----- Original Message ----- 
From: "Philippe de M. Sevestre" <[EMAIL PROTECTED]>
To: "Victor Moreira de Gurjao" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Wednesday, June 25, 2003 2:31 PM
Subject: Re: [enterprise-list] Hibernate


> Victor,
>
> O padr�o que estou seguindo aqui � o seguinte:
>
>
> Criei uma classe abstrata ActionBase que extende a classe
> Action normal do struts. Nesta classe o "perform" obt�m a
> SessionFactory armazenada em uma vari�vel do tipo "ThreadLocal",
> criando-a caso necess�rio. Em seguida, chamo um overload do
> m�todo "perform" que recebe como argumento adicional a sess�o
> obtida na factory. Depois de retornar, executo a seq��ncia
> de flush/commit e retorno o forward que tiver voltado da
> "perform" especializado.
>
> Este processo est� protegido em um bloco try/catch/finally,
> de forma que, em caso de exce��o, seja feito o tratamento
> adequado de erro, ou seja, rollback e _descarte da sess�o_ (lembre-se
disto
> !!!)
>
> Para configura��o, vc. pode usar um m�todo que armazene em uma vari�vel
> est�tica da classe base um flag indicando se o Hibernate est� inicializado
> ou
> n�o. Se n�o estiver, basta chamar o Hibernate.configure(). Algo assim:
>
> public class ActionBase extents Action {
> ...
> private static boolean hiberateConfigurado = false;
> private static Object  configLock = new Object();
>
> ...
>
> public ActionForward perform( ... ) {
>
>
>     // Inicia o hibernate caso necess�rio
>     if ( !hibernateConfigurado ) {
>
>
>         synchronized( configLock ) {
>             // Obs: teste para evitar poss�vel corrida
>             if ( !hibernateConfigurado ) {
>                 Hibernate.configure();
>
>                 // Pega a factory no JNDI
>                 InitialContext ctx = new InitialContext();
>                 sessionFactory = (SessionFactory)
> ctx.lookup("HibernateSessionFactory");
>
>                 // Salva a factory no servlet context
>
> getServlet().getServletContext().setAttribute("factory",sessionFactory);
>
>                 // Agora estou configurado
>                 hibernateConfigurado = true;
>
>             }
>         }
>
>     }
>
>     ... obtem a sess�o usando uma vari�vel ThreadLocal
>
>     ... chama o m�todo "perform" da classe derivada, passando a sess�o de
> persist�ncia...
>
>     ... flush/commit ou rollback/close.
> }
>
>
> Quanto ao filtro, n�o estou achando agora, mas estava l�, sim... De qq
modo
> sugiro uma boa olhada em http://hibernate.bluemars.net/36.html
>
>
>
>
>
>
> ----- Original Message -----
> From: "Victor Moreira de Gurjao" <[EMAIL PROTECTED]>
> To: "'Philippe de M. Sevestre'" <[EMAIL PROTECTED]>
> Sent: quarta-feira, 25 de junho de 2003 11:48
> Subject: RES: [enterprise-list] Hibernate
>
>
> > Ol� Philippe,
> >
> > Primeiramente obrigado por sua resposta. Acho, inclusive, que voc� pode
me
> > ajudar a chegar exatamente onde desejo... Minha d�vida maior diz
respeito
> a
> > arquitetura.
> >
> > Estou usando Struts + hibernate. Minhas classes Action acessam uma
camada
> de
> > aplica��o, que acessa uma camada de neg�cio, que acessa uma camada de
> > persist�ncia (um pacote com as classes a serem persistidas tal qual vc
> > sugeriu).
> >
> > Meu exemplo consiste em um simples cadastro de usu�rios com uma tela de
> > cadastro e edi��o e uma tela de listagem que faculta excluir ou editar
os
> > itens listados.
> > Assim, os passos para o cadastro s�o (de uma forma grosseira):
> >
> > JSP -> ActionServlet -> ActionForm -> Action -> CamadaAplica��o ->
> > CamadaNegocio -> CamadaPersist�ncia
> >
> > N�o sei onde colocar o Datastore (ou executar o m�todo configure() do
> > hibernate), seria uma fun��o chamada logo na "carga" da aplica��o e
> deixando
> > o SessionFactory no JNDI? Tenho d�vida sobre onde devo colocar a minha
> > sess�o (observe que tenho de cadastrar, ver o valor listado, editar,
> excluir
> > - talvez - e s� ent�o persistir no banco). Suponho eu que devo
> compartilhar
> > a mesma sess�o para as fun��es de listagem, cadastro, edi��o e
exclus�o...
> > Ou n�o???
> >
> > Voc� sugeriu que eu deixasse a ger�ncia do ciclo de vida das sess�es no
> > n�vel do "controller". Onde exatamente isso ficaria?
> >
> > N�o achei o exemplo que voc� citou no site. N�o vi a utiliza��o de
> filtros,
> > ser� que voc� pode mandar o link? Tenho caracter�stica autodidata e uma
> > certa dificuldade em pedir esse tipo de informa��o, pois me sinto meio
> man�
> > ao faz�-lo... Foi mal estar importunando.
> >
> > Mais uma vez obrigado e desculpe por usar seu tempo. Tenho um prazo
> > relativamente curto para conseguir usar o hibernate de uma forma
> decente...
> > J� consigo fazer o b�sico. Partir para o avan�ado vai depender um pouco
do
> > seu help. Valeu!
> >
> > Atenciosamente,
> >
> > V�ctor Gurj�o
> >
> > -----Mensagem original-----
> > De: Philippe de M. Sevestre [mailto:[EMAIL PROTECTED]
> > Enviada em: ter�a-feira, 24 de junho de 2003 10:04
> > Para: [EMAIL PROTECTED]
> > Assunto: Re: [enterprise-list] Hibernate
> >
> >
> > Ol� Victor,
> >
> >
> > Para configurar o Hibernate eu uso o m�todo est�tico configure() da
classe
> > Hibernate. Acho mais simples e  meu c�digo de inicializa��o fica desta
> forma
> > gen�rico, j� que n�o h� depend�ncia das classes a serem persistidas.
> >
> > Algo assim:
> >
> >   // COnfigura o hibernate a partir do arquivo hibernate.cfg.xml
> >   // No retorno a session factory estar� registrada no JNDI.
> >   Hibernate.configure();
> >
> >   // Obt�m factory no JNDI
> >   Context ctx = new InitialContext();
> >
> >
> >   SessionFactory sessionFactory = (SessionFactory)
> > ctx.lookup("HibernateSessionFactory");
> >
> >
> > Quanto �s classes a serem registradas no Datastore, vc. ter� registrar
> todas
> > aquelas a serem persistidas. P.ex. se a classe A possui uma propriedade
da
> > classe B, ent�o B ter� que estar registrada se o "hbm" de A declarar
como
> > que a propriedade da classe B � persistente.
> >
> > ex:
> >
> > public class A {
> >
> >     // Persistente
> >     private Long _id;
> >     public Long getId() { return _id; }
> >     public void setId( Long id ) { _id = id; }
> >
> >     // Persistente
> >     private B _b;
> >     public B getB() { return _b; }
> >     public void setB( B b ) { _b = b ; }
> >
> >     // N�o persistente
> >     private C _c;
> >
> >     public C getC() { return _c; }
> >     public void setC( C c ) { _c = c;}
> >
> > }
> >
> >
> > A.hbm.xml :
> >
> >
> > <class name="A" table="A">
> >  <id column="id" name="id" type="java.lang.Long" unsaved-value="null">
> >      <generator class="native"/>
> >  </id>
> >
> >     <many-to-one name="b" column="b" class="B" />
> > </class>
> >
> >
> > No caso acima, a classe B teria que ser registrada tb. no hibernate, mas
> n�o
> > a classe C.
> >
> >
> > Quanto � divis�o de camadas, a parte de configura��o do datastore,
usando
> o
> > m�todo acima, fica isolada do resto do sistema. Os classes a serem
> > persistidas eu deixo em um mesmo "package" e assim fica f�cil ter uma
> vis�o
> > completa do modelo l�gico.
> >
> > Para gerenciar o ciclo de vida das sess�es de persist�ncia, o ideal �
> deixar
> > isto no n�vel do "controller" da sua aplica��o (estou assumindo aqui que
a
> > mesma esteja estruturada conforme o pattern MVC). No site do hibernate
h�
> um
> > exemplo de como isto pode ser implementado usando filtros.
> >
> >
> > Espero ter ajudado...
> >
> > Philippe.
> >
> >
> > ----- Original Message -----
> > From: "Victor Moreira de Gurjao" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: segunda-feira, 23 de junho de 2003 16:37
> > Subject: [enterprise-list] Hibernate
> >
> >
> > Ol� a todos,
> >
> > Estou iniciando o uso do Hibernate e tenho uma d�vida sobre a
> distribui��o,
> > em camadas, dos objetos que controlar�o a persist�ncia dos dados. Pe�o
> > desculpas pelo e-mail longo, mas gostaria de deixar claro qual � a
> d�vida...
> >
> > Tenho de criar um Datastore que armazenar� informa��es mapeadas das
> classes.
> > Devo criar ainda um SessionFactory que "fabricar�" sess�es para acesso
aos
> > dados. Depois eu uso os m�todos dos objetos-sess�o para inserir, alterar
e
> > excluir informa��es... Fa�o mais ou menos assim:
> >
> > Datastore ds = Hibernate.createDatastore();
> > ds.storeClass(MinhaClasse1.class);
> > sessionFactory = ds.buildSessionFactory();
> >
> > Session session = sessionFactory.openSession();
> >
> > session.save(objeto_da_minha_classe_1);
> > session.flush();
> > session.connection().commit();
> > session.close();
> >
> > D�vidas:
> >
> > Supondo que quero persistir v�rias classes, devo armazenar as classes
> > correlatas no mesmo Datastore? Devo armazenar todas as classes no mesmo
> > Datastore (n�o apenas as correlatas)? Devo criar meu Datastore em uma
> > camada, meu SessionFactory em outra e os comandos de atualiza��o da em
uma
> > terceira camada? Algu�m tem algum exemplo, com divis�o dos objetos do
> > Hibernate em camadas, que possa ceder para estudo? Algu�m sabe um link
que
> > indique uma boa divis�o das camadas para esse caso? Em que situa��es
devo
> > compartilhar do mesmo SessionFactory e do mesmo Datastore?
> >
> > V�ctor Moreira de Gurj�o
> >
> > Ps.: Sei que est� meio confuso, mas n�o consegui me expressar melhor.
> > Agrade�o respostas a qualquer das perguntas. Obrigado!
> >
> >
> >
> > ---------------------------------------------------------------------
> > Para cancelar a subscri��o, envie mensagem para:
> > [EMAIL PROTECTED]
> > Para comandos adicionais, envie mensagem para:
> > [EMAIL PROTECTED]
> >
>
>
> ---------------------------------------------------------------------
> Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
> Para comandos adicionais, envie mensagem para:
[EMAIL PROTECTED]


---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para: [EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]

Responder a